[php]5.PHP代码审计SQL注入漏洞

PHP代码审计之SQL注入漏洞

·SQL注入的危害

SQL注入(SQL INJECTION)简称注入攻击,SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞,,在设计程序,忽略了对输入字符串中接待的SQL指令的检查,被数据库误认为是正常的SQL指令而运行,从而使数据库收到攻击,可能导致数据被窃取,更改,删除,以及进一步导致网站被嵌入恶意代码,被植入后门程序等危害。

 

·SQL注入产生的原因

程序开发过程中不注意规范书写SQL语句和对特殊字符进行过滤,导致客户端可以通过全局变量POSTGET提交一些SQL语句正常执行

 

·SQL注入的条件

可控制用户数据的输入

原程序要执行的代码 拼接了用户输入的数据

 

·注入类型

[php]5.PHP代码审计SQL注入漏洞 第1张

·数字型注入

当输入的参数为整形时,则可认为是数字型注入

$result=select * from admin where id = $id;

ID 年龄 页码 等都可认为是数字型注入

不需要单引号来闭合

 

·字符型注入

当输入的参数为字符串时,称之为字符型

$result = select * from admin where id = $id’”;

需要单引号来闭合

 

 

·注入的利用方式

查询数据

读写文件

执行命令

 

<?php
$id = $_GET['ID'];
$conn = mysql_connect('localhost', 'root','root');
mysql_select_db( 'admin',$conn);
$sql = "SELECT * FROM USER WHERE id = $id";
$result = _mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($result)){
    echo "ID:".$row['id']."<br>";
    echo "usernmae".$row['username'];
    echo "password:".$row['pssword'];
    echo "email:".$row['email'];
}
mysql_close($conn);
echo "<hr>";
echo $sql;

·注入过程 (万能密码or 1=1 意思是前面的数据库语句如果执行或者查询失败 就执行or1=1那么1肯定是等于1的)

1. 攻击者访问登录页面

2. 输入用户及密码

3. 将含有攻击字符串主城SQL语句转发给数据库执行

4. 数据库之行返回应用程序服务器

5. 应用程序将内容返回浏览器,即绕过成功

 

·盲注

sql注入过程中,SQL语句执行的选择后,选择的数据不再页面显示

1. 基于布尔SQL盲注

2. 基于时间的SQL盲注

3. 基于报错的SQL盲注

 

 

·HTTP头注入

1. user-agent:使得服务器能够识别客户使用的操作系统,浏览器版本等(很多数据量大的网站会记录客户使用的操作系统或浏览器版本等存入数据库中)

2. Cookie:网站为了辨别用户身份进行 session跟中储存在用户本地终端上的数据(通常都是经过加密的)

3. X=Forwarded=For:简称XFF头,他代表客户端,也就是HTTP的请求段真实的IP,(通常一些网站的防注入功能惠济路请求端真实IP地址并写入数据库OR某文件[通过修改XXF头可以实现伪造IP]

4. Client-IP:同上

5. Referer:浏览器向WEB服务器表明自己使用哪个链接过来的

6. Host:客户端指定自己想访问的WEB服务器的域名/ip地址和端口

 

·修复方案

1. 使用预编译语句

2. 使用存储过程

3. 检查数据类型

4. 使用安全函数