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.上传漏洞
对于上传漏洞,也是重点关注的地方,要仔细分析它的处理流程,针对上传的绕过方式是
很多的,最保险的方式:在保存文件是采用文件名随机命名和后缀白名单方式。其次要注意
的一点是上传文件的地方可能不止一处,不要有遗漏,可能会碰到这样的情况,突然在某
个目录里面包含了一个第三方的编辑器在里面。

include() 

include_once()、require()、require_once()、file_get_contents()等
最常见的还是出在下载文件功能函数,例如

download.php?file=../../../etc/passwd 这种类型中。

4. 权限绕过
权限绕过可分为两类吧
(1)后台文件的未授权访问。后台的文件没有包含对 session 的验证,就容易出现这样的问题
(2)未作用户隔离,例如 mail.php?id=23 显示了你的信件,那么换个 ID, mail.php?id=24 就查
看到了别人的信件,编写代码是方便,把信件都存在一个数据表里,

id 统一编号,前端展

现时只需按

id 取出即可,但未作用户隔离,判定归属,容易造成越权访问。

这样的例子是很常见的,给某银行做评估是就经常发现这种漏洞。