java代码审计2之OWASP TOP10

----------Owasp top 10 2017----------

注入

1. SQL注入

1.Jdbc拼接不当导致sql注入
Jdbc有两种方式执行SQL语句
A.Preparestatement:会对SQL语句进行预编译,
支持?对变量位进行占位,在预编译阶段填入相应的值构造出完整的SQL语句,这样可避免SQL注入。
但开发者有时为了便利,会直接拼接SQL语句,这样则无法阻止SQL注入。
B.Statement:每次执行时都需要编译,增大系统开销

2.框架使用不当造成sql注入
对jdbc进行更加抽象封装的持久化框架,如MyBatis和Hibernate
MyBatis框架将SQL语句编入配置文件中,避免SQL语句在java程序中大量出现,方便对SQL语句的修改和配置。

#和dollor符的区别:
Mybatis使用parameterType向SQL语句传参,在sql引用传参可以使用#{Parameter}和${Parameter}两种方式。
#{Parameter}方式会使用?占位进行预编译,因此不存在sql注入问题
${Parameter}采用拼接的方式构造sql

Hibernate是java持久化api(jpa)规范的一种实现方式,将java类映射到数据库表中,从java数据类型映射到sql数据类型。
采用hibernate查询语句(HQL)注入
Hibernate的对持久化类的对象进行操作而不是直接对数据库操作,所有hql查询语句由hibernate引擎进行解析,这意味着产生的错误可能来自数据库,也可能来自hibernate引擎。

在这里插入图片描述
在这里插入图片描述

2. 命令注入

Runtime类可提供调用系统命令的功能
Runtime.getRuntime().exec(xxx)
1.命令注入的局限
连接符
| 前面命令输出结果作为后面命令的输入内容

|| 前面命令失败猜执行后面命令
& 前面命令执行后执行后面命令
&& 前面命令执行成功后才执行后面命令
代码使用ping诊断网络,Url参数可控,用户输入www.baidu.com&ipconfig,拼接出系统命令ping www.baidu.com&ipconfig,该命令在命令行终端可成功执行,然而在java运行环境下,执行失败,因为www.baidu.com&ipconfig被当成完整的字符串而非两条命令。
Runtime.getRuntime().exec(“ping”+url)

2.无法进行命令注入的原因
要执行的命令通过字符串和数组的方式传入exec方法。
当传入的是字符串,会先经过StringTokenizer处理,针对空格及换行符等空白符进行处理,后续会分割出一个cmdarray数组保存分割后的命令参数,cmdarray的第一个元素为要执行的命令,经过处理的www.baidu.com&ipconfig成为ping命令的参数,因此连接符&并不生效,所以没法注入系统命令。

3. 代码注入

在这里插入图片描述

4. 表达式注入

1.EL表达式的基础
表达式语言,又称EL表达式,是一种jsp中内置的语言,作用于用户访问页面的上下文以及不同作用域的对象,取得对象属性值或执行简单的运算和判断操作。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
CVE-2011-2730 spring标签el表达式漏洞

5. 模板注入

FreeMarker模板注入

在这里插入图片描述

失效的身份认证

错误的使用应用程序的身份认证和会话管理功能,使攻击者能破译密码,密钥或者会话令牌,或者利用其他开发漏洞暂时或长久的冒充其他用户身份,导致攻击者可以执行受害者用户的任何操作。
Webgoat8 jwt token猜解实验
根据功能点定向审计

敏感信息泄露

1.系统敏感信息:业务系统本身的基础环境信息,例如系统信息,中间件版本,代码信息
2.应用敏感信息:个人敏感信息和非个人敏感信息
Turbomail 5.2.0敏感信息泄露
开发组件敏感信息泄露:自定义错误页面

XXE

开放人员配置其xml解析功能允许外部实体引用,攻击者可利用这一引发安全问题的配置方式,实施任意文件读取,内网端口探测,命令执行,拒绝服务攻击等

在这里插入图片描述
读取系统文件
OpenRASP测试用例
Dos攻击
Blind XXE:数据外带

在这里插入图片描述
Parsexml方法

失效的访问控制

横向越权
纵向越权

安全配置错误

不安全的默认配置,不完整的临时配置,开源云存储,错误的http标头配置以及包含敏感信息的详细错误信息所造成的。
可以发生在一个应用程序堆栈的任何层面,包括网络服务,平台,web服务器,应用服务器,数据库,框架,自定义的代码,预安装的虚拟机,容器,存储等。

Tomcat任意文件写入CVE-2017-12615
在这里插入图片描述
tomcat处理请求时,默认有两个servlet,一个是DefaultServlet,另一个是JspServlet,配置在tomcat的web.xml中。Jspservlet只处理.jsp和.jspx的请求,其他都是defaultservlet处理。

Tomcat ajp文件包含漏洞CVE-2020-1938
Ajp定向包协议,ajp自身存在一定缺陷,导致存在可控参数,通过可控参数可以导致文件包含漏洞。

Tomcat两个功能:1. 充当web服务器,对一切静态资源的请求做回应。2. 充当servlet容器。
常见web服务器:apache,nginx,iis
常见servlet容器:tomcat,weblogic,jboss

在这里插入图片描述
Spring boot远程命令执行

XSS

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

不安全的反序列化

在java原生的api中,序列号是ObjectOutputStream类的writeObject()方法实现,反序列化是ObjectInputStream类的readObject()方法实现。
能够被序列化的类必须实现Serializable接口或Externalizable接口。
Serializable接口是个标记接口,不包含任何方法,Externalizable接口是Serializable的子类,包含writeExternal()和readExternal()方法。

在这里插入图片描述
在这里插入图片描述
反序列化拓展:
1.Rmi
网络传输过程中,rmi中的对象是通过序列化方式进行编码传输的。
可以通过rmi服务做反序列化利用链的触发点
2.Jndi
Java命令和目录接口,是一组应用程序接口,目的是方便查找远程或本地对象。

Apache commons collections反序列化漏洞
Fastjson反序列化漏洞

使用含有已知漏洞的组件

Weblogic中组件的漏洞
富文本编辑器漏洞

不足的日志记录和监控

Crlf注入漏洞
未记录可审计性事件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值