目录
- 什么是代码审计
- 代码审计的三种方法
- 1.通读全文法
- 2.函数回溯法
- 3.定向功能分析法
- 分析过程
- 工具
- 主要代码审计方法
- 1.通读全文法
- 2.函数回溯法
- 1.跟踪用户的输入数据
- 2.敏感函数参数回溯
- 函数回溯发审计常用漏洞
- Xss 审计
- SQL 注入
- 任意文件下载
- 文件上传
- 文件包含
- ssrf
- CSRF
- 3.定向功能分析法
- 1.程序初始安装
- 2.站点信息泄露
- 3.文件上传
- 4.文件管理
- 5.登录认证
- 6.数据库备份恢复
- 7.找回密码
- 8.验证码
什么是代码审计
代码审计(Code audit)是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。软件代码审计是对编程项目中源代码的全面分析,旨在发现错误,安全漏洞或违反编程约定。 它是防御性编程范例的一个组成部分,它试图在软件发布之前减少错误。 C和C 源代码是最常见的审计代码,因为许多高级语言(如Python)具有较少的潜在易受攻击的功能。
代码审计的三种方法
1.通读全文法
通读全文:顾名思义,就是通过对整个程序的代码进行阅读,从而发现问题,这种方法是最全面的,但也是最麻烦的,最容易出错。 如果是大型程序源码,代码量非常大,相当耗费时间,这种方法一般是企业对自己自身产品进行审计,当然,这种方法非常有用,通过阅读得到整个应用的业务逻辑,可以挖掘到更多具有价值的漏洞,对于小型程序源码,也可以使用这种方法进行审计。
优点
了解程序架构与业务逻辑。挖掘更高质量漏洞
缺点
耗费时间较长
2.函数回溯法
大多数的漏洞是因为函数的使用不当造成的,只要找到这些使用不当的函数,就可以快速的发现想要挖掘的漏洞。 这种方法相对比较快速和高效,也可以使用工具进行审计,工具的原理是利用正则表达式,匹配一些危险的函数、敏感关键字,然后得到这些函数,就可以分析阅读上下文,追踪源头
优点
可快速挖掘漏洞
缺点
无法覆盖逻辑漏洞
3.定向功能分析法
该方法主要是根据程序的业务逻辑和业务功能进行审计的,首先大概浏览网站的页面,比如有上传功能,有浏览功能,可能猜测到这个程序有上传漏洞、XSS漏洞等,可以大概的推测它有哪些漏洞,然后再针对猜测的结果,进行定向分析。 功能: 输入、输出 安全功能 程序异常处理 程序初始安装 站点信息泄漏 文件上传 文件管理 登陆认证 数据库备份恢复 找回密码 验证码 ……
分析过程
- 首先,不管是什么程序都要把握大局,浏览源码文件夹,了解它的大致结构
- 其次,根据定向功能发对每一项功能进行审计,可以根据网站的架构使用不同的方法进行分析,三者结合起来效果最佳
- 最后,可以将敏感函数回溯,发现漏洞的起源地
工具
seay
主要代码审计方法
1.通读全文法
(1)网站结构 浏览源码文件夹,了解该程序的大致目录 (2)入口文件 index.php、admin.php文件一般是整个程序的入口,详细读一下index文件可以知道程序的架构,运行流程,包含那些配置文件,包含哪些过滤文件以及包含那些安全过滤文件,了解程序的业务逻辑。 (3)配置文件 一般类似config.php等文件,保存一些数据库相关信息、程序的一些信息。先看看数据库编码,如果是gbk则可能存在宽字节注入。如果变量的值用双引号、则可能存在双引号解析代码执行的问题。 (4)过滤功能 通过详读安全过滤文件等文件,清晰掌握用户输入的数据,哪些被过滤,哪些无过滤,在哪里被过滤了,如何过滤的,能否绕过过滤的数据。过滤的方式是替换还是正则?有没有GPC?有没有使用addslasher()处理?
2.函数回溯法
跟踪用户输入数据和敏感函数参数回溯:
1.跟踪用户的输入数据
判断数据进入的每一个代码逻辑是否有可利用的点,此处的代码逻辑 可以是一个函数,或者是条小小的条件判断语句。
2.敏感函数参数回溯
根据敏感函数,逆向追踪参数传递的过程。这个方法是最高效,最常用的方法。大多数漏洞的产生是因为函数的使用不当导致的,只要找到这些函数,就能够快速挖掘想要的漏洞。
搜索时要注意是否为整个单词,以及小写敏感这些设置
代码语言:javascript复制密码硬编码、密码明文存储: password 、pass、jdbc
XSS: getParamter、<%=、param.
SQL 注入: Select、Dao 、from 、delete 、update、insert
任意文件下载: download 、fileName 、filePath、write、getFile、getWriter
任意文件删除: Delete、deleteFile、fileName 、filePath
文件上传: Upload、write、fileName 、filePath
XML 注入: DocumentBuilder、XMLStreamReader、SAXBuilder、SAXParser
反序列化漏洞: serialize unserialize
代码执行: eval、system、exec
函数回溯发审计常用漏洞
Xss 审计
1.反射xss一般seay可以直接搜索str_replace
关键字,也可以通过手工搜索来寻找
2.存储型 XSS全局搜索数据库的插入语句(关键词:insert
,save
,update
),然后找到该插入语句所属的方法名如 (insertUser()
) , 然后全局搜索该方法在哪里被调用, 一层层的跟踪
SQL 注入
一般直接搜索 select、update、delete、insert 关键词就会有收获
如果 sql 语句中有出现
、 append
、 $
、 ()
、 #
等字眼,如果没有配置 SQL 过滤文件,则判断存在 SQL 注入漏洞
任意文件下载
审计方法:全局搜索以下关键词 fileName
、filePath
、getFile
、getWriter
、download
查看下载文件或路径是否可控
文件上传
文件上传可以搜索以下关键词:(需注意有没有配置文件上传白名单)
upload
、write
、fileName
、filePath
在查看时,主要判断是否有检查后缀名,同时要查看配置文件是否有设置白名单或者黑名单
文件包含
直接搜索include
、require
、include_once
、require_once
ssrf
搜索函数跟踪请求file_get_contents
、fsockopen
、curl_exec
CSRF
审计方法:通过查看配置文件有没有配置 csrf 全局过滤器,如果没有则重点看每个操作前有没有添加 token 的防护机制
3.定向功能分析法
1.程序初始安装
找到install.php或者其他相关文件,看程序能不能重装
2.站点信息泄露
3.文件上传
4.文件管理
5.登录认证
无密码登录,万能账号,万能密码登录
6.数据库备份恢复
注册一个用户,用户名是个一句话木马,然后将数据库导出备份,用户名
7.找回密码
8.验证码
找到加密的密码,偏移量,生成同样的token。或者找到cookie的生成规律,然后cookie登录