1. 程式人生 > >常見的sql注入環境搭建

常見的sql注入環境搭建

常見的sql注入環境搭建

By : Mirror王宇陽

Time:2020-01-06

PHP+MySQL摘要

    $conn = new mysqli('資料庫伺服器','username','password','database');
    $conn = mysqli_connect('資料庫伺服器','username','password','database');
    // 引數內容可以單獨設定為一個變數引用
    $sql = "*****";//sql命令
    mysqli_query($conn,$sql);
    // 函式返回true/false
    $sql = "***1;";
    $sql .= "***2;";
    $sql .= "****;";//多條sql之間用分號間隔 
    mysqli_multi_query($conn,$sql);//執行多條sql
    mysqli_select_db(connect,db_name);//查詢db_name庫
    or die();//錯誤資訊控制輸出函式 die()會輸出資訊並退出當前指令碼
    mysqli_error();//返回報錯資訊

常規回顯注入

回顯注入型別是指我們的查詢內容會被應用回顯到頁面中;一般情況下回顯注入回利用UNION聯合函式來測試是否存在注入“ union select ……

<?php
echo '<h1>';
echo 'SQL常規回顯注入環境';
echo '</h1>';

$conn=mysqli_connect('127.0.0.1', 'root', 'root');// 連線mysql
if (!$conn){//判斷連線是否成功
   echo '連線MySQL發生錯誤:'.mysqli_error($conn);
}else{
   echo '成功連線MySQL!';
}
echo '<hr>';
// mysqli_select_db() -- 查詢庫,or die(str) -- 上一個函式執行錯誤則輸出str
mysqli_select_db($conn, 'text') or die ("無法正確連線到資料庫!");
// mysqli_query() -- 執行sql命令
// set names utf-8 -- 寫入資料庫採用的編碼(utf-8)
mysqli_query($conn, 'set names utf-8');

// 接收引數text
if(isset($_GET['text'])){
    $text=$_GET['text'];
}

// 拼接sql語句並執行
$sql="SELECT * FROM admin WHERE uid='$text' LIMIT 0,1";
echo 'SQL拼接結果:'.$sql;
echo '<hr>';
// 執行sql語句並返回結果
$result=mysqli_query($conn, $sql);
$row=mysqli_fetch_array($result, MYSQLI_BOTH);
if ($row){ //回顯結果   
    echo '<table>';
    echo '<tr>';
    echo '<td>UID</td><td>NAME</td><td>PASS</td>';
    echo '</tr><tr>';
    echo '<td>'.$row['uid'].'</td>';
    echo '<td>'.$row['name'].'</td>';
    echo '<td>'.$row['pass'].'</td>';
    echo '</tr>';
    echo '</table>';
}
?>
' union select 1,database(),version(),4; -- +

報錯注入

報錯注入型別是泛指應用頁面不返回內容資料,無法從回顯結果獲得資訊;但是一般應用都會保留SQL的查詢報錯mysqli_error() 通過“extractvalue UpdateXml foot”等函式來查詢,但是無法查詢到結果並會通過報錯的方式返回結果。

<?php
echo '<h1>';
echo 'SQL報錯注入環境';
echo '</h1>';
$conn=mysqli_connect('127.0.0.1', 'root', 'root');// 連線mysql
if (!$conn){//判斷連線是否成功
   echo '連線MySQL發生錯誤:'.mysqli_error($conn);
}else{
   echo '成功連線MySQL!';
}
echo '<hr>';
// mysqli_select_db() -- 查詢庫,or die(str) -- 上一個函式執行錯誤則輸出str
mysqli_select_db($conn, 'text') or die ("無法正確連線到資料庫!");
// mysqli_query() -- 執行sql命令
// set names utf-8 -- 寫入資料庫採用的編碼(utf-8)
mysqli_query($conn, 'set names utf-8');

if(isset($_GET['text'])){
    $text=$_GET['text'];// 接收引數text
}
    $sql  = "SELECT * FROM admin WHERE uid = '$text';";
    echo $sql."<hr>";
    $result = mysqli_query($conn,  $sql ) 
    or die( '<pre>' . mysqli_error($conn) . '</pre>');
     //mysqli_error -- 返回最近呼叫函式的最後一個錯誤描述


    $row=mysqli_fetch_array($result, MYSQLI_BOTH);  
    if($row){
        echo '<table>';
        echo '<tr>';
        echo '<td>UID</td><td>NAME</td><td>PASS</td>';
        echo '</tr><tr>';
        echo '<td>'.$row['uid'].'</td>';
        echo '<td>'.$row['name'].'</td>';
        echo '<td>'.$row['pass'].'</td>';
        echo '</tr>';
        echo '</table>';
        
    }


