把一个对象变成可以传输的字符串,目的就是为了方便传输。
把被序列化的字符串还原为对象
java
将java对象转化为字节序列的过程,反序列化的过程就是
1.创建一个对象输出流
2.通过对象输出流的readobject()方法来读取对象
序列化和反序列化本身都没有漏洞,但是如果反序列化的内容用户可以控制,且后台使用了php中的魔法函数,就会导致安全问题
产生条件
1.参数给变量未经过滤,反序列化的内容是可控的
2.PHP使用了魔法函数
常见的魔法函数
_construct() 一个对象创建时被调用
_destruct() 一个对象销毁时被调用
_tostring() 一个对象被当作一个字符串使用时
_sleep() 对象被序列化之前运行
_wakeup 在序列化之后立即被调用
O:1:"S":1:{s:4:"test";s:29:"";}
dir /s c:\*.jsp 查找路径
C:\jboss\server\default\tmp\vfs\automount21f55fc396b809ae\jobfan.war-968075a27bcc5d18\test.jsp
上传一句话木马jsp 的xxx.jsp
可以在浏览器访问一下
菜刀连接
http://10.0.0.139:7001/console/login/LoginForm.jsp 先打开
扫描漏洞
复现漏洞
- 常见的反序列化漏洞
Java 反序列化漏洞操作(CVE-2018-2628)、
任意文件上传漏洞操作(CVE-2018-2894)、XML Decoder 反序列化漏洞操作(CVE-2017-10271)、
SSRF 漏洞(需要安装Weblogic时选择UDDI组件)、
反序列化漏洞(CVE-2019-2725、未授权访问)
判断
通过构造错误的post请求,可以查看在返回包中是否含有fastjion这个字符串来判断
在安全设备上有这一行代码 prefix":"rmi ://ip:port/exploit"
原理
是阿里巴巴开发的一款json字符串和java对象进行序列化和反序列化的开源json解析库。fastion提供了autotype功能,在请求的过程中,我们可以在请求包中通过@type的值,来反序列化为指定的类型,而fastjion 在反序列化过程中会设置和获取类中的属性,如果类中存在恶意方法,就会导致代码执行等这类的问题。
没有回显怎么办
1.通过dnslog进行数据库外带,如果连不上网无法验证
2.直接将命令执行结果写入到静态资源文件里,如HTML、js等,通过访问http访问就可以直接看到结果
3.直接将命令执行结果回显请求POC的http响应中
1.安全配置好php相关参数:通过Php.ini配置文件里面有个disable_functions = 配置,这个禁止某些php函数,服务器便是用这个来禁止php的执行命令函数
(1)执行系统命令: assert,system,passthru,exec,pcntl_exec,shell_exec,popen,proc_open,``(反单引号)
(2)代码执行与加密: eval, assert, call_user_func,base64_decode, gzinflate, gzuncompress, gzdecode, str_rot13
2.升级中间件
3.严格控制传入变量,严谨使用魔法函数