代码审计--10--源代码审计思路(上)

版权声明:本文为博主原创文章,转载本站文章请注明作者和出处,请勿用于任何商业用途。 https://blog.csdn.net/wutianxu123/article/details/82946120

===============================================

一个Java应用的代码审计工作应该从哪里入手,对于新手来说也许会不知所措,如果在不了解整个应用系统情况下(包括业务功能、框架使用等)盲目的直接去阅读项目中源代码,往往会迷失在代码中导致漏洞误报漏报情况,审计效率同样不高。所以在审计之前要了解应用系统主要业务逻辑,其次是了解项目的结构和项目当中的类依赖。再次才是去根据业务模块去读对应的代码,从功能去关联业务代码往往比逮着段代码就看效率高很多。

目前企业中进行代码审计工作的系统有以下几类:网银系统、门户类网站(包括后台管理系统)、购物类网站等,针对这几类系统身份权限校验是都需要审计的机制,网银系统着重审计转账交易功能,门户类网站主要是后台管理系统。其次弄清楚当前源代码项目所采用的框架结构,比如SSH(Struts+Spring+Hibernate)、Spring MVC等,这里可以通过查看lib目录下所使用的第三方Jar包来判断使用的框架类型,struts2框架需要struts2-core-xxxx.jar提供核心包,spring框架需要spring-core-xxxx.jar提供核心包。根据项目中所引入的jar包来判断使用的框架类型是一种比较快捷的方式。如果想全面的了解此项目中具体的框架使用、过滤器、Servlet分布等情况,可以通过web.xml配置文件来查看,最后跟踪数据流来定位缺陷代码。

1 逆向回溯审计

逆向回溯审计针对于特定漏洞比较有效,因为大多数安全问题是由于函数使用不当造成的,比如命令注入通常会使用Runtime.getRuntime().exec(command)执行外部的程序或者命令,另外比如SQL注入可以直接搜索查看SQL语句是否使用字符串动态拼接。

“逆向”挖掘SQL注入

SQL注入理论上是最容易找的,因为SQL语句的特殊性只要利用Eclipse快捷键Ctrl+H 搜索select、from 等关键字就能够快速找到项目下所有的SQL语句,然后根据搜索结果基本上都能够确定是否存在SQL注入。凡是SQL语句中出现了拼SQL(如select * from admin where id=’”+id+”’)那么基本上80%可以确定是SQL注入。但也有特例,比如拼凑的SQL参数并不受我们控制,无法在前台通过提交SQL注入语句的方式去控制最终的查询SQL。而采用预编译?占位方式的一般不存在注入。

首先在Eclipse中导入项目,选中需要搜索的项目快捷键Ctrl+H,所有SQL语句的关键字将项目中的SQL语句列出来,如下图:

在这里插入图片描述

搜索jeecms项目当中的SQL语句,如下图:

在这里插入图片描述

Tips:ORM框架特殊性

1、Hibernate HQL:

需要注意的是Hibernate的HQL是对对象进行操作,所以它的SQL可能是:

String hql = "from Emp";
Query q = session.createQuery(hql);

也可以
String hql = "select count(*) from Emp";
Query q = session.createQuery(hql);

甚至是
String hql = "select new Emp(e.empno,e.ename) from Emp e ";
Query q = session.createQuery(hql);

在这里插入图片描述

2、Mybatis(Ibatis3.0后版本叫Mybatis):

Ibatis、Mybatis的SQL语句可以基于注解的方式写在类方法上面,更多的是以xml的方式写到xml文件。

在这里插入图片描述

在当前项目下搜索SQL语句关键字,查找疑似SQL注入的调用:

在这里插入图片描述

进入搜索结果的具体逻辑代码:

在这里插入图片描述

最外层的Contrller:

在这里插入图片描述

“逆向”找到控制层URL以后构建的SQL注入请求:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wutianxu123/article/details/82946120