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

       文章作者: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呢??鉴于一流这种无所谓的态度我就公开此漏洞,希望他们能以此为鉴。
  • quote 1.菜鸟
  • 一流信息监控系统过滤了'符号,应该怎么传木马

    我在入侵过程中,一个网站装了一流信息监控系统,他过滤了'符号,以至于我什么马都传不了,我也看了网上一种突破这样系统的方法,传了个图片木马上去,再通过我在他上面的一句话木马传个调用图片内容的ASP页面,可还是被过滤了'符号,想请教高人指点下
  • 2007-02-26 08:27:31 回复该留言
  • quote 2.菜鸟
  • 我的QQ:545488850,谢谢,有办法的话请加我指点下
  • 2007-02-26 08:28:18 回复该留言
  • quote 3.langouster
  • 上传不了木马可能不是因为过滤了',估计还过滤了其它字符。
    既然你成功上传了一句话木马,那么也能上传其它木马。它们本质上是没有区别的,只是字符多一点,目标就大了一点。
    我猜可能用以下方法上传大马(没测试不能保证)
    1.将一个asp语句加密,比如将每个字符的asc码加1
    2.将加密字符串上传到服务器上,再写一个小马,内容类似
    <%
    str="加密过的asp字符串"
    execute decode(str)
    %>
    decode函数根据你的加密方法要自己写
    如果服务器还过滤了<%或%> 那你可以用runat来代替。

    以上方法没测试过,不能保证成功。
  • 2007-02-27 00:13:17 回复该留言
  • quote 4.Tr4c3
  • POST貌似不行.
    由 langouster 于 2007-03-14 18:56:27 最后编辑
  • 2007-03-14 18:42:02 回复该留言
  • quote 5.langouster
  • POST的我也没测试,不知道行不行。
    即使行,估计也要先抓包再修改提交,而不能在输入框中直接输入%',因为这样输入的%也会被译码。
    有时间时测试下看看。
  • 2007-03-14 18:57:17 回复该留言
  • quote 6.Tr4c3
  • http://www2.tr4c3.com
  • 有朋友在我BLOG上回复如下,不知道Langouster兄觉得说的有没道理,呵呵.

    QUOTE:
    这篇文章有一定的巧合性,不全对,要是输入sel%ect就变成了“sel靦”,输入sele%ct 正确。所以文章不全对,%对于其后的某些字符组合是很“敏感”的,会以汉字的形式表示出来。以我之见,因为16进制度里只到f,所以,第2次输入%ct不可以转换成汉字,但是%ec中的ef都在f 之前,就转换成了汉字!
  • 2007-03-16 02:08:50 回复该留言
  • quote 7.langouster
  • 他的说法是正确的,确实要是%后跟的是两位的0-F的字符,字符串就会被转义,达不到我们要的效果。
    但是这并不影响我们注入,比如服务器过滤了“ab” (假设,真的服务器不会过滤这个词吧),而我们要提交“ab”,怎么办?我们可以提交a%%b,这也是可以突破的。
  • 2007-03-16 12:46:13 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Copyright langouster. Some Rights Reserved.   苏ICP备06046736号   

本站点由 Z-Blog 2.0 bate Build 构建,基于 Glued Ideas Subtle 主题,由 zx.asd 移植并创新.