在AI横飞的今天,网站页面不挂个聊天机器人都会觉得low,笔者在某搜索引擎的页面上就发现了这样一个聊天AI,无聊一试发现了一个xss。

位置.bmp

0×00 确定xss类型

首先,尝试过其他浏览器后发现都没有成功,原因很简单,其他浏览器连这个机器人都没有,丧…,那么首先推测这个xss的危害用户应该是比较小众的一部分,接下来看这个xss如何去利用。由于只是一个娱乐型的机器人,所以与机器人的聊天内容不会较长时间的去保存,一旦浏览器关闭,聊天内容也就丢失,不是存储或者反射型的xss,其实这个xss是一个self型的xss,也就是自己xss自己

0×01 思考利用方式

Slef型的xss利用比较多的方式就是csrf和clickjacking了,我们来看第一种csrf是否可行,首先我们看看这个聊天提交的数据包长的什么样?

datapack.bmp

如图,关键位置都已经打码,留意未打码的位置有一个叫sessionId的参数,这个参数标识着当前用户在这个AI聊天系统中的身份标识,也就相当于一个token,其的来源是cookie中的某一个字段,于是在这样的情况下想要成功的利用csrf是比较困难的,我目前的想法就是找到另一个xss把这个sessionId先打出来,亦或者有没有其他地方会泄露这个sessionId要么就是存不存在可以直接给这个sessionId直接赋值的情况。

于是想到了第二种方法clickjacking

0×02 clickjacking的利用框架

首先,为了快速生成clickjacking的poc框架,我在gayhub上找到了这个

https://github.com/samyk/quickjack

可以通过截图的方式方便的把需要劫持的部分网页截取出来,这个工具也提供在线的使用

http://samy.pl/quickjack/quickjack.html

通过截取之后按下“I‘am done“按钮就会生成对应的截取代码

quickjacking.bmp

quickjacking2.bmp

0×03 利用这个self-xss

首先,默认情况下是需要用户点击去打开这个AI聊天机器人的,于是我们就得先去劫持打开这个AI聊天机器人的按钮,像下面这样构造一个注册跳转页面

register.bmp

当用户点击之后也就相当于点击了button背后的聊天的按钮

register2.bmp

至于为什么是注册页面呢,灵感来源于此http://www.freebuf.com/articles/web/130462.html通过剪贴板的劫持我们可以劫持并篡改用户的输入,我们来看看注册页面长什么样?

email.bmp

这里的第一框是当前页面上的,只是伪造了样式,第二次“repeat your email“的框是劫持目标页面的,包括那个send按钮也是劫持来的,因为这个提交在劫持的页面上,所以对我们劫持替换的内容有一点要求:就是我们的替换的xss代码不能太明目张胆,想啊想啊我想到了这个“\x3cimg src=1onerror=alert(document.cookie)\x3e                  ”+copycontent,在xss code后面加上大量的空格然后加上用户复制的内容,然后因为框就那么大,所以在用户ctrl+a,ctrl+c,ctrl+v(具体细节看上面的链接)后界面看起来就会像下面这样

interface.bmp

嗯,基本没有什么异常,当用户点击send,bingo

evail.bmp

0×04 结论

这是http://www.freebuf.com/articles/web/130462.html的结论

如今的漏洞赏金项目都将点击劫持和Self-XSS排除在外,一旦这两个漏洞同时存在,那么要在目标机器上强制执行XSS payload也不再是难事。

Dylan Ayrey表示谈到很多公司会忽略XSS相关的漏洞报告,他特别提到

攻击者现在有越来越多创新的方法利用Self-XSS,我认为企业在收到这样的报告之后,也会开始重视这样的问题。

我的结论是对上面的结论别太乐观XD。

*本文原创作者:nancce