?> 
' and updatexml(1,concat(0x7e,database(),0x7e,version()),1); -- +

盲注

盲注型別泛指無法利用回顯測試等情況,進行的一種sql注入測試方法。

盲注主要分為兩種:

  • 布林盲注:通過判斷頁面響應確定是否正確的布林sql拼接。
  • 時間盲注:通過sql查詢的時間延遲sleep函式來測定構造的布林sql是否成立。
<?php
echo '<h1>';
echo 'SQL常規盲注環境';
echo '</h1>';
$conn=mysqli_connect('127.0.0.1', 'root', 'root');// 連線mysql
if (!$conn){//判斷連線是否成功
   echo '連線MySQL發生錯誤:'.mysqli_error($conn);
}else{
   echo '成功連線MySQL!';
}
echo '<hr>';
// mysqli_select_db() -- 查詢庫,or die(str) -- 上一個函式執行錯誤則輸出str
mysqli_select_db($conn, 'text') or die ("無法正確連線到資料庫!");
// mysqli_query() -- 執行sql命令
// set names utf-8 -- 寫入資料庫採用的編碼(utf-8)
mysqli_query($conn, 'set names utf-8');

if(isset($_GET['text'])){
    $text=$_GET['text'];// 接收引數text
}
    $sql  = "SELECT * FROM admin WHERE uid = '$text';";
    echo $sql."<hr>";
    $result = mysqli_query($conn,  $sql ) ;

    $row=mysqli_fetch_array($result, MYSQLI_BOTH);  
    if($row){
        echo '查詢結果存在!';
        // echo '查詢完成';
    } else {
        echo '查詢結果不存在!';
        // echo '查詢完成';
    }
/*
    如上原始碼,當echo返回結果為第一類情況則適用布林盲注的方法不斷的猜結
    當echo返回結果為第二類情況則適用時間盲注,通過時間延遲的方式來判斷布林結果並不斷的猜解
*/
?> 
  • 布林盲注測試
' or left(database(),2)='te'; -- +

  • 時間盲注測試
if(ascii(substr(database(),1,1))='t',1,sleep(10)); -- +

寬位元組注入

環境構造注意:該注入環境要求mysql資料庫採用GBK編碼;寬位元組注入與HTML頁面編碼是無關的,即HTML頁面是UTF-8編碼,只要mysql是GBK都可以存在寬位元組注入;

參考文章:PHP寬位元組注入 淺談對寬位元組注入的認知

<?php
echo '<h1>';
echo 'SQL寬位元組注入環境';
echo '</h1>';

$conn=mysqli_connect('127.0.0.1', 'root', 'root');// 連線mysql
if (!$conn){//判斷連線是否成功
   echo '連線MySQL發生錯誤:'.mysqli_error($conn);
}else{
   echo '成功連線MySQL!';
}
echo '<hr>';
// mysqli_select_db() -- 查詢庫,or die(str) -- 上一個函式執行錯誤則輸出str
mysqli_select_db($conn, 'text') or die ("無法正確連線到資料庫!");
// mysqli_query() -- 執行sql命令
// set names utf-8 -- 寫入資料庫採用的編碼(utf-8)
mysqli_query($conn, 'set names gbk');

// 接收引數text
if(isset($_GET['text'])){
    $text=$_GET['text'];
}

// 拼接sql語句並執行
$sql="SELECT * FROM admin WHERE uid='$text' LIMIT 0,1";
echo 'SQL拼接結果:'.$sql;
echo '<hr>';
// 執行sql語句並返回結果
$result=mysqli_query($conn, $sql);
$row=mysqli_fetch_array($result, MYSQLI_BOTH);
if ($row){ //回顯結果   
    echo '<table>';
    echo '<tr>';
    echo '<td>UID</td><td>NAME</td><td>PASS</td>';
    echo '</tr><tr>';
    echo '<td>'.$row['uid'].'</td>';
    echo '<td>'.$row['name'].'</td>';
    echo '<td>'.$row['pass'].'</td>';
    echo '</tr>';
    echo '</table>';
}
?>

登入框注入

