概述
由于工作需要,开始接触代码审计的相关工作。因为之前对这方面并没有很清晰的概念,所以特地学习下
Web应用安全的核心问题
用户提交的数据不可信是Web应用程序核心安全问题。
SQL注入
原理
合法输入
|
|
恶意输入
|
|
Java代码分析
不合规代码
|
|
|
|
|
|
合规代码(参数化查询)
|
|
|
|
至于为什么还有1个查询结果,那就是Mysql的字符特性的问题了,这里不作多的解释。12345SQL Paramter:' or 'a'='a-----------------执行Sql语句: select * from users where id='1\' or \'a\'=\'a'执行结果如下所示:test Alice
防范建议
- 采用参数查询即预编译方式(首选)
- 字符串过滤
XXE
原理
合法输入
|
|
|
|
恶意输入
|
|
本地80端口WEB服务器收到如下请求:
|
|
Java代码分析
不合规代码
|
|
合规代码
|
|
报错如下:1org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 50; 将功能 "http://apache.org/xml/features/disallow-doctype-decl" 设置为“真”时, 不允许使用 DOCTYPE。
防范建议
- 使用开发语言提供的禁用外部实体的方法(首选)
- 过滤用户提交的XML数据,关键词:
<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC。
命令注入
原理
合法输入
|
|
恶意输入
|
|
Java代码分析
不合规代码
|
|
合规代码
|
|
防范建议
- 白名单
- 严格权限限制等等
- 严格校验参数
任意文件下载/目录遍历
原理
在JAVA web程序的下载文件相关的代码中,若不对HTTP请求中的待下载文件名进行检查,则有可能产生任意文件下载漏洞。
目录遍历与任意文件下载的原理相似,这里就简单列个文件下载好了
合法输入
|
|
恶意输入
|
|
Java代码分析
不合规代码
|
|
合规代码
|
|
防范建议
- 严格的权限限制。
- 控制路径后缀,对文件名进行检查等。
- 采用getCanonicalPath、getAbsolutePath等方法。
任意文件上传
原理
当攻击者利用恶意文件上传漏洞时,通常会向服务器上传jsp木马并访问,可以直接控制服务器。
合法输入
|
|
恶意输入
|
|
Java代码分析
不合规代码
|
|
合规代码
|
|
防范建议
- 控制文件名
- 控制文件内容
- 控制上传目录的权限
XSS
原理
这里仅仅拿了个反射的XSS做例子。
合法输入
|
|
恶意输入
|
|
Java代码分析
不合规代码
|
|
合规代码
|
|
|
|
防范建议
- 对用户的输入进行html编码。
其他场景
这些场景和前面提到的类似或者比较浅显易懂,就不贴代码了。
压缩文件问题
没有检测压缩后的大小等细节。
其他未净化输入导致日志等处被污染
顾名思义,应用程序的日志被污染,如果输出到页面上也容易触发XSS。
合法输入
|
|
恶意输入
|
|
正则表达式的拼接
原理与SQL注入基本相同。
合法输入
|
|
恶意输入
|
|
XML注入的拼接
原理与SQL注入基本相同。
合法输入
|
|
恶意输入
|
|
总结
想要学好代码审计,就必须多接触主流的的框架,例如Spring等,在了解各各类框架之后,才能更快的上手。