[i=s] 本帖最后由 zeke 于 2025-9-17 14:08 编辑 [/i]
WEB渗透测试工程师系统班250303期
第38节课作业
1.代码执行的函数有哪些函数名
一、执行操作系统命令(Command Execution)
这些函数用于调用系统外壳(如 /bin/sh、cmd.exe)来执行命令。
system()
描述:执行外部命令并显示输出
特点:直接输出结果,返回最后一行或执行状态
exec()
描述:执行外部命令不输出结果,返回最后一行,可用第二个参特点:数获取完整输出数组
shell_exec()
描述:通过 shell 环境执行命令,并将完整的输出以字符串返回
特点:获取全部输出为字符串,但不直接打印
passthru()
描述:执行外部命令并显示原始输出
特点:直接输出原始结果(如二进制数据),无返回值
proc_open()
描述:执行一个命令,并且打开用来输入/输出的文件指针。
特点:功能最强大、最灵活,可以双向交互
popen()
描述:打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。
特点:单向(读或写),返回一个文件指针
反引号 ``
描述:执行 shell 命令并返回完整的输出字符串
特点:这是 shell_exec() 的运算符版本,功能相同
二、执行PHP代码(Code Evaluation / Injection)
这些函数用于动态执行字符串形式的PHP代码。
eval()
描述:把字符串作为PHP代码执行
特点:不是函数,是语言结构。最常用
assert()
描述:检查一个断言是否为 false
特点:传统用于调试,但也可执行代码(PHP < 8.0)
create_function()
描述:创建一个匿名函数
特点:内部使用 eval(),已弃用(PHP 7.2+)
preg_replace()
描述:执行一个正则表达式的搜索和替换
特点:当使用 /e 修饰符时,可执行代码(已弃用)
array_map()
描述:为数组的每个元素应用回调函数
特点:如果回调函数是system等,可执行命令
call_user_func()
描述:把第一个参数作为回调函数调用
特点:如果回调是system或assert,可执行代码
call_user_func_array()
描述:调用回调函数,并把一个数组参数作为回调函数的参数
特点:同上
array_filter()
描述:用回调函数过滤数组中的元素
特点:类似 array_map
三、其他相关危险函数
类别:文件包含
函数名:include(), include_once(),require(),
require_once()
描述:包含并运行指定文件。如果路径可控(如$_GET['page']),可造成本地文件包含(LFI)或远程文件包含(RFI),进而导致代码执行。
类别:序列化
函数名:unserialize()
描述:反序列化一个字符串。如果对象魔术方法__wakeup()或__destruct()包含危险操作,可导致反序列化漏洞。
类别:动态函数
函数名:$func()
描述:如果一个变量名作为函数调用,且变量可控(如$_GET['f']),可导致代码执行。
2.RCE是什么
RCE 是 远程代码执行(Remote Code Execution) 的缩写。
它是一种非常严重的网络安全漏洞,攻击者能够从远程位置(比如通过互联网)在目标服务器或应用程序上执行任意命令或代码
核心要点
①远程(Remote):攻击者不需要物理接触目标设备,通常通过网络(如互联网)发起攻击。
②代码执行(Code Execution):获得的权限级别非常高,可以执行:
操作系统命令:例如 ls、cat /etc/passwd、whoami、rm -rf /(极其危险的删除命令)。
编程语言代码:例如在服务器上执行PHP、Python、Java等代码。
3.实操课程内相关的RCE漏洞靶场0-21关(截图)
Level 0 : 代码执行&命令执行

Level 1 : 一句话木马和代码执行

Level 2 : PHP代码执行函数
首先通过发送 GET:/?action= 去随机的获取一个函数,然后通过往 /?action=submit 路由 POST:content=<函数参数> 的方法完成题目。
通过源码可以看到最后我们的提交会组合为一个函数去调用: eval(funciton(content))
对应函数输出flag的方式可以参考下面的表格:



Level 3 : 命令执行
同之前的 Level 1 : 一句话木马和代码执行 关卡一致,只不过这里的入口换成了system.
system() 函数会通过sh软连接执行你输入的系统命令。
POST:a=cat /flag

Level 4 : 命令执行 - SHELL 运算符



Level 5 - 8: 命令执行 - 终端中的功能/特殊字符






level 6 - 通配符


level 7 - 空格过滤
在 L5 的基础上,屏蔽了空格。



Level 8 : 命令执行 - 文件描述和重定向
在Linux中文件描述符(File Descriptor)是用于标识和访问打开文件或输入/输出设备的整数值,每个打开的文件或设备都会被分配一个唯一的文件描述符,Linux 中的文件描述符使用非负整数值来表示其中特定的文件描述符有以下含义
标准输入(stdin):文件描述符为0,通常关联着终端键盘输入
标准输出(stdout):文件描述符为1,通常关联着终端屏幕输出
标准错误(stderr):文件描述符为2,通常关联着终端屏幕输出
平时我们使用的"<"和">"其实就相当于是使用"0<"和"1>",下面是几种常见的使用示例:

Level 9 - 八进制




Level 10-21
第9关还能理解,后面这些有点太复杂,理解不了,见谅
一、笔记标题:WEB渗透系统班-RCE-代码执行漏洞(上)+RCE-代码执行漏洞(下)
二、文章内容:
1.课程内容概要
主要知识点1:RCE代码执行漏洞
主要知识点2:RCE漏洞靶场0-8
主要知识点3:RCE代码执行的防御
代码执行的防御分为三个方面 参数 , 函数 和 权限
①使用addslashes()函数将参数转译,或使用黑白名单校验
②禁用或减少使用执行代码的函数
③以及限制Web用户的权限
2.重点知识与细节
概念解析
概念1:RCE的含义
概念2:RCE的防御
关键步骤
步骤1:无
步骤2:
步骤3:
相关代码
3.实操练习和解析
如作业
4.个人总结
本节课最大的收获是:练习了RCE靶场的一些场景
仍然存在疑问的地方:靶场10-21关,作为拓展的作业,参考的资料比较深奥和模糊
需要课后深入学习的内容:基于Bash的无字母命令执行这样的高阶用法