目录
第二种 报错注入(updatexml & exctractvalue)
前言:
关于SQL注入还有好多种,前面写的都是基于mysql环境下,接下来会更新其他数据库该如何注入
但是前面的得认真观看,以及源码,运行流程,与形成
写完后将会写代码审计
预计路线
黑盒测试 -> 白盒测试(代码审计)-> 内网渗透 -> 等等,有可能会更新python写工具,也可能往二进制或者近源渗透
这上面是路线,我将会不断的更新。这样以后查资料就不会到处百度了。(博客所写,仅记录每天学习)
正文
0x01:xff头源码以及形成
<?php
$con=mysqli_connect("localhost","root","root","test");
if (mysqli_connect_errno())
{
echo "连接失败: " . 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'];
}
$result = mysqli_query($con,"select * from user where `ip`='$ip'");
if (!$result) {
printf("Error: %s\n", mysqli_error($con));
exit();
}
$row = mysqli_fetch_array($result);
echo $row['username'] . " : " . $row['password'];
echo "<br>";
?>
这里遇到了一些预定义变量了,很陌生。但是不慌~~
然而一段if语句,只是获取客户端ip,可以点击这里进行查看
getenv(' HTTP_CLIENT_IP ')是获取当前客户端的IP
如果你用代理服务器接访问的,,它记录的就是代理服务器的IP,而不是真实的用户IP
也就是说,这个ip地址可以进行伪造的
HTTP_CLIENT_IP: 获取当前客户端的IP
HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关
REMOTE_ADDR: 浏览当前页面的用户计算机的ip地址
getenv() : 获取当前系统的环境变量
$HTTP_SERVER_VARS['REMOTE_ADDR']:它是将 tcp/ip 数据包中的 ip 提取出来供参考的
获取真实ip的php代码 点击 这里
也就说,这些ip并不可以获取到真实ip
首先是if判断
如果HTTP_CLIENT_IP 存在,则赋值给 $ip
如果 HTTP_X_FORWARDED_FOR 存在,则赋值 $ip
如果 REMOTE_ADDR 存在,则赋值 $ip
否则 赋值 tcp/ip数据包(也就是握手包)中的ip,给$ip
0x02 xff注入方式
xff注入的步骤与前面的 联合查询注入一样,同意也可以使用head注入,head前面解释过了。使用的是报错函数
xff注入的两种手法
第一种 union注入
首先是使用union注入,这里需要闭合掉单引号,否则会报错
我们首先伪造个xff头,这时候我们对比2图。发现获取的ip都不一样。这时候就可以进行xff头注入
X-Forwarded-for: 127.0.0.1
1)爆出库名
首先进行and 1=1 & and 1=2判断。发现回显在意料之中,
然后再使用 order by 判断字段数即可
跟前面的一样,没啥区别,成功的爆出了库名,库名为test
这时候就是查询表名了。因为和前面的一样,所以我就不演示了,只是传参方式不一样
X-Forwarded-for: 127.0.0.1' and 1=2 union select 1,database(),3#
第二种 报错注入(updatexml & exctractvalue)
因为报错注入无需判断字段啥的,所以就直接的酱紫了
X-Forwarded-for: 127.0.0.1' and updatexml(1,concat(0x7e,(database()),0x7e),1)#
这里的话也可以使用另外一个函数 exctactvalue()
X-Forwarded-for: 127.0.0.1' and exctractvalue(1,concat(0x7e,(database()),0x7e))#
当然,这边的话报错注入有十个,记住一些常用的就好。记不住就百度
嘿嘿
文末:
似乎没啥好说的,xff和前面的一样。接下来更新数据库注入了