代码审计

2020-10-10 14:27:09 浏览数 (1)

目录

    • 什么是代码审计
    • 代码审计的三种方法
        • 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 注入漏洞

任意文件下载

审计方法:全局搜索以下关键词 fileNamefilePathgetFilegetWriterdownload 查看下载文件或路径是否可控

文件上传

文件上传可以搜索以下关键词:(需注意有没有配置文件上传白名单) uploadwritefileNamefilePath 在查看时,主要判断是否有检查后缀名,同时要查看配置文件是否有设置白名单或者黑名单

文件包含

直接搜索includerequireinclude_oncerequire_once

ssrf

搜索函数跟踪请求file_get_contentsfsockopencurl_exec

CSRF

审计方法:通过查看配置文件有没有配置 csrf 全局过滤器,如果没有则重点看每个操作前有没有添加 token 的防护机制

3.定向功能分析法

1.程序初始安装

找到install.php或者其他相关文件,看程序能不能重装

2.站点信息泄露
3.文件上传
4.文件管理
5.登录认证

无密码登录,万能账号,万能密码登录

6.数据库备份恢复

注册一个用户,用户名是个一句话木马,然后将数据库导出备份,用户名

7.找回密码
8.验证码

找到加密的密码,偏移量,生成同样的token。或者找到cookie的生成规律,然后cookie登录

0 人点赞