1.5. 代码审计

1.5.1. 简介

代码审计是找到应用缺陷的过程。其通常有白盒、黑盒、灰盒等方式。白盒指通过对源代码的分析找到应用缺陷,黑盒通常不涉及到源代码,多使用模糊测试的方式,而灰盒则是黑白结合的方式。

1.5.2. 常用概念

1.5.2.1. 输入

应用的输入,可以是请求的参数(GET、POST等)、上传的文件、网络、数据库等用户可控或者间接可控的地方。

1.5.2.2. 处理函数

处理数据的函数,可能是过滤,也可能是编解码。

1.5.2.3. 危险函数

又常叫做Sink Call、漏洞点,是可能触发危险行为如文件操作、命令执行、数据库操作等行为的函数。

1.5.3. 自动化审计

一般认为一个漏洞的触发过程是从输入经过过滤到危险函数的过程,而审计就是寻找这个链条的过程。

1.5.3.1. 危险函数匹配

白盒审计最常见的方式是通过搜寻危险函数与危险参数定位漏洞,比较有代表性的工具是Seay开发的审计工具。这种方法误报率相当高,这是因为这种方法没有对程序的流程进行深入分析,另一方面,这种方式通常是孤立地分析每一个文件,忽略了文件之间复杂的调用关系。

具体的说,这种方式在一些环境下能做到几乎无漏报,只要审计者有耐心,可以发现大部分的漏洞,但是在高度框架化的代码中,能找到的漏洞相对有限。

1.5.3.2. 控制流分析

在后来的系统中,考虑到一定程度引入AST作为分析的依据,在一定程度上减少了误报,但是仍存在很多缺陷。

而后,Dahse J等人设计了RIPS,该工具进行数据流与控制流分析,结合过程内与过程间的分析得到审计结果,相对危险函数匹配的方式来说误报率少了很多,但是同样的也增加了开销。

1.5.3.3. 灰盒分析

国内安全研究员fate0提出了基于运行时的分析方式,解决了控制流分析实现复杂、计算路径开销大的问题。

1.5.4. 手工审计方式

  • 拿到代码,确定版本,确定能否正常运行

    找历史漏洞

    找应用该系统的实例

  • 简单审计,运行审计工具看是否有漏洞

  • 大概看懂整个程序是如何运行的

    文件如何加载

    类库依赖

    有没有加载waf

  • 数据库如何连接

    mysql/mysqli/pdo

    有没有用预编译

  • 视图如何形成

    能不能xss

    能不能模版注入

  • SESSION如何处理

    文件

    数据库

    内存

  • Cache如何处理

    文件cache可能写shell

    数据库cache可能注入

    memcache

  • 看账户体系

  • 管理员账户的密码

    加密方式

    泄漏数据后能不能爆破密码

    重置漏洞

  • 修改密码漏洞

    修改其他人密码

  • 普通用户的帐号

    能否拿到普通用户权限

    普通用户帐号能否盗号

    重点找没有帐号的情况下可以访问的页面

    是不是OAuth

  • 攻击

    SQLi

    看全局过滤能否bypass

    看是否有直接执行sql的地方

  • 看是用的什么驱动,mysql/mysqli/pdo

    如果使用PDO,看是否是直接执行的地方

  • XSS

    全局bypass

    直接echo

    看视图是怎么加载的

  • FILE

    上传下载覆盖删除

  • 包含

    LFI

    RFI

    全局找include, require

  • 正常上传

    看上传是如何确定能否上传文件的

  • RCE

    call_user_func

    eval

    assert

    preg_replace /e

    XXE

    CSRF

    SSRF

    反序列化

  • 变量覆盖

    extract

    parse_str

    array_map

    LDAP

    XPath

    Cookie伪造

  • 过滤

  • 找WAF

    看waf怎么过滤的,相应的如何绕过

最新文章

  1. Caffe训练好的网络对图像分类
  2. 130道ASP.NET面试题
  3. android之回调函数的意义
  4. pdf打印乱码问题
  5. Java去除字符串中的空格
  6. cpp(第三章)
  7. sqoop将mysql连表查询结果导入hdfs文件
  8. asp.net core 系列 3 依赖注入服务
  9. Python编写脚本(输出三星形状的‘*’符号)
  10. THEPYTHONCHALLENG闯关记录
  11. 一个模拟——抢票部分功能的 简单版(主要实例化一下 Lock 的使用)
  12. IDEA使用SpringBoot 、maven创建微服务的简单过程
  13. apache 设置环境变量
  14. Gardener Bo (树剖 + 问题分解)
  15. PERL 正则表达式简介
  16. vue中使用promise.all发送多个请求
  17. 如何查看自己电脑系统的安装日期-Window上
  18. python抠图与pip install PIL报错
  19. 采用dlopen、dlsym、dlclose加载动态链接库
  20. 解决命令行执行shell脚本成功,但crontab执行失败

热门文章

  1. 路由分发、名称空间、虚拟环境、视图层三板斧、JsonResponse对象、request对象获取文件、视图层FBV与CBV的源码剖析、模版层简介
  2. FalseSharing-伪共享
  3. 【ASP.NET Core】用配置文件来设置授权角色
  4. 【随笔记】T507 ADC SGM58031 16BIT 4Channel 调试记录
  5. 使用 flex布局 制作携程网首页
  6. Elasticsearch Mapping类型修改
  7. WAVE音频文件格式及其64位扩展格式的简要介绍
  8. Cesium计算多边形面积(十一)
  9. dotnet总结
  10. .Net6 微服务之Ocelot+IdentityServer4入门看这篇就够了