• 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>测试是否存在文件上传漏洞,成功。

  • 相关阅读:
    [USACO08JAN]牛大赛Cow Contest
    [USACO07NOV]牛栏Cow Hurdles
    [USACO09JAN]最好的地方Best Spot
    [USACO08OPEN]寻宝之路Clear And Present Danger
    [BZOJ 1146] [CTSC2008]网络管理Network(树状数组+主席树)
    bzoj4009: [HNOI2015]接水果(整体二分)
    【bzoj2141】排队 [国家集训队2011]排队(树套树)
    洛谷P4689 [Ynoi2016]这是我自己的发明(树上莫队+树链剖分)
    【bzoj3083】遥远的国度(树链剖分+线段树)
    CF311B Cats Transport(斜率优化)
  • 原文地址:https://www.cnblogs.com/zhengna/p/15180025.html
Copyright © 2020-2023  润新知