javaweb代码审计思路
信任边界:
信任边界是不同主题汇聚的位置,也就是说,是实体与不同权限实体之间交叉的位置,信任边界勾勒出哥哥主体之间的攻击界面。
不可信数据:
不同实体之间相互交互的数据统称为不可信数据
思路
正向数据流分析法-根据业务推代码
逆向数据流分析法-根据缺陷推业务
代码审计工具辅助法
检查关键组件法
自定义框架审计法
常见的不可信数据入口
getParameter //request类获取参数方法
getParameterNames //获取参数名
getParameterValues //获取参数值
getParameterMap //获取参数map类型
getQueryString //获取url的value值
getHeader //获取http的请求头
getHeaderNames //获取请求头名
getRequestUrl //获取请求url
getCookies //获取cookie
getRequestedSessionId //获取sessionid
getInputStream //获取输入数据
getReader //获取请求内容
getMethod //获取请求方法
getProtocol //获取请求协议
getServerName //获取服务名
getRemoteUser //获取当前缓存的用户
getUserPrincipal //获取用户指纹
URL重定向
javax.servlet.http.HttpServletResponse.sendRedirect
javax.servlet.http.HttpServletResponse.setStatus
javax.servlet.http.HttpServletResponse.addHeader
文件访问
java.io.FileInputStream; //文件输入
java.io.FileOutputStream; //文件输出
java.io.FileReader; //文件读取
java.io.FileWriter; //文件写入
危险函数/关键字
XXE:
SAXReader,DocumentBuilder,XMLStreamReader
FILE:
MultipartFile,createNewFile,FileInputStream
SSRF:
HttpClient,URL,ImagelO,HttpURLConnection,OkHttpClient
SQL:
Statement,PrepareStatement,sql,$,hql
EXEC:
getRuntime.exec,processBuilder.start
其他自定义框架审计思路-如PE案例
科蓝的PE框架,该框架是目前国内网银使用比较多的,该框架的特点:
1.所有字段格式使用style样式表限制
2.数据库使用mybatis框架
3.程序使用spring等较为成熟的框架
正向数据流分析(可能会遗漏隐蔽接口)
根据业务找漏洞
请求与业务逻辑的映射关系/可控变量
SpringMVC:@RequestMapping("Login.do")
Struts2:struts.xml中action与view的对应
业务功能跟踪审计
/per/ptransfer.BookingTransferetailQry.do?jnlNo=131890
搜索关键url,定位源码位置,分析源码
逆向数据流分析(可能会找到漏洞无法利用)
根据漏洞找业务(根据关键字找漏洞)
针对常规漏洞(指纹识别度高):如sqli,cmdi,线程安全等
Ibatis、Mybatis:使用xml做sql映射,搜索$、${、"+"可以定位
Hibernate:代码中的HQL,搜索字符串拼接的关键字Concat,append,+
通读全文,查看程序入口文件
web.xml是整个应用的配置文件
Application-context.xml是spring框架公共配置文件
struts.xml是struts框架公共配置文件
Context-param上下文初始参数
listener 监听器
Filter 过滤器
session-config 会话设置
servlet 应用程序
检查关键组件
检查程序使用的第三方组件是否存在漏洞:如struts2等

浙公网安备 33010602011771号