java 漏洞挖掘_挖JAVA_web网站漏洞,代码审计入门

底层漏洞:

1. 查看该系统所用框架:

Struts2的相关安全:

(1)  低版本的struts2,低版本的Struts2存在很多已知的版本漏洞。一经使用,很容易造成比较大的危害。

(2)  开启 Struts2的动态调用方法,现在发现的如s2-033 ,s2-032等漏洞,都是由于系统开启了动态调用方法,导致远程代码执行。

(3)  在jsp页面中使用Struts2的ognl表达式传输数据。

(4)  开启Struts2的devMode,易造成远程代码执行

(5)  存在Struts2本身自带的ognl页面

(6)  使用Struts2自带的redirect等方法

Spring的相关安全:

Spring在jsp中使用el表达式时,注意spring的boot框架版本,因为有些低版本会存在远程命令执行。

mybatis xml相关安全:

在SQL语句中,使用$进行传参,导致SQL注入;

其他安全:

在使用java自带的环境时,如weblogic或者jboss,请注意查看版本号,因为此类环境低版本,大部分包含java反序列化漏洞,导致远程代码执行;

glassfish环境某些版本存在任意文件读取;

2. 查找SQL注入:

DAO:是否存在拼接的SQL语句

如:String sql = 'select * from user where id='+id;

XML中:是否使用$,因为在xml中,#value#此时value是以参数的形式插入进去,$value$此时value是以字符串的形式直接插入到xml中,会导致sql注入;

select * from tb_card_bin where card_length = #cardLength# and instr(bin_no, '$cardNoFirstNum$') = 1

3.第三方控件漏洞

如:fckeditor,wordpress等等。

查找完底层漏洞后,查看系统中相应的action或者do方法。如果用的是ssh框架的话,这些方法的相关配置保存在Struts2的配置文件中。如果用的是springmvc框架的话,这些方法可能保存在applicationContext.xml(spring的配置文件),或者采用的是扫描注入的话,建议全局搜索RequestMapping等注入路径的关键字来确定action方法所在。以下,以action方法为例:

4. 文件上传漏洞

文件上传的action有一个比较显著的特征:Spring MVC默认支持两种文件上传操作方式。一种是使用MultipartHttpServletRequest或者MultipartFile作为方法参数,第二种是使用javax.servlet.http.Part作为方法参数。

代码举例:

@RequestMapping(value = '/accounting/voucher/importVoucher.htm', method = RequestMethod.POST)

@SuppressWarnings('unchecked')

public String importBankGlide(@RequestParam('voucherFile')MultipartFile voucherFile, @RequestParam('returnFile') MultipartFile returnFile,ServletRequest request, ModelMap model) {

if (voucherFile == null || voucherFile.getSize() < 1)="">

String errorMessage = '导入文件为空';

model.put(ERROR_MESSAGE, errorMessage);

return '/accounting/voucher/importVoucher';

}

String extFile = '';

if (returnFile.getSize() > 0) {//并未对文件进行检查,直接上传

File file = new File(model.get('path'));

} else {

model.put(ERROR_MESSAGE, '上传附件失败,请重新发起:' + result.getResultMessage());

return '/accounting/voucher/importVoucher';

}

}

文件上传存在的主要原因,一,未对文件名称进行检测直接上传;二,未对传入的文件内容进行检测直接上传;

5.  远程命令执行

在调用本机的shell,去运行特殊的命令时,没有对传入的参数进行检查,导致命令执行;

Runtime.getRuntime().exec此方法用来执行shell

com.opensymphony.xwork2.ognl.OgnlValueStack的protected Object findValue(String expr, String field, String errorMsg)该方法是用来执行ognl表达式。

6.  远程代码执行

第一,通过使用脚本引擎中的eval去执行些特殊的东西,这种地方要着重去看,是否会有用户输入的变量传入。

第二,通过反射来执行代码:Class c=Class.forName('com.wqx.test4.Test');

//创建这个类的实例,前提是存在这个类,并且存在此种方法

Object obj=c.newInstance();

//通过class来取得这个方法对象 并且声明 这个类的参数类型

java.lang.reflect.Method method=c.getMethod('sayhello', Class.forName('java.lang.String'));

//invoke 来执行方法对象 记得参数类型要跟这里的参数匹配

method.invoke(obj, 'wqx');

7. 越权下载

首先,fileName是用户可以控制的,如下:

String fileName =  '../../../../1.xml';//此处为用户输入内容

File file = new File('/Users/dly/Desktop/test2/src/main/webapp/upload/' + fileName);

FileInputStream fileInputStream = new FileInputStream(file);

BufferedReader buff= new BufferedReader(new InputStreamReader(fileInputStream));

System.out.println(buff.readLine());此时,1.xml存在,会导致越权下载。

8. 敏感信息泄漏

第一,代码泄漏,.svn的文件夹和git的文件夹中可能包含代码;

第二,mac中编程会自动生成.DS_Store文件,其中可能包含敏感信息;

第三,代码备份。

9.逻辑漏洞

需要自己去结合传入数据的流程和基本业务去判断。

关注我们

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值