原来服务器是这样知道我的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…完美复现了我当时被警告的情况。 代码上面贴了,其实就是几个变量就可以知道客户端的信息了。

总结

挖洞的时候

  1. 挂代理
  2. sql注入的时候关键字绕过
经验分享 程序员 微信小程序 职场和发展