通用代码审计思路
•根据敏感关键字回溯参数传递过程(逆向追踪)
•检查敏感函数的参数,进行回溯变量,判断变量是否可控并且没有经过严格的过滤,这是一个逆向追踪的过程。
•寻找可控参数,正向追踪变量传递过程(正向追踪)•跟踪传递的参数,判断是否存入到敏感函数内或者传递的过程中具有代码逻辑漏洞。
•寻找敏感功能点,通读功能点代码(直接挖掘功能点漏洞)•根据自身经验判断在该应用中的哪些功能可能出现漏洞。
•直接通读全文代码
审计方向:
根据功能点审计:根据业务的功能来进行审计。
- 用浏览器进行浏览,找到程序有哪些功能,阅读指定功能点的源代码。
- 缺点:不够全面
- 常见功能点:文件上传,搜索,登录,注册,留言,文件管理,文件资源下载,会员中心,人才招聘,订单管理,广告管理,图片展示,密码修改,网站参数设置,模板管理,登录日志,文章编辑,头像上传,在线升级,数据库备份,用户权限分配,管理数据库,投票系统。
敏感函数回溯审计:根据敏感的函数,去逆向参数传递的过程的审计方法。
- 大多数漏洞的产生原因都是因为函数的使用不当导致的,只要我们能找到这些使用不当的函数,就能快速的挖掘漏洞。
- 当然我们也需要去了解函数的一些特性,函数实现的功能。
- 缺点:误报率高
- 代码执行:eval,assert,preg_replace,create_function(),array_map(),call_user_fun(),call_user_array,array_filter,usort,uasort
- 命令执行:system,shell_exec,passthru,exec,反引号``,popen
- 文件包含:include,require、require_once,include_once
- 文件操作:copy、file_get_contents、file_put_contents、file、fopen、move_uploaded_file、readfile、rename、rmdir、unlink敏感函数回溯审计
通读全文代码
PHP开发过程中无非分两种,依赖框架开发,不依赖框架开发。一般不依赖框架开发的目录结构
审计过程中需要关注几个点: