1.0.0 XSS漏洞简介
1.0.1 原理
XSS漏洞针对的是动态网页,通过在网页里插入恶意Script代码,当用户浏览该页时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。恶意脚本通过php的输出函数输出到html页面中,然后通过用户本地浏览器执行,所以xss漏洞关键就是寻找参数未过滤的输出函数。
例如这样:
<?php
$xss = $_GET['x'];
echo $xss;
?>
1.0.2 利用
XSS漏洞一般都是产生与前端,由于执行的是Javascript代码,所以理论上js代码能干的XSS漏洞都能实现,在PHP中常见的输出函数有:
print
、print_r
、echo
、printf
、sprintf
、die
、var_dump
、var_export
那么只要页面代码中存在这些函数且没有做相应的防护,那么我们就可以加以利用
1.0.3 危害
我们在前端页面中稍微复杂的逻辑几乎由js代码实现,那么js能干的是就多了
- 盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
- 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
- 盗窃企业重要的具有商业价值的资料
- 非法转账
- 强制发送电子邮件
- 网站挂马
- 控制受害者机器向其它网站发起攻击
常用的就是盗取账号,实际上也就是通过XSS漏洞执行获取用户cookies的代码,然后我们就可以利用cookis直接登录了,当然,只要存在XSS漏洞,那么实现其他功能只是插入js代码的问题,所以XSS攻击是看js脚本的(看看到底是谁的脚本更厉害?)
常出现场景
文章发表、评论、留言、注册资料的地方、修改资料的地方等
1.1.0 XSS的种类
1.1.1 反射性XSS(非持久型)
原理
反射型XSS,说人话就是一次性的漏洞。恶意代码不是一直嵌入在页面中的,而是通过执行外部的js代码来实现的,每访问一次都要请求一次js脚本源码,通过诱导用户(社会工程学)点击包含恶意代码的链接才可以实现。现在最多的类型应该也是反射型XSS漏洞,毕竟谁会傻到直接让用户更改界面源码?
例如XSS-lab的level1就是典型的GET型XSS反射型漏洞

实际上反射性的XSS漏洞难点在于绕过,只要后端针对XSS的过滤或转义规则能被绕过就算成功了。实际上XSS-lab的关卡实质上也是教我们如何绕过,绕过放文章最后
1.1.2 存储型XSS(持久型)
存储型XSS和反射型相反,它的js代码是直接存储字页面中的,就像页面的原生js代码一样被执行。但是这个实现条件比较苛刻,就像上面说的,不会有谁直接让用户修改页面源码的。但是存储型XSS的危害也要大的多,存储在页面源码中意味着每个访问这个页面的用户都会中招,而且完全没有标志(哪个黑客攻击会写 alert() 🤣)
存储型XSS漏洞一旦被找到,那么剩下的也就是js脚本问题了
1.1.3 XSS蠕虫
这个是一种有趣的攻击,不同于上述两种XSS漏洞,XSS蠕虫不是一种新的攻击方式,实际上XSS蠕虫也是使用反射型和存储型的XSS来实现的,但是XSS蠕虫可以自动传播。例如通过存储型XSS漏洞,我在某人的微博界面嵌入了恶意代码获取了访问用户的cookies,但是也只有访问这个用户的微博界面才会中招,但是加入我通过增加传播属性,例如访问该界面是除了获取cookies,还会自动发送一个同样包含同样的恶意代码的博文,那么这种传播就会想细菌复制越来越快。
但是这个有点难,以后再来研究,历史上著名的XSS蠕虫Samy
https://segmentfault.com/a/1190000039654901
2.0.0 绕过
3.0.0 XSS的js脚本收集
http://ld.frp.one:16666/%E5%85%B1%E4%BA%AB%E6%96%87%E4%BB%B6/XSS%E8%84%9A%E6%9C%AC