[BJDCTF2020]Easy MD5 1

一道看似难其实不的题。

然而我却琢磨了挺久。

上图:

第一反应是SQL注入,尝试一下。

SQL注入爆不出来, 但是在响应头看见了hint字样,可以用ffifdyop绕过。具体原理就是ffifdyop经过md5加密后就是276f722736c95d99e921722cf9ed621c。md5函数加密后会返回16进制字符串,就成了'or'66�]��!r,��b(没错这里就是乱码)

也就是说

select * from 'admin' where password=md5($pass,true)

会变成

select * from 'admin' where password='' or'6蒥欓!r,b'

or后面的句子第一个字母是非0打头的数字符,比如为 ‘ 1abc ’ 或者 ‘ -1bde ’都会被认为是true。

以0开头会认为是false.而mysql会把hex转换为ascii形式,所以拼接后就是

select * from 'admin' where password='' or '6xxxxx'

输入ffifdyop后就是如图所示

查看页面源码,

长这个样子。

 

关键部分在:

<!--
$a = $GET['a'];
$b = $_GET['b'];

if($a != $b && md5($a) == md5($b)){
    // wow, glzjin wants a girl friend.
-->

a不等于b,但a的md5值要等于b

典型的md5弱比较,构造payload

?a=QNKCDZO&b=s878926199a

是这个模样

利用数组

md5强比较,此时如果传入的两个参数不是字符串,而是数组,md5()函数无法解出其数值,而且不会报错,就会得到===强比较的值相等
构造:

param1[]=1&param2[]=2

即可。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值