简单的php代码审计【以dvwa为例】

一个网站的安全性涉及很多方面,代码的安全性是其中的一个重要因素,代码审计就是用来提高代码安全性的,那么我们就来讲讲代码审计,这次我们用到的是dvwa。
DVWA (Damn Vulnerable Web Application) DVWA是用PHP+Mysql编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序。包含了SQL注入、XSS、盲注等常见的一些安全漏洞。
下面简单的以dvwa里面sql注入的三种等级代码来说一下代码审计。

首先比较low、medium、high三种级别的php代码:

Low:

dvwa1

Medium:​dvwa2

High:

3

 

红框里面就是三种代码的不同之处,发现从low到medium多了一句,medium到high又多了一句。
dvwa的sql injection里面有个输入框,三种等级下输入1,结果都一样,浏览器地址栏变成:

输入框下面会出现:

4

 

  • ​当在low级下输入1’,发现浏览器地址栏变成:

并出现错误:

 

  •  medium级下,输入1’,发现地址栏和low级一样,提示错误:

  •      再看high级下,输入1’,地址栏依旧,没出现错误,也没有出现正常的查询结果。

正常情况下,当用户在输入框输入1,从数据库查询id=1的用户,查询语句是

就会得到id=1的用户信息。
但是在1后面加个单引号后在low和medium级别下出现错误,看回上面图片:

  • ​low级下没有对输入进行任何处理,直接把用户输入的东西放到查询语句中进行查询;
  • ​medium级下添加了mysql_real_escape_string()函数,这个函数是转义sql语句中使用的字符串中的特殊字符,就像在错误提示中显示在单引号前加;
  • ​high级下在转义函数前面加了另一个函数stripslashes(),这个函数是去除addslashes()函数添加的反斜杠,因为high级下,php的magic_quotes_gpc为on,对所有的GET、POST和COOKIE数据自动运行addslashes()函数。所以要使用stripslashes()函数

 

三种等级下sql注入的情况很明显了,现在深入。
low:

5

6

7

8
就这样把当前用户、数据库、php版本爆了出来。concat_ws是mysql里面的函数。
medium下会自动加反斜杠转义特殊字符,会破坏查询语句,页面上会提示出错;high下id只有正常情况下才会出现正确信息,其余的都不会出现任何信息。
除此之外,high级别中还有两处不同,判断输入是否为数字并将其值用单引号包含起来,以确保非法字符无法起作用。

9
到high级别的php代码已经达到相当高水平的安全性了,但是不能说一定是最安全的,因为还是可能会出现漏洞的。代码审计就是检查源代码中的缺点和错误信息,分析并找到这些问题引发的安全漏洞,并提供代码修订措施和建议。从而在系统开发阶段/运维阶段进行深入的问题查找和消灭过程。

 

[via@广外网络安全小组]

 

日币奖励:

本文为原创文章、首发91ri.org,作者由根据自己的实践撰文,根据本站积分规则给予日币奖励共6枚。