ctf命令执行小结

本文总结了CTF中常见的命令执行相关函数和技术,包括eval()、assert()、call_user_func()、create_function()、preg_replace()、array_map()等函数的用法,以及exec、passthru()、shell_exec()等系统函数的命令执行方式。文章还讨论了如何通过符号执行、空格代替、DNSlog等方法实现无回显的命令执行。

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

1.相关函数

eval()

eval函数能够将字符串当作命令去执行

需要被执行的字符串

代码不能包含打开/关闭 PHP tags。比如, ‘echo “Hi!”;’ 不能这样传入: ‘<?php echo "Hi!"; ?>’。但仍然可以用合适的 PHP tag 来离开、重新进入 PHP 模式。比如 ‘echo “In PHP mode!”; ?>In HTML mode!<?php echo “Back in PHP mode!”;’。

除此之外,传入的必须是有效的 PHP 代码。所有的语句必须以分号结尾。比如 ‘echo “Hi!”’ 会导致一个 parse error,而 ‘echo “Hi!”;’ 则会正常运行。

return 语句会立即中止当前字符串的执行。

代码执行的作用域是调用 eval() 处的作用域。因此,eval() 里任何的变量定义、修改,都会在函数结束后被保留。

返回值
eval() 返回 NULL,除非在执行的代码中 return 了一个值,函数返回传递给 return 的值。 PHP 7 开始,执行的代码里如果有一个 parse error,eval() 会抛出 ParseError 异常。在 PHP 7 之前,如果在执行的代码中有 parse error,eval() 返回 FALSE,之后的代码将正常执行。无法使用 set_error_handler() 捕获 eval() 中的解析错误。

例如

<?php
highlight_file(__FILE__);
$b='phpinfo()';
$a='phpinfo();';
eval($b);
eval($a);
//eval用来将字符串当作命令执行
?>

在php7的版本以下,eval($b)出现parse error ,但后面的代码依然执行.如果把版本切换至php7就会直接出错,后面代码不会执行

assert()

bool assert( mixed $assertion[, string $description] )
如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。

测试:

<?php
error_reporting(E_ALL);
highlight_file(__FILE__);
#$a='echo 12345;';
#assert($a);
#assert('echo "456";');
$a=(array)base64_decode($_POST['a']);
array_map(assert,$a);
echo '123';
?>

构造post a=ZXZhbCgncGhwaW5mbygpOycp 执行成功

call_user_func(

call_user_func( callable $callback[, mixed $parameter[, mixed $…]] )

call_user_func — 把第一个参数作

### CTF 比赛中的命令执行绕过技巧 在CTF竞赛中,面对命令执行漏洞时,攻击者常常遇到各种过滤机制。为了成功实施渗透测试并完成挑战,掌握不同的绕过技术至关重要。 #### 使用截断符号 当题目提供了一个可控制的部分作为参数传递给某个系统调用时,可以通过尝试不同类型的截断字符来分割原有逻辑与自定义指令之间的联系[^2]。例如,在允许用户提交IP地址供`ping`使用的场景下: ```bash 127.0.0.1; ls / ``` 这里的分号(`;`)即为一种简单的命令链结束符,使得后续任意合法shell语句得以被执行。 #### 利用环境变量和间接引用 某些情况下直接输入特殊字符可能被严格限制,此时可以考虑借助环境变量或通过其他方式引入恶意负载。比如PHP环境中存在`${}`语法支持动态解析字符串表达式,这便成为了一种潜在的突破口[^4]: ```php ${system('whoami')} ``` 上述代码片段展示了如何利用 `${}` 结构嵌入 `system()` 函数调用来获取当前用户的名称信息。 #### 替代字符集编码 如果目标应用对特定字符进行了黑名单处理,则可通过URL编码、十六进制转义序列等方式改变敏感字符的表现形式而不影响其实际意义。例如将反引号替换为其对应的HTML实体表示法(`)以规避检测: ```html `/bin/cat flag.txt` ``` 此操作最终会被解释器还原成原始形态从而触发预期行为——读取文件内容。 #### 组合多阶段载荷 考虑到单一手段未必能突破所有防护措施,组合运用前述各项策略往往能够提高成功率。先发送看似无害的数据包建立初步交互通道,再逐步注入更复杂的有效载荷直至达成目的。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值