11.1. 代码审计

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

    11.1.2.2. 处理函数

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

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

    11.1.3.1. 危险函数匹配

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

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

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

    11.1.3.3. 灰盒分析

      • 拿到代码,确定版本,确定能否正常运行
        • 找历史漏洞
        • 找应用该系统的实例
    • 简单审计,运行审计工具看是否有漏洞
      • 大概看懂整个程序是如何运行的
          • 文件如何加载
            • 类库依赖
            • 有没有加载waf
          • 数据库如何连接
            • mysql/mysqli/pdo
            • 有没有用预编译
          • 视图如何形成
            • 能不能xss
            • 能不能模版注入
          • SESSION如何处理
            • 文件
            • 数据库
            • 内存
            • 文件cache可能写shell
            • 数据库cache可能注入
            • memcache
      • 看账户体系
          • 管理员账户的密码
            • 加密方式
            • 泄漏数据后能不能爆破密码
            • 重置漏洞
              • 修改密码漏洞
                • 修改其他人密码
          • 普通用户的帐号
            • 能否拿到普通用户权限
            • 普通用户帐号能否盗号
        • 重点找没有帐号的情况下可以访问的页面
        • 是不是OAuth
      • 攻击
          • SQLi
            • 看全局过滤能否bypass
            • 看是否有直接执行sql的地方
              • 看是用的什么驱动,mysql/mysqli/pdo
                • 如果使用PDO,看是否是直接执行的地方
          • XSS
            • 全局bypass
            • 直接echo
            • 看视图是怎么加载的
          • RCE
            • call_user_func
            • eval
            • assert
            • preg_replace /e
        • XXE
        • CSRF
        • SSRF
        • 反序列化
          • 变量覆盖
            • extract
            • parse_str
            • array_map
        • LDAP
        • XPath
        • Cookie伪造
      • 过滤
          • 找WAF
            • 看waf怎么过滤的,相应的如何绕过