1. 程式人生 > 資料庫 >05day_sql _基於client-ip、X-forworded-for注入(4)

05day_sql _基於client-ip、X-forworded-for注入(4)

程式碼文字

<?php
header("Content-type:text/html;charset=utf-8");
$link = mysqli_connect('localhost','root','root','security');
//獲取IP https://www.cnblogs.com/rendd/p/6183094.html
function ip() {
    //strcasecmp 比較兩個字元,不區分大小寫。返回0,>0,<0。
    if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
        $ip = getenv('HTTP_CLIENT_IP');
    } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
        $ip = getenv('HTTP_X_FORWARDED_FOR');
    } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
        $ip = getenv('REMOTE_ADDR');
    } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    // $res =  preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
    return  $ip;
}
@$ip = ip();
// $sqlinsert = "insert into access (ip) values ('$ip')";
// mysqli_query($link,$sqlinsert);
$sql = "select * from uagents where ip_address = '$ip'";
echo $sql;
echo '<br>-------------<br>';
$result = mysqli_query($link,$sql);
if ($row = mysqli_fetch_assoc($result)) {
    echo '您的ip是:'.@$row['ip_address'];
}else{
    echo '您的ip沒有記錄';
}
mysqli_close($link);
?>

分析

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
HTTP_REMOTE_ADDR是不可控的除非是掛代理,所以不能控制HTTP_REMOTE_ADDR,我們便從第一排判斷切入,發現CLIENT-IP是可控的,由此進行抓包分析,在包裡面加上client-ip並給他賦值
在這裡插入圖片描述
此時如果是盲注的話就用order by 查詢裡面有多少個欄位,然後進入注入

把此sql語句放在資料庫中執行,發現有四個欄位,而ip_address所在的第三個欄位就是我們可以注入的點,所以在這裡進行注入
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
然後在burp中進行驗證
在這裡插入圖片描述

解決了client-ip,現在從X-forworded-for注入
方式與client-ip一樣,但是要把client-ip改為X-forworded-for即可得出結果

在這裡插入圖片描述
只要是HTTP開頭的都是可控的

如何避免sql注入就帶入正則表示式,符合的話就返回結果。否則的話就不返回

//正則,返回$res,否則就沒有含義啦
//匹配數字或者.,最少7次,最多15次 比如:1.1.1.1 就是七次;111.111.111.111就是15次
$res =  preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
return  $res;

設定好正則後進行測試

在這裡插入圖片描述
在這裡插入圖片描述

由此可得,如果ip沒有正則那麼此處就存在注入