• java代码审计的点


    java代码审计的点

    组件的审计

    首先看pom.xml查看第三方组件和第三方组件的版本

    常用的第三方组件:

    第三方组件 漏洞类型 组件漏洞版本
    log4j2 远程代码执行 Apache log4j2 >= 2.0, <= 2.14.1
    Fastjson 反序列化远程代码执行 Fastjson <= 1.2.80
    Commons-Configuration 命令执行 2.4 ~ 2.7
    iBatis(MyBatis) SQL注入
    Struts2 命令执行
    Shiro 反序列化
    thymeleaf 模板注入
    FreeMarker 模板注入
    velocity 模板注入
    中间件 Tomcat,WebLogic,WebShere
    Jboss,Jetty,Glassfish
    ..... ...

    SQL注入的点

    ​ 对于sql注入来讲,只要是与数据库存在交互的地方,应用程序对用户的输入没有进行有效的过滤,都有可能存在SQL注入漏洞。

    DAO: 存在拼接的SQL语句

    String sql="select * from user where id="+id
    

    Hibernate框架

    session.createQuery("from Book where title like '%" + userInput + "%' and pu
    blished = true")
    

    Mybatis框架

    Select * from news where title like ‘%${title}%’
    Select * from news where id in (${id}),
    Select * from news where title =‘java’ order by ${time} asc
    

    XSS漏洞的点

    ​ 网站与后端交互的输入输出没有做好过滤,导致攻击者可以插入恶意js语句进行攻击。根据后端代码不同 ,大致可以分为反射型、存储型、DOM型。

    ​ 全局搜索用户的输入与输出,查找是否存在过滤。

    XXE漏洞

    ​ XXE就是XML外部实体注入。当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。

    ​ XML解析一般在导入配置、数据传输接口等场景会用到,xml解析器是否禁用外部实体。

    全局搜索如下函数:

    javax.xml.parsers.DocumentBuilder
    javax.xml.stream.XMLStreamReader
    org.jdom.input.SAXBuilder
    org.jdom2.input.SAXBuilder
    javax.xml.parsers.SAXParser
    org.dom4j.io.SAXReader 
    org.xml.sax.XMLReader
    javax.xml.transform.sax.SAXSource 
    javax.xml.transform.TransformerFactory 
    javax.xml.transform.sax.SAXTransformerFactory 
    javax.xml.validation.SchemaFactory
    javax.xml.bind.Unmarshaller
    javax.xml.xpath.XPathEx
    

    SSRF漏洞

    ​代码中提供了从其他服务器应用获取数据的功能但没有对目标地址做过滤与限制。

    只要是能够对外发起网络请求的地方,就有可能会出现SSRF漏洞。重点查找以下函数。

    HttpClient.execute
    HttpClient.executeMethod
    HttpURLConnection.connect
    HttpURLConnection.getInputStream
    URL.openStream
    
    • new URL():构造一个url对象
    • openConnection():创建一个实例URLConncetion.
    • getInputStream():获取URL的字节流

    CSRF篇

    ​ 跨站请求伪造是一种使已登录用户在不知情的情况下执行某种动作的攻击。因为攻击者看不到伪造请求的响应结果,所以CSRF攻击主要用来执行动作,而非窃取用户数据。当受害者是一个普通用户时,CSRF可以实现在其不知情的情况下转移用户资金、发送邮件等操作;但是如果受害者是一个具有管理员权限的用户时CSRF则可能威胁到整个Web系统的安全。

    ​ 一些增删改查方法,是否进行Referer头检验token检验 无法构造的随机数参数验证码密码

    搜索session["token"]

    XML漏洞

    ​ 一个用户,如果他被允许输入结构化的XML片段,则他可以在 XML 的数据域中注入 XML 标签来改写目标 XML 文档的结构与内容。

    全局搜索如下字符串

    • xml
    • StreamSource
    • XMLConstants
    • StringReader
    • xmlString

    在项目中搜索. Xsd 文件

    任意文件操作类漏洞

    ​ 常见的一些java文件操作类的漏洞:任意文件的读取、下载、删除、修改,这类漏洞的成因基本相同,都是因为程序没有对文件和目录的权限进行严格控制,或者说程序没有验证请求的资源文件是否合法导致的。

    全局搜索关键字或者方法

    • FileInputStream
    • getPath
    • getAbsolutePath

    命令执行漏洞

    服务端没有针对执行命令的函数进行过滤,导致攻击者可以提交恶意构造语句。java中常见如:Runtime.exec() Process ProcessBuilder.start

    Java中的命令执行离不开调用反射的机制,在实际的场景往往离不开反序列化的利用。

    服务端直接存在可执行函数(exec()等),且对传入的参数过滤不严格导致 RCE 漏洞
    服务端不直接存在可执行函数(exec()等),且对传入的参数过滤不严格导致 RCE 漏洞
    由表达式注入导致的RCE漏洞,常见的如:OGNL、SpEL、MVEL、EL、Fel、JST+EL等
    由java后端模板引擎注入导致的 RCE 漏洞,常见的如:Freemarker、Velocity、Thymeleaf等
    由java一些脚本语言引起的 RCE 漏洞,常见的如:Groovy、JavascriptEngine等
    由第三方开源组件引起的 RCE 漏洞,常见的如:Fastjson、Shiro、Xstream、Struts2、weblogic等
    

    审计的时候可以重点寻找:

    • Runtime.exec()
    • Process
    • ProcessBuilder.start()

    反序列化漏洞

    ​ 当输入的反序列化的数据可被用户控制,那么攻击者即可通过构造恶意输入,让反序列化产生非预期的对象,在此过程中执行构造的任意代码。

    ​ 反序列化操作常常出现在导入模版文件、网络通信、数据传输、日志格式化存储或者数据库存储等业务功能处,在代码审计时可重点关注一些反序列化操作函数并判断输入是否可控。

    • ObjectInputStream.readObject
    • ObjectInputStream.readUnshared
    • XMLDecoder.readObject
    • Yaml.load
    • XStream.fromXML
    • ObjectMapper.readValue
    • JSON.parseObject

    中间件漏洞

    **中间件**是提供系统软件和应用软件之间连接的软件,它将应用程序运行环境与操作系统隔离,从而实现应用程序开发者不必为更多系统问题忧虑,而直接关注该应用程序在解决问题上的能力 。容器就是中间件的一种。
    

    ​ 常见的JAVA Web中间件有:

    ​ Tomcat WebLogic WebShere Jboss Jetty Glasshfish

    ​ 直接打开pom.xml文件查看其 使用的中间件及其版本,然后到漏洞库里找漏洞即可。

    业务逻辑漏洞

    ​ 常见的业务逻辑漏洞主要是越权,分为平行越权和垂直越权。在javaweb的各个功能点中都可能存在越权漏洞。

    ​ 主要原因还是因为程序没有对当前用户的权限进行严格控制,或者是后台没有判断当前用户id。

    ​ 在每个request.getParameter("userid");之后查看是否有检验当前用户与要进行增删改查的用户。

    URL重定向漏洞

    ​ 接口从host头或者参数中取值,直接跳转到用户自定义的url,导致url重定向。

    ​ 查找sendRedirect,跳转的url是否用户可控,如果可控是否有进行过滤判断。

    ​ 特别是在删掉某个资源的斜杠,有可能就进行了302跳转,该处时常出现url重定向漏洞。

    其他漏洞

    ​ java中存在的安全问题还有很多,比如ldap注入、jndi注入、rmi反序列化等



    如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    【Python】【源码】SocketIO做一个网络聊天室软件-客户端源码
    vue实现input输入模糊查询(三种方式)
    FTX和Binance摩擦升级?一文梳理“吵架”背后始末
    Grafana+Prometheus+jmx实现微服务与多台服务器的jvm监控
    电动汽车充放电V2G模型MATLAB代码
    计算机毕业设计Java爱宠医院管理系统(源码+系统+mysql数据库+lw文档)
    Redis(一)入门:五大数据类型的学习和理解①
    剑指offer-数组总结
    有来团队后台项目-解析5
    java计算机毕业设计ssm+vue工商学院办公用品管理信息系统
  • 原文地址:https://www.cnblogs.com/mantou0/p/16645348.html