xss漏洞可以被用来进行钓鱼攻击、前端js挖矿、用户cookie获取,甚至可以结合浏览器自身的漏洞
对用户主机进行运程控制
XSS测试流程
1、在目标上找输入点,比如查询接口、留言板
2、 输入一组 “特殊字符(>,',"等)+唯一识别字符” ,点击提交后,查看返回源码,看后端返回的数据是否有处理
3、通过搜索定位到唯一字符,结合唯一字符前后语法确定是否可以构造执行js的条件(构造闭合)
4、 提交构造的脚本代码(以及各种绕过姿势),看是否可以成功执行,如果成功执行则说明存在XSS漏洞
第一关反射型xss(get)
注意到输入的值未做任何处理,直接输出到P标签,尝试输入,会发现有输入长度限制,直接控制器改掉去,再次提交出现xss弹窗
在浏览器的URL得到一个get请求,在新网页打开这个链接也会出现弹窗,GET方式的xss漏洞更容易被利用,
一般利用的方式是将带有跨站脚本的URL伪装后发送给目标,而POST方式由于是以表单方式提交,无法直接使用URL方式进行攻击。
http://pikachu/vul/xss/xss_reflected_get.php?message=<script>alert("xss")<%2Fscript>&submit=submit
第二关反射型xss(POST)
与get不同,POST输入的值URL不会有变化,所以POST传参第三关储存型xss
注意到好像对输入的值未作任何处理,构造js语句输入,输出弹窗,刷新之后依旧出现,因为这条留言已经被存储在数据库里了,所以每次访问都会出现
第四关DOM型xss
看了一下getElementById的使用,知道了后面的what do you see 其实可以是一个弹窗,
通过getElementById方法获取text,text就是我们要输入的内容,将text赋值给str,写到href里面
输入payload1
当鼠标移动到图片位置就会触发弹窗
输入payload2
点击what do you see就会触发弹窗
xss-x
第五关xss盲打
xss盲打不是攻击类型,而是一个攻击场景。
我们输入的内容不会出现在前端,只有在后台才能看见输入的内容,可以插入获取cookie的恶意代码,
管理员的cookie就可以不知不觉的被获取
第六关xss过滤
查看源码,发现script小写会被替换成空,一开始我以为可以向sql过滤一样双写script来绕过,但好像不行。
接着试了下大小写,可以造成弹窗
第七关xss之htmlspecialchars
htmlspecialchars()是PHP提供的一个对特殊字符进行转义的函数,把预定义的字符转化为HTML字体
&转换为&
"转换为"
'转换为'
<转换为<
转换为>
输入<'"?123>查看源代码,会发现<>" 都被替换过滤了,可以尝试用'来绕过
xss之href输出
查看了一下源码,知道了单双引号被过滤,输出在a标签的href属性里面,可以使用javascript协议来执行js,使用伪协议绕过
javascript:alert(/xss/)
xss之js绕过
输入的123会直接给变量MS,只需要构造闭合单引号就行,123'</script><script>alert(xss)//
或 123'; alert(/xss/); //