SQL注入基础:10.XFF注入
SQL注入基础:10.XFF注入
10.1 XFF注入攻击
X-Forwarded-For简称XFF头,它代表了客户端的真实IP,通过修改他的值就可以伪造客户端IP。
1)判断是否存在注入
使用Burp的Repeater模块对请求进行修改,分别修改X-Forwarded-For的值如下所示:
X-Forwarded-for: 127.0.0.1
X-Forwarded-for: 127.0.0.1’
X-Forwarded-for: 127.0.0.1' and 1=1#
X-Forwarded-for: 127.0.0.1' and 1=2#
访问的结果如下,说明存在SQL注入漏洞。
2)查询字段数量
判断出字段数量是:4。
查询SQL语句插入位置。
3)查询数据库库名
(1)查询当前数据库库名
(2)查询所有数据库库名
像这样,构造不同的union注入语句,就可以得到完整的数据库库名,表名,字段名和具体数据。
10.2 XFF注入PHP代码
<?php
header("Content-Type:text/html;charset=utf8");
$con=mysqli_connect("localhost","root","root","bank");
mysqli_set_charset($con,'utf8');
if(!$con){
echo "Connect failed : ".mysqli_connect_error();
}
if(getenv('HTTP_CLIENT_IP')) {
$ip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')) {
$ip = getenv('REMOTE_ADDR');
} else {
$ip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
}
$sql="select * from login_ip where ip='$ip'";
$result=mysqli_query($con,$sql);
$row=mysqli_fetch_array($result);
if ($row) {
echo "id:".$row['id']."<br>";
echo "用户名:".$row['name']."<br>";
echo "登录地:".$row['address']."<br>";
}else{
echo "您正在新机器上登录账号,请确定是否为本人操作!";
}
echo '<hr><br>';
echo "查询的语句是:$sql";
?>