JAVA代码审计初探

写在前面

最近要做代码审计,事先预习了一下,整理了代码审计需要的基础知识和一些可简单审计的漏洞。

参考:JAVA安全编码与代码审计

JAVA常用架构

maven

根目录下有pom.xml

MVC

大部分web项目都基于MVC开发,model(模型)+view(视图)+controller(控制器)
dao层,service层,controller层(web),view层

  • controller 负责具体业务的模块流程的控制,会调用到下面 Service 层的接口来控制业务流程
  • service 主要负责业务模块的应用逻辑应用设计,先设计接口,在设计实现类。这一层,是纯业务逻辑。在使用 Service 层时,会继续调用下面的 DAO 层的接口。
  • dao 负责数据持久化,通俗点说就是用来和数据库交互,读写数据的模块。

SSM框架

Spring+SpringMVC+Mbatis

Mybatis

持久层框架,支持定制化sql,sql都写在xml里统一管理
(XML映射文件:Mapper.xml文件)

漏洞类型

XXE

XML解析一般在导入配置、数据传输接口等场景可能会用到,涉及到XML文件处理的场景可留意下XML解析器是否禁用外部实体,从而判断是否存在XXE。部分XML解析接口如下:

javax.xml.parsers.DocumentBuilder
javax.xml.stream.XMLStreamReader
org.jdom.input.SAXBuilder
org.jdom2.input.SAXBuilder
javax.xml.parsers.SAXParser
org.dom4j.io.SAXReader 
org.xml.sax.XMLReader
javax.xml.transform.sax.SAXSource 
javax.xml.transform.TransformerFactory 
javax.xml.transform.sax.SAXTransformerFactory 
javax.xml.validation.SchemaFactory
javax.xml.bind.Unmarshaller
javax.xml.xpath.XPathExpression

禁用外部实体的方法

SAXReader
sax.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
sax.setFeature("http://xml.org/sax/features/external-general-entities", false);
sax.setFeature("http://xml.org/sax/features/external-parameter-entities", false);

TransformerFactory
TransformerFactory tf = TransformerFactory.newInstance();
tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");

XMLInputFactory
// This disables DTDs entirely for that factory
xmlInputFactory.setProperty(XMLInputFactory.SUPPORT_DTD, false); 
// disable external entities
xmlInputFactory.setProperty("javax.xml.stream.isSupportingExternalEntities", false);

SQL注入

ibatis/Mybatis

定位看Mybatis的配置文件
有两种传参方式$...$和进行预编译的#...#(ibatis)或${}``#{}(Mybatis)
大部分情况下会用#传参

易产生sql注入的情况,这些参数使用#会报错,只能用白名单过滤或者几种排序写成if,开发经常忽略。

1.like
Select * from news where title like ‘%${title}%’,
->select * from news where tile like concat(‘%’,#{title}, ‘%’),
2.in
Select * from news where id in (${id}),
->循环指令 select * from news where id in
<foreach collection="ids" item="item" open="("separator="," close=")">#{item} </foreach>

3.order by
Select * from news where title =‘京东’ order by ${time} asc,
->java层做映射,白名单

XSS

web.xml 找过滤器

越权

漏洞代码

@RequestMapping(value="/getUserInfo",method = RequestMethod.GET)
public String getUserInfo(Model model, HttpServletRequest request) throws IOException {
    String userid = request.getParameter("userid");
    if(!userid.isEmpty()){
        String info=userModel.getuserInfoByid(userid);
        return info;
    }
    return "";
}

controller层找请求,看请求资源和操作处是否绑定userid

CSRF

一般会在框架中修复,先熟悉框架中CSRF的防护方案
哪些框架?怎么防护?
查看增删改请求有没有带token

框架,第三方组件

XML文件查找、搜索CVE

URL重定向

【需要根据请求查看】
入参未做限制代码:

String site = request.getParameter("url");
if(!site.isEmpty()){
	response.sendRedirect(site);
}

审计函数

sendRedirect
setHeader
forward
...

任意文件操作,SSRF,命令执行

从请求找,结合黑盒测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值