Shiro反序列化:
Shiro550反序列化漏洞:
是shiro提供了一个RememberMe的一个功能,用户登录成功后会生成经过加密并编码的cookie,保存在浏览器中方便用户的日常使用,而服务器对cookie的处理流程就是先获取浏览器上保存的cookie,然后将其bs64解码,再进行AES解密,再将其反序列化进行校验,而漏洞就是出现在这里,
我们都知道AES它是一个硬编码,他是有默认密钥的,如果程序员没有去修改或者过于简单,那我们就可以进行cookie重构,先构造我们的恶意代码,然后将恶意代码进行序列化,然后AES加密(密钥我们可以爆破或者是默认),再进行bs64编码,形成我们新的cookie,而服务器在处理时就会按照刚才的处理流程,就会在服务端触发我们构造的恶意代码。
shiro721反序列化漏洞:
不需要key,利用Padding Oracle Attack构造出RememberMe字段后段的值结合合法的RememberMe cookie即可完成攻击。key看似随机实则被架空但是因为加密算法的原因需要一个已经登录/合法的用户cookie(登陆后的RememberMe值)
Fastjson漏洞原理
1.2.24之前对@type字段写的类没有进行过滤,所以可以传递任何类。
1.2.25之后关闭了autotype,加入了chacktype(过滤了传递的几个类)
但是在加载的时候会去掉@type中的L和;,所以在恶意类中添加L和;就行。
1.2.47 利用fastjson的全局缓存攻击类加载的时候如果autotype没开启,就会先在缓存中获取类,如果有则直接返回。
1.2.68的版本中,通过新的Gadgets绕过autoType开关,在autoType关闭的情况下仍然可以绕过黑白名单防御机制,通过反序列化漏洞在服务器上执行任意代码
为什么访问的时候有#?因为加上后才代表用rmi访问Java的类
在请求包里面中发送恶意的json格式payload,漏洞在处理json对象的时候,对@type字段进行过滤不全面,从而导致攻击者可以传入恶意的类,再通过这个类去完成JNDI注入
利用链:
不出网打法:#目前公开已知的poc有两个但都需要一定条件:
org.apache.tomcat.dbcp.dbcp2.BasicDataSource
com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl
或者
#第一种利用方式需要一个特定的触发条件:解析JSON的时候需要使用Feature才能触发,参考如下代码:JSONObject.parseObject(sb.toString(), new Feature[] {Feature.SupportNonPublicField});
#第二种利用方式: 则需要应用部署在Tomcat应用环境中,因为Tomcat应用环境自带tomcat-dbcp.jar 对于SpringBoot这种自带Tomcat可以直接以单个jar文件部署的需要在maven中配置tomcat- dbcp。
而且对于不同的Tomcat版本使用的poc也不同:Tomcat 8.0以后使用org.apache.tomcat.dbcp.dbcp2.BasicDataSource;Tomcat8.0以下使用 org.apache.tomcat.dbcp.dbcp.BasicDataSource
实战中在打Fastjson的时候,基本上都是使用JNDI注入的方式去打,也就是
JdbcRowSetImpl 链(com.sun.rowset.JdbcRowSetImpl,这个是sun官方提供的类)
Log4j2漏洞原理
Log4j2 是个日志组件,中提供了Lookups 机制,用于添加一些特殊值到日志中,在 Lookups 机制中,由于 JNDI api功能没有对名称解析做限制,而某些协议是不安全的,可以通过LADP(访问和管理目录服务的协议)或RMI(java远程调用机制)协议实现远程代码执行,从而导致RCE漏洞。
sqlmap --os-shell 的使用需要以下条件。
①知道网站的物理路径。②网站路径具有写入的权限。③sqlmap能够跑出数据库。
对于 Mysql 数据库来说,--os-shell的本质就是用 into outfile 函数在数据库路径上传了两个php文件,其中的一个tmpbjpgc.php可以让我们通过传递get参数执行命令,而另外一个tmpunszu.php可以让我们可以上传文件。
说到写入文件,就要说一下上传文件的两个前提条件,首先我们要知道网站的绝对路径(我们的文件写入到哪里),然后要有导入导出的权限。
导入导出的权限在 Mysql 数据库中是由 secure_file_priv 参数来控制的,当这个参数后面为 null 时,表示不允许导入导出,如果为具体文件夹时,表示仅允许在这个文件夹下导入导出,如果后面没有值(为空)时,表示可以在任何文件夹下导入导出。
SSRF漏洞原理:
服务端提供了能够从其他服务器应用获取数据的功能,比如从指定的URL地址获取网页内容,加载指定地址的图片、数据、下载等等。
开发人员对用户输入过于信任,没有进行响应的限制及严格的请求地址校验,所以使得从其他应用获取数据的功能出现了漏洞。
file:/// 从文件系统中获取文件内容,如,file:///etc/passwd
dict:// 字典服务器协议,访问字典资源,如,dict:///ip:6739/info:常常利用这个协议去探测端口
sftp:// SSH文件传输协议或安全文件传输协议
ldap:// 轻量级目录访问协议
tftp:// 简单文件传输协议
gopher:// 分布式文档传递服务,可使用gopherus工具生成各种payload *可以通过gopher协议将GET请求伪装为POST请求,可用于反弹shell,可以将多个数据包整合发送
gopher的协议格式如下:
gopher://<host>:<port>/<gopher-path>_TCP/IP数据流
gopher://127.0.0.1:8080/1/docs
<host>就是IP
<port>默认为70
%0d代表回车符(CR),%0a代表换行符(LF)了解过CRLF漏洞师傅应该会很清楚。发起多条请求每条要用回车换行(%0d%0a)去隔开,如果多个参数,参数之间的&也需要进行URL编码为%26%0d%0a在请求的结尾也需要。
http/s:// 可用于存活探测
Mysql数据库站点无法链接
1.mysql数据库链接不对外开发,只允许本地链接
2.站库分离
3.更改了端口
Mysql写shell有几种
outfile和dumpfile写shell
1创建表导出
2一句话导出
3日志写shell( outfile被禁止,或者写入文件被拦截,没写权限 ,有root权限)慢查询写shell
SQL 语句写shell的方法:
UNION SELECT后接一句话木马再接 into outfile/ into dumpfile 加木马绝对路径
?id=1 UNION ALL SELECT 1,'<?php phpinfo();?>',3 into outfile 'C:\info.php'%23
?id=1 UNION ALL SELECT 1,'<?php phpinfo();?>',3 into dumpfile 'C:\info.php'%23
或者
使用fields terminated by与lines terminated by来写shell
?id=1 into outfile 'C:\info.php' FIELDS TERMINATED BY '<?php phpinfo();?>'%23
Mysql无法写shell原因
- 1.My.ini配置secure-file-priv为空或 / (为NULL不可以)则可以导出导入无限制(select @@secure_file_priv即可查询参数的内容)在mysql 5.6.34版本以后 secure_file_priv 的值默认为NULL。并且无法用SQL语句对其进行修改。
2.绝对路径不正确
3.权限不足/没有读写权限
4.站库分离
5.GPC未关闭
Sql server 找绝对路径:
1.报错信息2.配置文件3.cmd命令搜索文件4.找旁站路径5.xp_dirtree6.xp_subdirs7.修改404页面8.爆破路径
Csrf 防御
主流方案:令牌同步模式 csrftoken(令牌) 将携带的csrf令牌和服务器中随机生成的做对比,若不相等则拒绝掉该请求。
1.验证HTTP Referer字段 添加Token字段并验证 添加自定义字段并验证
2.推荐人请求头
2.同源检测
Xxe原理(xml外部实体注入)/防御
XXE特征:.ashx后缀的;响应体是xml
XML外部实体注入,在应用程序解析XML输入时,当允许引用外部实体时,可构造恶意内容,产生漏洞。
服务端解析用户提交的XML文件时,未对XML文件引用的外部实体(含外部一般实体和外部参数实体)做合适的处理,并且实体的URL支持 file:// 和 ftp:// 等协议,导致可加载恶意外部文件 和 代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站等危害
Xxe防御
XML解析库在调用时严格禁止对外部实体的解析
XXE无回显:使用外带数据通道提取数据