zoukankan      html  css  js  c++  java
  • 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>测试是否存在文件上传漏洞,成功。

  • 相关阅读:
    Poj 1742 Coins(多重背包)
    Poj 2350 Above Average(精度控制)
    求二进制数中1的个数
    Poj 1659 Distance on Chessboard(国际象棋的走子规则)
    Poj 2411 Mondriaan's Dream(压缩矩阵DP)
    Poj 2136 Vertical Histogram(打印垂直直方图)
    Poj 1401 Factorial(计算N!尾数0的个数——质因数分解)
    poj 2390 Bank Interest(计算本利和)
    Poj 2533 Longest Ordered Subsequence(LIS)
    Poj 1887 Testing the CATCHER(LIS)
  • 原文地址:https://www.cnblogs.com/zhengna/p/15180025.html
Copyright © 2011-2022 走看看