邪恶八进制信息安全团队技术讨论组's Archiver

langouster 2007-1-1 10:01

[原创]突破一流信息监控系统等IIS防火墙实现注入

文章作者:langouster
信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])

    先来说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呢??鉴于一流这种无所谓的态度我就公开此漏洞,希望他们能以此为鉴。

xyzreg 2007-1-1 11:07

[b]%解码的思路早有应用了,2001的Unicode解码漏洞,以及常见的多态变形绕过IDS规则库检测等。
不过能想到用在突破ISAPI的IIS Firewall实现注入还是不错的,呵呵。[/b]

茄子宝 2007-1-1 15:01

%随机一下,替换空格,特定环境来个EXECUTE,可以写个很棒的注入工具.

k.l 2007-1-1 15:30

以前看过把注入的语句写成大写也可绕过网站的过滤,没想到这也可以

trace 2007-1-1 19:55

确实好思路啊。
不过有的防注入程序已经把%列进黑明单了。

黑病毒 2007-1-1 22:34

在lake2的blog里面也有一篇这样的文章。方法好像不一样。

黑病毒 2007-1-1 22:43

把两篇目的一样的文章整一下,大家做为参考吧。


文章作者:langouster
信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])

  先来说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呢??鉴于一流这种无所谓的态度我就公开此漏洞,希望他们能以此为鉴。
[color=Red]----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------[/color]
by lake2 ([url]http://lake2.0x54.org[/url])


上回渗透一站点,SQL Injection测试时返回这个页面(图1)

[img]http://blog.csdn.net/images/blog_csdn_net/lake2/imb1.jpg[/img]
我晕,原来服务器上装了一个叫“一流信息监控拦截系统”的BT玩意儿,扫兴!查查它老底先。

Google一下“一流信息监控拦截系统”。原来这是广州××信息科技公司开发的内容监控系统,用来监控拦截非法信息的,当然也包括SQL注射。它主页上软件功能介绍赫然写着:“软件可以全面拦截任何的SQL注入式的攻击,就算多差的程序都不用担心了”。嘿嘿,大哥,牛皮不要吹得太大哟,不然怎么好下台啊。

看他把话说得那么绝,我一定要给他点颜色瞧瞧。呵呵,不是说只有想不到没有做不到么,嗯,让我想想先。网上没有找到那软件下载,算啦,就直接在网站上测试好了。

经过几回合测试,我发现那个软件是拦截独立的关键词,也就是拦截字符串“and”,而不会拦截包含“and”的字符串如“island”。提交[url]http://xxx/x.asp?x=island[/url] 1=2时没问题,而提交[url]http://xxx/x.asp?x=a[/url] 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”)。

[img]http://blog.csdn.net/images/blog_csdn_net/lake2/imb2.jpg[/img]
Yeah,成功啦!传说中的一流信息监控拦截系统被我们绕过去了。哈哈,那个什么系统正好是个漏洞百出的Web程序,呵呵,继续如法炮制进行SQL注射拿管理员帐号密码得WebShell,那些都是体力活了,略过略过。

有了WebShell,执行“net user”命令又被他拦截了(这个可恶的家伙……),呵呵,小case啦,那就执行“net  user”(中间两个空格)吧^_^

当然这种用Tab代替空格突破限制的方法也不仅仅局限于“一流信息监控拦截系统”,只要是类似的过滤方法就行。比如说青创文章系统(Version 1.5.2.23.7.0),它就是这种过滤方法,但是还过滤了“_”,而它的每个表都是article_xxx的形式,结果还是不能进行猜解。罢休!

最后顺便说下,一流信息监控系统“可以实时监控用户上传到服务器的每一张图片”、“对使用服务器的用户进行关键字监控,无论是通过 FTP方式上传或web方式上传的文件都可以准确监控,将不法用户的行为记录在案”等功能,好像侵犯隐私权了……

trace 2007-1-2 15:11

WebKnight Application Firewall  


试过这个么?

softbug 2007-1-3 12:33

试过VIF 3.35.3吗? 一流的拦截本身就是垃圾
我很自豪的这么说。

langouster 2007-1-3 16:30

[quote][b]引用第8楼[i]softbug[/i]于[i]2007-01-03 12:33[/i]发表的[/b]:
试过VIF 3.05吗? 一流的拦截本身就是垃圾
我很自豪的这么说。[/quote]

在[url]http://www.myiis.cn/News/Show.asp?id=45[/url]后面加了一个%' 过了vif,但被本身的asp拦截。不知道官网用的是什么版本。

redwolf 2007-1-4 09:03

去试试先,正好前二天一个网站使用的是这个系统,搞得我郁闷了半天,网上找了半天也只有lake2的方法,试了下还是行不通,没想到刚过一天楼主就发个新方法,呵呵``谢了先,

eocol 2007-1-4 10:27

猪3以前提起过,
马加密之后,<%替换为<%%25

fr.qaker 2007-1-5 16:36

这个文章好,支持一个,确实没有考虑到

kine 2007-1-5 16:48

小马上传成功,大马没办法实现.
我把海洋顶端割分成若干独立的文件依次上传,难逃恶运.
都被拦截住了.

kine 2007-1-6 18:22

昨天我终于实现了,把大马传上去了!
把一个空的数据库和ASP以二进制合并成功绕过一流信息监控系统.但我还是不知道原理是什么?

softbug 2007-1-10 11:32

[url]http://forum.eviloctal.com/read.php?tid=26729[/url]

页: [1]
© 1999-2008 EvilOctal Security Team