0x00 前言
很多人现在都没懂xss为什么这么鸡肋的漏洞能排到owasp前十名,xss做多也就拿来做个弹窗和打cookie,然后进入后台,感觉没啥意义,还不如弱口令来得实在。那么我们就先来看看xss的作用和用途。
但是xss如果真的去了解他的话,能玩出不少花样,就例如前段时间面试某大厂问到的,xss能干嘛?这点是比较关键的一个点。如果是按照挖洞来说xss能打cookie 、能弹窗就行,这样的对应网站或者是厂商来说影响不是很大。而且要是存储下的xss才可以。这样的情况最多只能进管理后台,然后还要通过文件上传的方式才能拿shell。
那么对于做一些违法网站的人来说呢,这个xss可以做到url劫持,或者是弹出广告等等。
那么如果我们再往深了说呢?
xss能页面钓鱼、内网探测、配合csrf打组合拳、截取摄像头、键盘记录、扫描内网端口信息、获取粘贴版内容、xss蠕虫等等操作。xss的一些蠕虫攻击也会配合到ajax。
还有一个值得我们思考的问题是危害最严重的一定是存储性xss吗?
这个问题是一直都有争议的。
那么我们先来聊聊存储型xss
1.存储型xss:这个无容置疑是最简单利用的,也是最有效的,能直接看到成果。比如可以配合beef使用,具体能干嘛这里就不做多的赘述,前面都有提到过,其他类型能做到的存储型的基本都能实现。一些apt组织也经常会利用到xss进行水坑攻击。
2.反射性xss :反射性xss只能够自己提交,然后直接返回给我们前端,这样的话我们只能通过社工的方式发送给管理员来使得对方提交。
设想一下如果我们构建的不是弹窗和获取发送cookie的代码呢?
假设他的payload使一段和beef类似的,插入的代码是让js代码去请求hook.js,而js代码里面是爬取此网站的超链接,然后获取<input>标签,然后再value值里面再插入我们paylaod的内容,这样就形成的一个蠕虫攻击,但是这里要涉及的一点是跨域的问题,这里同源策略会阻止我们的js代码发起跨域请求。这时候就可以配合我们的cors跨域和jsonp跨域劫持了。
我们还可以写一个循环然后获取他所有的a标签,然后进行所有的a标签都替换成我们的csrf的链接。
3.dom型xss:这个xss发生的位置是在url里面产生的,我们可以直接在url里面插入xss paylaod ,编码后的url,然后再进行转换短链接。这时候就可以以社工的方式发送给管理员,进行cookie的盗取。如果对方开启httponly的话那就获取不到对方cookie,我们就需要用到其他的手段,例如钓鱼 先用xss跳转到一个cs克隆的某网站上面,然后页面再采用跳转,跳转到exe木马的路径,进行木马的下载。当然木马的伪装要好,例如前段时间比较流行的falsh钓鱼,免杀也是个问题,如果不会,也可以采用社工的手段诱使对方下载,例如金瓶xx续集,软件会报毒请关闭杀软,软件无毒,绿色版本等等手段。
0x02 xss实现
存储下xss:
至于怎么使用xss平台打cookie和弹窗的这里就不做赘述了。我们直接使用beef来实现。
来到kali终端
启动beef
这里看到127.0.0.1/ui/panel 的路径是beef的控制面板,我们需要从浏览器打开,然后在浏览器进行操控。
127.0.0.1/hook.js的这个地址是我们需要用xss插入的地址。
直接来到靶场,插入beef的payload。
插入到一个存在存储型xss的地方,就可以直接打开浏览器,来到控制面板就看到有主机上线了。
beef的功能很强大,可以直接上线时候探测系统版本,浏览器类型,主机ip。
点击主机,然后再点击 Current Browser可以看到上线主机的系统版本、类型 、内网ip 以及cookie信息。
使用flash进行钓鱼攻击:
选择Social Engineering的 Fake Flash Update 伪装flash更新模块。
image的位置我找了个网络图片来进行显示,在实战当中可以做得更逼真。
Custom Payload URI:这里填入需要跳转的地址,这里就可以填入木马的地址,当然为了更逼真可以先跳转到一个克隆的网页,然后再进行跳转到木马的地址,这里为了方便就直接填入木马的地址。
msf生成木马 ,在生成木马的时候可以-x参数指定一个flash.exe的模板。
启动web服务,然后beef的Custom Payload URI:选项填入木马的web地址。
msf启动监听
点击执行。
来到浏览器这边
点击保存运行,
成功上线。
反射性xss:
这里输入弹窗的语句成功的弹窗,并且payload语句显示在url上面,这是get的提交方式,我们可以直接来构造url语句然后发送给管理员钓鱼。
这里的payload要进行url编码,直接输入的话无法识别。
在物理机火狐浏览器访问这url时候能直接弹窗,在虚拟机的ie浏览器里面显示拦截了。
这是浏览器的csp,全称是内容安全策略。
我们这时候还得和csp对抗。
至于怎么绕过csp可以参考先知论坛某大佬的文章。
这里我们已经能弹窗,证明js代码能执行,我们可以配合csrf进行攻击。
我们先来使用get来试试。
抓取到一个get型csrf,然后构造语句。
csrf payload:
使用xss插入csrf payload
构造完成了 我们还需要把payload拿去url编码一下。
既然能弹窗那就肯定能打cookie
直接获取cookie传参给cookie,然后再cookie.PHP写一个get接收,写入文件,打cookie代码简单完成,成功获取到cookie信息。
那么如果我们是post型的csrf该怎么去打组合拳呢
我们可以直接获取到他的超链接然后进行替换,替换成我们伪造的页面,而页面的内容就是post型csrf的poc。
使用burp构造csrf poc ,复制HTML代码,然后写到html文件里面。
这里提交的内容已经做了隐藏,我们可以再写点钓鱼的东西让对方点击按钮,再修改按钮的值,例如点击中奖什么的。
这里思路有2种:
思路一实现:
思路2实现:
windows加载的时候获取所有的a标签,然后使用循环一一替换成192.168.31.111/1.html的页面。
构造语句:
这里有个超链接,点击看看
0x03 结尾
xss还有很多玩法,而至于xss危害性这个问题,我个人觉得 xss漏洞的危害应该是按照危害的严重性来评判,而不是按照漏洞类型来评判。xss反射性也能玩出一番花样,当时在广州参加了hackingone峰会上,也提到了这一点。如果是存储型xss拿来弹框,仅仅只是打到后台登录的cookie危害级别比较低,前几天看xss深度刨析一本书的时候看到某网站xss反射性也能蠕虫攻击,我当时也被这骚操作给惊到了。如果说想深入了解xss可以去参考《XSS跨站脚剖析与防御》这本书。