登入框注入泛指sql直接無任何的過濾直接拼接使用者名稱和密碼來從資料庫中直接查詢結果並實現登入等系列功能;攻擊者利用這一缺陷,直接構造一個sql之後可以越過密碼的確認,也就是俗稱的萬能密碼“admin '--+

<!DOCTYPE html>
<html>
    <head>
        <title>SQL_login注入測試</title>
        <meta charset="utf-8"/>
    </head>
    
    <body>
        <form action="./sql_login.php" method="post">
            <div>
                使用者名稱:<input type="text" name="name" />
            </div>
            <div>
                密碼:<input type="password" name="pass" />
            </div>
            <input type="submit" value="提交" />
        </form>
        <div>
            <?php
                $conn=mysqli_connect('127.0.0.1', 'root', 'root');// 連線mysql
                if (!$conn){//判斷連線是否成功
                   echo '連線MySQL發生錯誤:'.mysqli_error($conn);
                }else{
                   echo '成功連線MySQL!';
                }
                echo '<hr>';
                // mysqli_select_db() -- 查詢庫,or die(str) -- 上一個函式執行錯誤則輸出str
                mysqli_select_db($conn, 'text') or die ("無法正確連線到資料庫!");
                // mysqli_query() -- 執行sql命令
                // set names utf-8 -- 寫入資料庫採用的編碼(utf-8)
                mysqli_query($conn, 'set names utf-8');
                
                // 接收引數name pass
                
                $name=$_POST['name'];
                $pass=$_POST['pass'];
                // echo $name . "~" . $pass;
                
                // 拼接sql語句並執行
                $sql="SELECT * FROM admin WHERE name='$name' and pass='$pass' LIMIT 0,1";
                echo 'SQL拼接結果:'.$sql;
                echo '<hr>';
                // 執行sql語句並返回結果
                if($result=mysqli_query($conn, $sql)){
                    $row=mysqli_fetch_array($result, MYSQLI_BOTH);
                    if ($row){ //回顯結果   
                        echo '<table>';
                        echo '<tr>';
                        echo '<td>UID</td><td>NAME</td><td>PASS</td>';
                        echo '</tr><tr>';
                        echo '<td>'.$row['uid'].'</td>';
                        echo '<td>'.$row['name'].'</td>';
                        echo '<td>'.$row['pass'].'</td>';
                        echo '</tr>';
                        echo '</table>';
                    } else {
                    echo "使用者名稱或密碼錯誤";
                    }
                }
            ?>
        </div>
    </body>
</html>

admin'; -- +

相關推薦

常見sql注入環境搭建

常見的sql注入環境搭建 By : Mirror王宇陽 Time:2020-01-06 PHP+MySQL摘要 $conn = new mysqli('資料庫伺服器','username','password','database')

本地搭建簡單SQL注入環境

      首先本地要有一個wamp server,因為SQL注入涉及到與資料庫互動,所以先從搭建測試資料庫開始。       開啟mysql console,輸入root賬戶密碼登陸。建立一個數據庫,並命名為fake,命令如下: create databa

常見sql注入的防範總結

