一篇文章带你搞定php命令执行的大部分过滤问题

本文介绍了在代码审计中遇到强烈过滤时,使用Linux终端的少众命令如rev、vi/vim和nl,以及针对flag的特殊字符过滤方法,包括倒序、空格、引号和通配符。旨在帮助CTF选手提高应对复杂过滤的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里以这道题目为例,在做代码审计的时候,如果对面过滤的很凶残,那就只能用一些比较少众的进行过滤,现在来带大家盘点一下。

(1)linux终端读取节点内容或者文件内容的替换命令(下面这几个比较少众,很少被过)

1.rev((刷了这么多题,就很少见过哪道题把这个过滤掉的,除非出题人不当人)

这里注意一下查看到的flag是倒转过来的,用这个工具就可以直接得到flag文本字符串倒序在线工具(ESJSON在线工具)

2.vi

3.vim

4.nl

(2)Linux空格的过滤

这里由于本身就那几个命令,就索性全丢出来了

1.${IFS}

2.<

3.<>

4.%09  ##(Tab)

5.  %20 ##(space)

(3)对flag的过滤(这里也就几个,索性就全丢出来了)

1.‘’    (例如fl‘’ag)

2.“”     (例如fl""ag)

3.?       (例如fl??)

4.*          (例如fl*)

                                                    愿诸君CTF前程似锦,有缘江湖相见

                                                      愿诸君CTF前程似锦,有缘江湖相见 

### 命令注入概述 命令注入是一种常见的Web应用程序安全漏洞,攻击者通过该漏洞可以向服务器发送恶意操作系统命令并执行它们。这种类型的攻击通常发生在当程序未能正确过滤用户输入的情况下。 #### 概念 命令注入是指攻击者利用未经过滤的用户输入,在目标系统的命令解释器中执行任意操作的一种技术[^1]。如果应用程序在调用外部命令时直接拼接未经验证的用户数据,则可能导致此漏洞的发生。 #### 工作原理 工作原理主要涉及以下几个方面: - 应用程序接收来自用户的输入,并将其作为参数传递给系统命令。 - 如果这些输入没有被适当清理或转义,那么攻击者就可以插入特殊字符或者额外指令来改变原始意图之外的行为。 - 攻击成功后,可能允许访问敏感文件、修改数据库记录甚至完全控制受害者的机器[^2]。 例如下面这段存在缺陷PHP脚本展示了如何容易受到此类攻击的影响: ```php <?php $cmd = $_GET['command']; shell_exec($cmd); ?> ``` 在这个例子当中,`shell_exec()`函数被执行之前没有任何形式的数据净化处理;因此任何传入到URL查询字符串中的值都会成为实际运行于服务器上的Shell命令的一部分。 #### 防护措施 为了防止命令注入攻击,开发者应该采取以下策略之一或多组合起来使用: 1. **白名单验证**: 只接受已知合法选项列表内的输入项,拒绝其他一切请求. 2. **数据清洗与编码转换** : 对所有不可信源处获取来的资料均需做必要的HTML实体化/URL百分比编码等预处理工序后再参与后续逻辑运算过程之中. 3. **最小权限原则** (Least Privilege): 确保服务进程以最低所需特权级别运作;即使发生突破情况也能最大限度减少损害范围. 4. 使用专门库或框架所提供的API代替手动构建命令串的方式完成相同功能需求的同时规避风险较高的动态语句构造环节.[^3] 5. 定期审查代码质量以及依赖组件的安全状态更新频率保持最新版本可有效降低潜在威胁暴露几率. ```python import subprocess def run_command(safe_input): safe_args = ['echo', safe_input] result = subprocess.run(safe_args, capture_output=True, text=True) return result.stdout.strip() ``` 上述Python示例演示了一种更安全的方法去调用子进程而不必担心遭受命令注入的危害——即采用数组形式明确指定各独立部分而非简单字符串连接方式形成最终要提交至终端解析的内容结构体。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值