常见漏洞的原理

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 bylines terminated by来写shell

?id=1 into outfile 'C:\info.php' FIELDS TERMINATED BY '<?php phpinfo();?>'%23

Mysql无法写shell原因

  1. 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无回显:使用外带数据通道提取数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值