代码审计由于牵涉到函数调用、代码逻辑、调试等问题,自动化审计的效果差强人意,大部分漏洞还是需要手动或者半自动化挖掘,但是不管哪种打洞方法都需要一套强大的规则支持。现在的CMS大部分都是MVC框架,规则的用处就是由高危函数回溯到Model层再到Control层,最终定位漏洞的触发位置。
下面是我整理的一些基本的审计规则,可以在这个规则集基础上根据不同的框架特性(比如ThinkPHP)来整理出新的框架规则集:
①SQL注入
(?:mysql_connect\(|mysql_select_db\(|mysql_query\(|new\smysqli)
②命令执行
(?:\bexec\(|passthru\(|\bsystem\(|\bpopen\(|proc_open\(|proc_close\(|shell_exec\(|pcntl_exec\(|escapeshellcmd\().{0,50}\$
③代码执行
(?:\beval\(|assert\(|call_user_func\(|call_user_func_array\(|create_function\(|preg_replace\(\s{0,5}.*/[is]{0,2}e[is]{0,2}["']\s{0,5},(.*\$.*,|.*,.*\$))
④文件上传
\bmove_uploaded_file\s{0,5}\(
⑤文件操作漏洞
(?:file_get