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