1. 程式人生 > 實用技巧 >BUUCTF-[GXYCTF2019]BabySQli 1詳解

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

得到flag

參考連結