原来服务器是这样知道我的IP地址
前言
前几天到一个网站挖洞的时候,遇到一个非常可怕的事情。我用sql语句注入的时候,它给我弹框,显示我的ip地址,操作时间,非法的关键字等消息,像这样 我当时非常的慌,它是怎么知道我的IP地址的??连操作时间也知道?他会不会查我水表啊?一系列问题顿时浮现在我的脑中。 为了下次不出现这样的‘风险’,我决定自己写个网页,弄清楚里面的原理。
实验环境
攻击机 windows7 ip 192.168.92.128 服务器 windows10 ip 192.168.92.1
代码
alertwarning.php
<?php
header(Content-Type:text/html;charset=utf8);
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "phptest";
$tbname = "MyGuests";
$conn = mysqli_connect($servername,$username,$password,$dbname);
if(!$conn){
die("连接失败".mysqli_connect_error());
}
// 过滤id是否存在恶意sql
$id = $_GET[id];
if(preg_match("/select/i",$id)){
echo "<script>alert("系统警告!!\n1.包含恶意请求/select/\n".2.你的IP:.$_SERVER[REMOTE_ADDR].\n3.操作时间:.date("Y-m-d H:i:s",$_SERVER[REQUEST_TIME])."\nAre you a hacker?"."");</script>";
die("go away now!");
}
//查询语句,数字型
$sql = "select id,firstname,lastname from ".$tbname." where id=".$id;
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_assoc($result)){
echo "id:".$row[id]."-Name:".$row[firstname].$row[lastname]."<br>";
}
mysqli_close($conn);
?>
数据表的记录
攻击机尝试sql注入
正常查询数据 输入?id=1 and 1=1,显示数据 输入?id=1 and 1=2,不显示数据,明显存在布尔类型注入 接下来看看有没联合查询注入 查看字段数 order by 4的时候报错,很明显字段数为3 接着重头戏来了 输入union select 1,2,3 what the…完美复现了我当时被警告的情况。 代码上面贴了,其实就是几个变量就可以知道客户端的信息了。
总结
挖洞的时候
- 挂代理
- sql注入的时候关键字绕过