在平時的開發過程中,我們可能很少會刻意的去為專案做一個sql注入的防範,這是因為你可能因為使用了某些框架,而無意間已經有了對應sql注入的一些防範操作(比如mybatis使用#{XX}傳參,屬於預編譯防

搭建sqli-labs環境來練習SQL注入

sqli-labs是什麼 SQLI-LABS是一個學習SQL注入的平臺: 基於錯誤的注入 (Union Select) String 字元型 Intiger 數字型 基於錯誤的注入 (基於雙注入) 盲注: 1.基於布林型的 2.基於時間

搭建DVWA測試環境SQL注入之SQLmap入門

DVWA是一款滲透測試的演練系統,在圈子裡是很出名的。如果你需要入門,並且找不到合適的靶機,那我就推薦你用

滲透測試漏洞平臺DVWA環境安裝搭建及初級SQL注入

一:簡介       DVWA(Damn Vulnerable Web Application)是一個用來進行安全脆弱性鑑定的PHP/MySQL Web應用,旨在為安全專業人員測試自己的專業技能和工具提供合法的環境,幫助web開發者更好的理解web應用安全防範的過程。  

[經驗技巧] “php+mysql+apache”環境搭建及"手動SQL註入",20180527-0

版本 lin AC 旗艦 分號 正常 HERE sele primary [經驗技巧] “php+mysql+apache”環境搭建及"手動SQL註入" 1.“php+mysql+apache”環境搭建 環境載體:虛擬機Window7 Service Pack 1

Spark SQL 筆記(3)——Spark 環境搭建

1 local 模式 直接執行即可 2 Standalone 模式 和 Hadoop/HDFS 的架構類似 /home/hadoop/apps/spark-2.1.3-bin-2.6.0-cdh5.7.0/conf 2.1 spark-env.sh SPARK_MA

NS3環境搭建常見問題

ns3安裝常見問題 ./waf configure -d debug --enable-sudo --enable-examples --enable-tests 版本17以後yum都遷移到在dnf下,更新軟體源需要更新源, 1. 安裝

Win7雙機除錯環境搭建常見問題

轉:http://www.16boke.com/article/detail/175 環境:   主機:Win7 虛擬機器:VMware 11.1.0 build-2496824 虛擬機器內作業系統(又稱GuestOS):Win7 WinDbg:適合除錯機的相應位數

大資料入門環境搭建整理、大資料入門系列教程合集、大資料生態圈技術整理彙總、大資料常見錯誤合集、大資料的離線和實時資料處理流程分析

本篇文章主要整理了筆者學習大資料時整理的一些文章,文章是從環境搭建到整個大資料生態圈的常用技術整理,環境希望可以幫助到剛學習大資料到童鞋,大家在學習過程中有問題可以隨時評論回覆! 大資料生態圈涉及技術: Hadoop、MapReduce、HDFS、Hive、Hbase、Spark、Scala

環境搭建——hadoop常見埠配置

HDFS埠 引數 描述 預設 配置檔案 例子值 fs.default.name namenode namenode RPC互動埠 8020 c

AndroidStudio環境搭建筆記---常見問題解決辦法

Android開發環境搭建 主要是根據老師給的“開發環境配置.pdf”進行操作,其中遇到了幾個問題 1、剛開始進去的時候有個gradle sync的錯誤,然後看了下專案資料夾下的檔案gradle-wrapper.properties,發現 #Sun Sep 0

Eclipse C/C++ Python環境搭建常見問題解決

一、Java JDK 安裝Java JDK比較簡單,直接到Java SE Downloads頁面下載相應的軟體版本進行安裝即可。 二、Eclipse的安裝 下載完成後,點選檔案進行安裝。建議選第二個選項,我選的第三個,各種問題。    

sql注入常見的報錯資訊

sql注入是我們常見的ctf的web型別題目,因此我們在做這類題時經常會在頁面上返回錯誤資訊,因此熟悉一些常見的sql注入資訊是很重要的,下面我介紹一些自己常遇到的mysql報錯資訊。 我們在頁面上返回的錯誤資訊不僅僅只有mysql返回的,可能還有伺服器返回的,因此我僅

CVE-2018-1111漏洞復現-環境搭建與dhcp命令注入

0×01 前言 2018年5月,在Red Hat Enterprise Linux多個版本的DHCP客戶端軟體包所包含的NetworkManager整合指令碼中發現了命令注入漏洞(CVE-2018-1111),該漏洞目前已經進行了修補。攻擊者可以通過本地網路上的惡意DHCP伺服器或使用惡意的虛假DHCP響應

spark sql scala 開發環境搭建 以及必要jar包匯入

1. scala 環境安裝及安裝 (官網下載) 2.檢驗 scala 是否安裝成功 3.安裝 scala 整合開發環境 IDEA (官網自行下載安裝) 4.在 IDEA 上 安裝 scal

MySQL環境搭建SQL查詢語句練習

前言 這個學期有資料庫原理這門課,其中很重要的一個部分就是SQL查詢語句的練習。但是自己手寫的查詢語句如果不測試的話是不知道是否正確的,而也不可能指望老師會檢查每個人的查詢語句的正確性。所以只能自力更生,親自實踐,測試查詢語句的正確性。 MySQL環境搭建

Web常見安全漏洞-SQL注入

    SQL注入攻擊(SQL Injection),簡稱注入攻擊,是Web開發中最常見的一種安全漏洞。 可以用它來從資料庫獲取敏感資訊,或者利用資料庫的特性執行新增使用者,匯出檔案等一系列惡意操作, 甚至有可能獲取資料庫乃至系統使用者最高許可權。 而造成SQL注入的原

防止常見XSS 過濾 SQL注入 JAVA過濾器filter

XSS : 跨站指令碼攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故將跨站指令碼攻擊縮寫為XSS。惡意攻擊者往Web頁面裡插入惡意html程式碼,當用戶瀏覽該頁之時,嵌入其中Web裡