[GXYCTF2019]BabySQli 1
打开实例发现是个登录页,查看源代码未发现有效信息,admin登录,显示密码错误,发现参数name
和pw
查看源代码发现base
编码
解密发现是base32
+base64
混合编码,并发现解密后的SQL语句,判断注入点为username
select * from user where username = '$name'
尝试万能密码
显示do not hack me!
,怀疑是字符被过滤
order by判断字段数,为4显示异常,确认字段数为3
尝试输出数据库语句,经过测试确认括号被过滤
查看源代码,发现确实or = | ()都被过滤了,并且注意到
if($arr[1] == "admin"){
if(md5($password) == $arr[2]){
echo $flag;
}
else{
die("wrong pass!");
}
}
这边的arr就是字段的位置,所以就是需要字段的第三个位置填入密码和后面pw传递的参数的md5加密的字符串相等
ok,那直接MD5随便加密一个密码
e10adc3949ba59abbe56e057f20f883e
构造payload
name=' UNION SELECT 1,'admin','e10adc3949ba59abbe56e057f20f883e'#&pw=123456
获得flag
flag{fb83a3ca-f885-48e4-bfdc-8630bb78f837}
tips:这道题有个坑点,就是用hacker bar不行,我在hacker bar浪费了很长的时间
标签:BabySQli,arr,name,admin,源代码,GXYCTF2019,pw From: https://www.cnblogs.com/tazmi/p/18543496