Bugku-POST (满足 what=flag 参数条件,无权限验证 / 请求校验)

张开发
2026/5/3 6:42:05 15 分钟阅读
Bugku-POST (满足 what=flag 参数条件,无权限验证 / 请求校验)
这题跟我前一篇文章类似我发现不止能用Burp修改还可以curl 命令、浏览器控制台得到flag我接下来一 一说POST 传参类题目是最基础也最能帮助理解 HTTP 请求原理的题型之一。我以靶机地址171.80.2.169:14035的 POST 传参题为例拆解解题思路、操作方法并分析这类题目背后的安全问题。分析一下代码页面显示的是代码片段实际服务器上的完整代码是这样的?php // 1. 接收POST请求中名为what的参数 $what $_POST[what]; // 2. 把接收到的参数值直接输出到页面 echo $what; // 3. 判断参数值是否等于字符串flag if ($what flag) { // 4. 条件满足输出真实的flag echo flag{40a*************d0236b}; //我用*替换了答案 } ?方法 1curl 命令最快无额外软件依赖curl -X POST -d whatflag http://171.80.2.169:14035curl用来发送网络请求的工具。-X POST告诉服务器「我发的是 POST 请求」。-d whatflag在 POST 请求的「请求体」里提交表单数据 — 键值对参数名what值为flaghttp://171.80.2.169:14035目标服务器 IP 端口服务器接收到后PHP 通过$_POST[what]读取到这个值满足$what flag的条件于是返回了藏在代码里的真实 flag。方法 2浏览器开发者工具零依赖1.保持当前页面打开按F12打开开发者工具切换到 **Console (控制台)** 标签2.粘贴以下代码并回车控制台会直接输出 flag小提醒控制台提示「粘贴被阻止」有浏览器会默认禁止粘贴可以先在控制台输入一个英文的再粘贴代码或者手动敲开头几个字符再粘贴。光标没在控制台输入区点击一下控制台最下方的输入行通常有个符号确保光标在闪烁再粘贴。方法3Burp Suite 抓包修改改请求方法把第一行的GET / HTTP/1.1改成POST / HTTP/1.1加 Content-Type 请求头在请求头末尾比如 User-Agent 下面新增一行Content-Type: application/x-www-form-urlencoded加请求体参数在所有请求头的最后一行下方一定要空一行后添加参数whatflag第四步发送修改后的请求并查看 flag这类入门题看似简单却能反映出实际开发中常见的安全漏洞缺乏参数校验仅校验参数值未对参数类型、长度、来源做任何限制易被恶意构造请求攻击。无权限控制核心信息flag仅通过一个简单参数即可获取未做身份认证、权限分级实际场景中可能导致敏感数据泄露。请求方法限制薄弱仅限制 POST 方法无额外防护攻击者可轻易构造符合要求的请求。两者本质都是基于 TCP 的 HTTP 请求方法所有差异都源于语义约定GET语义是「从服务器获取资源」无副作用、可重复执行POST语义是「向服务器提交 / 修改资源」有副作用、不可随意重复执行到这里就能发现GET/POST 的实际应用场景GET 适合做什么从服务器「获取数据」比如查商品列表、搜文章。无副作用不会修改服务器数据。例子浏览器访问网页、搜索框搜内容、分页。POST 适合做什么向服务器「提交 / 修改数据」比如登录、注册、提交表单。有副作用会改变服务器状态。例子登录时传账号密码、支付、提交评论敏感 / 需修改数据的场景。代码存在的安全漏洞本题考点这道题之所以能被轻松破解本质是代码存在 4 个严重的安全问题也是实际开发中最常见的低级错误无任何权限验证不校验请求来源、用户身份、登录状态任何人都可以访问并获取 flag硬编码判断条件把关键的验证值flag直接写死在代码里非常容易被猜到无参数过滤与校验直接接收并输出用户输入存在 XSS 漏洞仅限制请求方法只有的防护是 只接收 POST 参数但构造 POST 请求是网络安全的基础操作几乎没有防护效果。

更多文章