background image

php 漏洞与代码审计

在甲方公司做代码审计一般还是以白盒为主,漏洞无非这么几类,XSS、sql 注入、命

令执行、上传漏洞、本地包含、远程包含、权限绕过、信息泄露等。

1.xss + sql 注入

其中占大头的自然是 XSS 与 SQL 注入,对于框架类型或者有公共文件的,建议在公

共文件中统一做一次 XSS 和 SQL 注入的过滤。写个过滤函数,可由如下所示:

$_REQUEST = filter_xss($_REQUEST);

$_GET = filter_xss($_GET);

$_POST = filter_xss($_POST);

$_COOKIE = filter_xss($_COOKIE);

$_POST = filter_sql($_POST);

$_GET = filter_sql($_GET);

$_COOKIE = filter_sql($_COOKIE);

$_REQUEST = filter_sql($_REQUEST);

这里有一点需要说明,$_REQUEST 虽然等于$_GET+$_POST,但他们是独立的数

组,也就是说假设改变了$_GET 的值,但$_REQUEST 的值还是原来的值,所以过滤时
都不能落下,至于其他的如$_FILE 之类的就可忽略了。

最简单的 filter_xss 函数是 htmlspecialchars()

最简单的 filter_sql 函数是 mysql_real_escape_string()

当然,谁都知道这种过滤 filter_sql 只能过滤字符型和搜索型的注入,对于数字型是

没有办法的,但也说明做了这层过滤后,只需在后面注意数字型的 SQL 语句就可以了,
遇到了加 intval 过滤就可以了,这就变得容易多了。

2. 命令执行

对于命令执行,可以从关键字入手,总共可分为 3 类

(1) php

 

代码执行 :eval 等

(2)shell 命令执行:exec、passthru、system、shell_exec 等

(3) 文件处理:fwrite、fopen、mkdir 等

对于这几类需要注意其参数是否用户可控。

3.上传漏洞

对于上传漏洞,也是重点关注的地方,要仔细分析它的处理流程,针对上传的绕过

方式是很多的,最保险的方式:在保存文件是采用文件名随机命名和后缀白名单方式。其