代码审计思路
文章目录
审计方式
以下描述均基于人工审计(Java代码审计)
- 底层逆向跟踪:从底层根据敏感函数、敏感关键字回溯到最外层的参数入口,如果整个调用链没有防护,则存在漏洞。
- 入口正向跟踪:从参数入口分析参数的传递过程,通过层层调用链,分析是否存在漏洞。
- 特定功能追踪:基于方法2,但是从特定功能入手;当项目庞大,且方法1找不到漏洞时,建议采用此种方式,往往可以找到系统中的逻辑漏洞。
- 通读代码:建议审计项目前,先大概通读一下项目代码,了解整个项目的组织结构,运作模式,有利于审计中进行参数的追踪。
下面给将详细记录一下比较常用的方式。
底层逆向追踪
一个项目,往往是将一些功能函数封装在底层,甚至是直接打包成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
文章作者 P1n93r
上次更新 2021-01-16