XSS详解
0x00-引言
沉淀一下基础
0x01-漏洞描述
XSS:跨站脚本(Cross-Site Scripting)。是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。它允许恶意用户将代码注入网页,其他用户在浏览网页时会受到影响。恶意用户利用XSS代码攻击成功后,可能得到很高的权限,执行一些操作,私密网页内容,会话和cookie等各种内容。《Web安全攻防:渗透测试实战指南》
0x02-漏洞原理
01-反射性XSS
反射性XSS又称非持久型XSS,攻击具有一次性
02-存储型XSS
存储型XSS又称持久性XSS,攻击脚本将被永久地放在目标服务器的数据库或文件中,具有很高的隐蔽性。
03-DOM型XSS
DOM全称Document Object Model,使用DOM可以使程序动态的访问和更新的内容、结构及样式
DOM型XSS其实是一种特殊类型的反射性XSS,它是基于DOM文档对象模型的一种漏洞。
DOM型数据流向:前端-->浏览器
HTML DOM树:
0x03-漏洞演示
靶场phpstudy + MS08067
01-反射性XSS
打开靶场
找到输入框,检查页面元素,构造payload闭合input标签
">
可以看到页面中已经插入也弹出payload
02-反射性XSS代码分析
XSS利用输出的环境来构造代码
把我们输入的字符串 输出到input里的value属性里
<?php
if (isset($_GET['xss_input_value'])) {
echo '';
}else{
echo '';
}
?>
看到后端获取输入框内的值,之后echo输出,我们构造的payload把input标签闭合了,之后会执行构造的payload中的标签,后端代码没有过滤机制
03-存储型XSS
打开靶场
在标题处添加payload-提交
查看数据库-插入成功
刷新页面-有点慢-等待ing
04-存储型XSS代码分析
留言板
输入留言内容
<?php
$con=mysqli_connect("localhost","root","root","test");
if (mysqli_connect_errno())
{
echo "连接失败: " . mysqli_connect_error();
}
if (isset($_POST['title'])) {
$result1 = mysqli_query($con,"insert into xss(`title`, `content`) VALUES ('".$_POST['title']."','".$_POST['content']."')");
}
$result2 = mysqli_query($con,"select * from xss");
echo "标题 内容 ";
while($row = mysqli_fetch_array($result2))
{
echo "".$row['title'] . " " . $row['content']." ";
}
echo "
";
?>
像存数据一样存入数据库-没有任何过滤机制
刷新页面,数据就会从数据库中取出来显示在页面中,又因为我们在其中插入alert,所以页面会出现弹窗
05-DOM型XSS
打开靶场
插入payload
弹出成功
可以看到页面元素中已经出现img标签
06-DOM型源码分析
Test
这里会显示输入的内容
没有涉及到后端代码-一切都是前端的错
接收到id1,js函数直接替换id1的值然后浏览器会显示弹窗
0x04-XSS利用方式
01-获取Cookie
获取Cookie可以做未授权的非法操作
可以利用XSS平台接收Cookie
这里我们直接弹出Cookie
firefox插件Cookie Editor
可以编辑Cookie,获取到的Cookie填入,即可以管理员的身份登录
02-获取流量-广告传播
结合存储型XSS,只要用户访问页面就直接跳转到目的页面,用来骗取流量和广告传播
也可以在页面插入广告链接
03-挂马
使用MSF生成木马URL,结合存储型XSS挂到网站上面,用户点击,用户主机如果存在该木马对应的漏洞则会反弹shell
0x05-XSS修复建议
- 添加HttpOnly,JS就读取不到Cookie
- 对输入的数据进行过滤,不能相信用户的输入,如
> < " '
- 对输出到页面的数据进行编码,如html编码,js编码
0x06-XSS常用PAYLOAD
//非常牛的一句payload
jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//\x3csVg/\x3e
0x07-参考
XSS漏洞利用方式汇总
《Web安全攻防:渗透测试实战指南》
《Web安全深度剖析》