pikachu xss
- xss
- 反射型xss(get)
- 反射型xss(post)
- 存储型xss
- Dom型xss
- DOM型xss-x
- xss之盲打
- xss之过滤
- xss之htmlspecialchars
- xss之href输出
- xss之js输出
xss
跨站脚本(Cross-Site Scripting)是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。它允许恶意用户将代码注入网页,其他用户在浏览网页时就会受到影响。恶意用户利用xss代码攻击成功后,可能层到很高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
xss攻击可以分为三种:放射型、存储型和DOM型。
反射型xss(get)
输入测试代码查看是否有过滤,查看下源码。
发现我们的测试代码直接在p标签中输出,直接使用<script>alert(/1/)</script>
但发现对长度有限制,定位输入框直接修改长度
成功执行
反射型xss(post)
先登陆 admin 123456
因为时post方法我们可以进行抓包来查看
有一个message提交的参数是url编码,我们可以发送到decoder模块中解码后可以看到是我们提交的测试代码。
将我们的payload进行URL编码并提交。
可以看到我们的payload已经成功插入到p标签中,我们在浏览器中查看一下。
存储型xss
存储型xss又称持久型xss,攻击脚本将脚本永久的放在目标服务器的数据库或文件中,具有很高的隐蔽性。
攻击方式:常见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。
输入测试代码,查看是否有过滤。
测试代码直接输出在了p标签中,可以直接输入
payload,<script>alert(/xss/)</script>
存储型xss,当每次点击存储型xss时就会弹窗,所以是持久型xss。
Dom型xss
HTML DOM树
输入测试代码
显示的内容和我们的输入的有所不同查看页面源码
getElementById获取标签id为text的值给str,str通过字符串拼接到a标签中。所以我们要闭合前面的标签。
payload ‘><img src=x onerror=alert(/xss/)>
DOM型xss-x
点击请说出你的伤心往事就会弹出一句话
查看下页面源码
domxss函数,使用window.location.search获取url的赋值值给str,经过url解码,取出的内容赋值给txss,将txss中的 “+” 替换为 “空格” 赋值给xss,最后将xss拼接到a标签中。和上面的方法相同,payload需要闭合标签。
'><img src=x onmouseover="alert(/xss/)">
鼠标悬停在图片上就会弹窗
xss之盲打
xss盲打是一种攻击场景。我们输出的payload不会再前端进行输出,当管理员查看时就会遭到xss攻击。
提示中告诉我们管理地址是/xssblind/admin_login.php,登陆到后台时就会遭受攻击
xss之过滤
输入测试代码,返回的值和我们输入的不同,查看页面源码。
可以看到他将我们的script过滤掉了。我们可以使用双写尝试绕过。
<scri<script>pt>alert(/xss/)</scri</script>pt>
都过滤掉了,尝试大小写绕过
<SCRIPT>alert(/xss/)</sCRIpt>
成功绕过
当script为过滤关键词时,可以尝试其他的payload,如
<img src=x onmouseover="alert(/xss/)">
还可以尝试编码绕过,可自行尝试一下。
xss之htmlspecialchars
PHP htmlspecialchars() 函数
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
预定义的字符是:
- & (和号)成为 &
- " (双引号)成为 "
- ’ (单引号)成为 ’
- < (小于)成为 <
- .> (大于)成为 >
用法:htmlspecialchars(string,flags,character-set,double_encode)
示例:
<?php
$str = "This is some <b>bold</b> text.";
echo htmlspecialchars($str);
?>
我们输入测试代码,查看页面源码
可以看到<,>,“都做了转码,唯独”’"(单引号)没有进行转码,可以使用单引号构造payload。
' οnclick=alert(/xss/) '
xss之href输出
输入测试代码,查看下页面源码。
可以看到过滤了 ’,“,<,> 这时候我们可以尝试使用伪协议绕过。
javascript:alert(/xss/)
xss之js输出
输入测试代码,查看下源码
输入的代码被生成再js中并赋值给$ms。既然我们的输入被带入到js中,可以闭合
</script><script>alert(/xss/)</script>
成功执行
人生漫漫其修远兮,网安无止境。
一同前行,加油!