XSS漏洞攻击原理
跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
一般XSS可以分为如下几种常见类型:
1.反射性XSS;
2.存储型XSS;
3.DOM型XSS;
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
反射型xss(get)
看到xss输入框,直接跟看到后台要试万能密码一样去试xss一句话
<script>alert('mlws')</script>
限制了输入内容的长度
f12,选择输入框,把最大长度改为100
再次输入代码
或者直接在网址栏修改
反射型xss(post)
给了提示为post形式
打开提示给了账号密码
进入界面,输入账号密码admin/123456
登录成功后的界面
打开bp进行抓包
输入test点击submit
它会在界面回显你输入的内容,所以可能存在xss漏洞
对message进行修改
payload:
<script>alert("mlws")</script>
payload自动进行了url编码,我们对其进行url编码(也就是对以上的payload进行两次url编码)
在浏览器中打开response
存储型xss
存储型xss又称持久型xss,攻击脚本将脚本永久的放在目标服务器的数据库或文件中,具有很高的隐蔽性。
攻击方式:常见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。
输入payload:
<script>alert("mlws")</script>
每次打开都会显示弹窗,所以为存储型xss
DOM型xss
输入测试代码
"'<>script
通过what do you see找到script
获取ID为text的值传参给str,str拼接到a标签里面,需要把前面的标签给闭合
设置payload为
'><img src=x onerror=alert(/xss/)>
DOM型xss-x
点击右侧的按钮,就会弹出一句话
找到下面的源码
使用window.location.search获取url的赋值值给str,经过url解码,取出的内容赋值给txss,将txss中的 “+” 替换为 “空格” 赋值给xss,最后将xss拼接到a标签中。和上面的方法相同,payload需要闭合标签。
'><img src=x onmouseover="alert(/xss/)">
需要点击“有些”蓝色文字,显示上面图片那一行
鼠标悬停在这个图片上就会弹出xss
xss之盲打
xss盲打是一种攻击场景。我们输出的payload不会再前端进行输出,当管理员查看时就会遭到xss攻击。
一样输入payload
<script>alert('mlws')</script>
登录后台模拟管理员查看信息
看到xss弹出,因为我用的公共靶场,所以弹得1
弹了两次框,可以看到我们写的xss也在里面
xss之过滤
输入测试的语句
回显如下
过滤掉了script和<>
尝试双写script和大小写绕过(双写无效)
<SCRIPT>alert('mlws')</SCRIPT>
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
<SCRIPT>alert('mlws')</SCRIPT>
可以看到<>被转义
只有'(单引号)未被转义
可以直接利用单引号构造payload
#' onclick='alert(1)'
点击蓝色链接成功弹窗
xss之href输出
输入<script>alert(1)</script>进行测试,没法弹窗,查看源代码被转义
尝试伪协议绕过
javascript:alert(/xss/)
成功弹窗
xss之js输出
输入<script>alert(1)</script>测试一下
查看源代码
首先要用’;闭合掉当前的语句,然后插入新语句,然后再用//注释掉老语句遗留下来的’;
payload:
';alert(1);//
成功弹窗