CTFHUB web-rce-php://input

前言:记录学习过程,如有错误,望大家指正,共同进步。

1.看一下题目

substr() 函数返回字符串的一部分。

注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。

语法:substr(string,start,length)

string必需。规定要返回其中一部分的字符串。
start必需。规定在字符串的何处开始。
  • 正数 - 在字符串的指定位置开始
  • 负数 - 在从字符串结尾的指定位置开始
  • 0 - 在字符串中的第一个字符处开始
length可选。规定要返回的字符串长度。默认是直到字符串的结尾。
  • 正数 - 从 start 参数所在的位置返回
  • 负数 - 从字符串末端返回
php://input的用法:可以访原始数据的只读流,将post请求中的数据作为PHP代码执行         条件(php.ini): allow_url_fopen=off/on   、 allow_url_include=on    (只要include开启,就可以当做PHP代码执行)                                                                                                                     点击phpinfo可以查看

大概意思就是传的这个文件只有开头是php://才会被包含。

2.解题

3.补充 

想了解ls ls / cat,可以看我的一篇文章CTFGUB web-rce-eval执行

### CTFHub RCE 和命令注入题目解题思路分析 #### 一、RCE(远程代码执行) 通过 `php://input` 协议实现远程代码执行是一种常见的漏洞利用方式。该协议允许攻击者向 PHP 脚本发送原始 POST 数据流并将其作为输入处理[^1]。如果目标程序未对用户提交的数据进行严格校验,则可能被用来执行恶意脚本。 以下是基于此技术的一个典型场景及其解决方法: ```python <?php $code = file_get_contents('php://input'); eval($code); ?> ``` 上述代码片段展示了如何接收来自客户端的任意数据并通过 eval 函数直接运行它。这种做法极其危险,因为任何传入的内容都会被执行而无需额外验证。为了防止此类情况发生,在实际开发过程中应避免使用像 eval() 这样的高风险函数,并始终对外部输入做充分的安全检查。 针对这类问题的具体应对措施如下: - **输入验证**:确保只接受预期类型的参数值。 - **白名单机制**:限定可使用的操作指令集。 - **沙箱环境隔离**:即使存在潜在威胁也能限制其影响范围。 #### 二、命令注入 对于命令注入类别的挑战而言,主要关注点在于能否绕过服务器端防护从而调用系统级功能完成特定任务。例如下面提到的例子就是典型的实例之一[^3]: 访问链接形式为:`http://example.com/index.php?cmd=whoami`, 如果后台简单拼接字符串形成最终要执行的shell command, 那么就有可能遭受攻击. 假设原生查询语句结构如下所示: ```bash exec("ping {$user_input}"); ``` 当 `$user_input` 可控时,可以通过附加特殊字符来改变原有逻辑流向。比如尝试构造这样的请求路径: ``` http://challenge-xxx.sandbox.ctfhub.com:port/?ip=localhost%3Bcat /etc/passwd ``` 这里 `%3B` 是 URL 编码后的分号(`;`) ,用于分割两条独立的 shell commands 。因此除了显示 ping 结果之外还会打印出 passwd 文件内容。 另外值得注意的是某些情况下可能会遇到更严格的过滤规则阻止常规手段奏效。此时可以考虑采用其他替代方案如替换易受阻断的关键字或者调整表达样式等等。举个例子来说如果我们知道某个文件名但是无法正常读取因为它已经被屏蔽掉了那么也许能够借助 base64 加密后再传递过去最后再由服务端自行转换回来获取想要的信息[^2]. 总结起来,面对不同形态下的防御策略我们需要灵活运用各种技巧找到突破口解决问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值