审计方式

以下描述均基于人工审计(Java代码审计)

  1. 底层逆向跟踪:从底层根据敏感函数、敏感关键字回溯到最外层的参数入口,如果整个调用链没有防护,则存在漏洞。
  2. 入口正向跟踪:从参数入口分析参数的传递过程,通过层层调用链,分析是否存在漏洞。
  3. 特定功能追踪:基于方法2,但是从特定功能入手;当项目庞大,且方法1找不到漏洞时,建议采用此种方式,往往可以找到系统中的逻辑漏洞。
  4. 通读代码:建议审计项目前,先大概通读一下项目代码,了解整个项目的组织结构,运作模式,有利于审计中进行参数的追踪。

下面给将详细记录一下比较常用的方式。

底层逆向追踪

一个项目,往往是将一些功能函数封装在底层,甚至是直接打包成jar包供外层调用。所以我们可以直接搜索底层的敏感函数或者敏感关键字,进行逆向的回溯追踪。例如要查SSRF,我们可以搜索关键字: new URL( 等。一下是一些常见漏洞关键字速查表,需要具体分析到底是否含有漏洞:

SSRF

以下关键字中包括 Http 的,均只支持HTTP协议,只能用作内网ip和端口探测

关键字是否支持全协议
HttpClient
Request(对HttpClient封装后的类)
HttpURLConnection
okhttp
URLConnection
URL
ImageIO
get(看具体实现
post(看具体实现

XXE

XXE目前(2021/1/16 14:42:36 )还是比较常见的,危害主要是可以读取系统文件。

关键字默认配置是否触发
DocumentBuilderFactory
SAXBuilder
SAXParserFactory
SAXReader
SAXTransformerFactory
SchemaFactory
TransformerFactory
ValidatorSample
XMLReader
XMLDecoder
xml否,得看具体实现
Poi否,得看具体版本
dom4j否,得看具体版本

SQLI

现代社会SQLI已经很少了,非框架下,基本SQLI都出现在 order by 位置和 like 位置等。

关键字是否在框架下
$是,mybatis框架下
append(
order by
like
limit
in(
select
sql或hql
‘"+

文件上传

文件上传也比较常见,得具体分析是否采用白名单、或者黑名单是否严谨。此外,利用解压进行文件上传也十分常见。

关键字是否在框架下
MultipartFile是,springMVC下
ZipEntry
FileUtil或者FileUtils
.write
upload
ServletFileUpload是,apache-fileupload框架
SmartUpload是,SmartUpload框架

文件下载

任意文件下载主要是没有路径穿越防护,也比较常见。

关键字是否在框架下
.write
.read
download
content-disposition

开放重定向

属于中低危漏洞,但是也挺常见的。可以用来钓鱼啥的。

关键字是否在框架下
sendRedirect
redirect:是,SpringMVC框架
RedirectView是,SpringMVC框架

命令注入

比较少见,因为关键字比较少,所以很好查。

关键字是否在框架下
getRuntime
ProcessBuilder
GroovyShell
exec否,看具体实现

反序列化

除了类似fastjson、jackson和shiro等常见第三方组件,外,查找原生程序可能存在的反序列化关键字如下:

关键字是否在框架下
.readObject(
.readUnshared
Yaml.load是,snakeyaml框架
XStream.fromXML是,XStream框架

全局过滤器/拦截器

主要是为了审计项目中使用的过滤器/拦截器是否存在安全隐患,比如是否存在被绕过的风险,查找过滤器的关键字如下:

关键字是否在框架下
Filter
@WebFilter
Interceptor是,依赖于框架

特定功能追踪

当常见功能找不到时,可以试试找找如下功能或服务,可能有惊喜:

  • WebDav
  • Graphql
  • WebService