55:代码审计-JAVA项目注入上传搜索或插件挖掘

思维导图

HttpServletRequest 常用方法

//方法				//说明
getParameter(String name)	//获得请求中的参数,该参数是由name指定的
getParameterValues(String name)	//返回请求中的参数值,该参数是由name指定的
getRealPath(String path)	//获取web资源目录
getAttribute(String name)	//返回name指定的属性值
getAttributeNames()		//返回当前请求的所有属性的名字集合
getCookies()			//返回客户端发送的cookie
getSession()			//获取session会话对象,没有则创建
getInputStream()		//获取请求主体的输入流
getReader()			//获取请求主体的数据流
getMethod()			//获取发送请求的方式,如GET、POST
getParameterNames()		//获取请求中所有参数的名称
getRemoteAddr()			//获取客户端IP地址
getRemoteHost()			//获取客户端名称
getServletPath()		//获取请求的文件的路径

HttpServletResponse 常用方法

//方法				      //说明
getWriter()			      //获取响应打印流对象
getOutputStream()	           //获取响应流对象
addCookie(Cookie cookie)		//将指定的cookiejia
addHeader(String name,String value)	//将指定的名字和值加入到响应的头信息中
sendError(int sc,String msg)		//使用指定状态码发送一个错误到客户端
sendRedirect(String location)		//发送一个临时的响应到客户端
setDateHeader(String name,long date)	//将给出的名字和日期设置响应的头部
setHeader(String name,String value)	//将给出的名字和值设置响应的头部
setStatus(int sc)			//给当前响应设置状态码
setContentType(String ContentType)	//设置响应的MIME类型

必备知识点:

简要理解JavaWeb项目组成

简要理解JavaWeb执行过程

com:

公司项目,copyright由项目发起的公司所有
包名为com.公司名.项目名.模块名...
持久层:dao、persist、mapper
实体类:entity、model、bean、javebean、pojo
业务逻辑:service、biz
控制器:controller、servlet、action、web
过滤器:filter
异常:exception
监听器:listener
在不同的框架下一般包的命名规则不同,但大概如上,不同功能的Java文件放在不同的包中,根据Java文件的功能统一安放及命名。

审计思路:

  • 根据业务功能审计
    • 优点:明确程序的架构以及业务逻辑,明确数据流向,可以从获取参数-->表现层-->业务层-->持久层,通读源码
    • 缺点:耗费时间
  • 根据敏感函数审计
    • 优点:可以快速高效的挖出想要的漏洞,判断敏感函数上下文,追踪参数源头
    • 缺点:覆盖不了逻辑漏洞,不了解程序的基本框架。

审计开始前:

    • 1.确定框架:通过以下3种方式确定框架:
      • <1>看web.xml
      • <2>看导入的jar包或pom.xml
      • <3>看配置文件
        • Struts2 配置文件:struts.xml
        • Spring 配置文件:applicationContext.xml
        • Spring MVC 配置文件:spring-mvc.xml
        • Hibernate 配置文件:Hibernate.cfg.xml
        • Mybatis 配置文件:mybatis-config.xml
    • 2查询是否存在过滤
    • 通过查看web.xml文件,确定是否配置相关过滤器

案例1:简单Demo段申sql注入及预编译

<1>首先使用IntelliJ IDEA工具打开源代码,审计。

<2>发现拼接的SQL语句。

<3>payload测试SQL注入,成功。

 

<4>监控数据库,发现了执行了注入的SQL语句。

<5>修复建议:使用预编译机制。

<6>重新测试,注入失败。

案例2:IDEA审计插件FindBugs安装使用(不推荐)

参考:idea安装findbugs及Find-sec-bugs安全组件:https://www.cnblogs.com/kingsonfu/p/12419817.html

案例3:Foritify_SCA代码自动审计神器使用(推荐)

Foritify:静态代码审计利器,商用,审计规则多,吃内存CPU

案例4:Ofcms后台SQL注入-全局搜索关键字

ofcms:Java 开发的 CMS 系统

<1>使用IntelliJ IDEA载入源代码,审计。

<2>全局搜索关键字update,找到create()方法,存在SQL语句。

<3>找到对应功能点,测试。

<4>注入成功。但是这个漏洞是一个后台漏洞,比较鸡肋。

案例5:Ofcms后台任意文件上传-功能点测试

<1>根据业务功能审计,发现有个文件上传功能。

<2>抓包,通过接口找到对应文件代码,发现上传文件时,未过滤。

<3>测试是否存在文件上传漏洞,成功。

 

posted @ 2021-08-28 15:29  zhengna  阅读(359)  评论(0编辑  收藏  举报