pikachu之Cross-Site-Scripting
反射型xss(get)
抓包情况
使用123</p><script>alert(666)</script>
可以完成闭合
由于输入框的输入长度有限制,所以修改为100,或者直接在get参数里输入也可以
弹窗
反射性xss(post)
先用admin/123456登陆一下系统,为了获得cookie,如果想要尝试,可以在xss完成后插入beef的恶意代码来获取cookie
抓包查看
使用123</p><script>alert(666)</script>
可以完成闭合
弹窗
存储型xss
在留言板进行留言123,看看html情况
使用 </p><script>alert(666)</script>
进行闭合,之后每次访问留言板都会弹窗
DOM型xss
看一下题目,发现并不会把输入的内容回显
既然是DOM型,那就看一下html代码,看到在click me!按钮被点击时,会调用onclick()函数
找到onclick()函数看一看,发现函数的作用是把输入的内容作为<a>
标签的href参数拼接进去,然后将a标签通过innerhtml的方式拼接到占位符dom里面去
所以根据
function domxss(){ var str = document.getElementById("text").value; document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>"; }
进行闭合就可以
使用123'>123</a><img src=1 onerror=alert(666)>
进行闭合,点击click me按钮就弹窗,因为点击click me按钮,就会执行domxss(),从而把恶意闭合代码插入到占位符dom中
需要注意:使用innerHTML插入script脚本时候,script是不会得到执行的,所以在实验时,使用123'>123</a><script>alert(666)</script><a href='
并不能弹窗
DOM型xss-x
点击请说出你的伤心往事,看js代码,只是普通的表单传值
点击 有些费尽心机想要忘记的事情,后来真的就忘掉了,会调用domxss()
domxss()函数,就是把输入的内容进行解码过滤后作为a标签的href参数,然后把a标签插入到占位符dom里面
使用控制台看看这段函数的功能,decodeURIComponent是把比如url中的%23,转换为#
构造payload www.baidu.com'><img src=1 onerror=alert(111)>
点击请说出你的伤心往事,然后点击有些费尽心机…就可以完成弹窗
xss之盲打
点击提交后,并不会对输入的内容进行回显
看一下提示,登录到后台看看
后台会将用户的反馈显示给管理员,看到提交的内容的闭合方式
构造payload </td></tr><script>alert(123)</script>
进行提交
管理员查看时便完成弹窗
xss之过滤
既然xss过滤,就输入一堆可以xss的常用标签,试图找到没被过滤的标签
发现img 和 confirm没被过滤 使用payload </p><img src=1 onerror=confirm(999)>
可完成弹窗
xss之htmlspecialchars
输入的内容被a标签包裹,发现“<>
都会被转义<>"
,但是单引号没被转义
方法一:利用单引号不会被转义
payload
666' οnmοuseοver='alert(1)
方法二:输入的内容会作为a标签href的值
payload
javascript:alert(1)
点击a标签时就会弹窗,javascript:是表示在触发默认动作时,执行一段JavaScript代码
xss之href输出
a标签的href参数可控,直接输入javascript:alert(1),点击a标签就可以弹窗
xss之js输出
发现输入拼接到js里了
使用123'</script><img src=1 onerror=alert(66)>
闭合