[BJDCTF2020]Easy MD5 1

相关知识点

  • md5(string, raw)

    phpmd5()用于计算字符串的 MD5 散列。

    参数string为需要计算的字符串,为必填选项;

    参数raw为规定十六进制或者二进制的输出格式。当raw为TRUE:输出格式为16字符二进制,当raw为FALSE:输出格式为32字符十六进制,5.0版本以后为raw为选填选项,默认为FALSE,因为为TRUE时浏览器解析会出现乱码。

  • 在SQL中的绕过

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

      在该语句中,前端页面要求我们将传入的pass转化为以16字符二进制为格式的md5值,如果没有md5加密的话,我们很容易想到使用' or 'xxxx来让绕过该SQL语句,由于该地方有加密操作,所以直接使用or是不行的,我们要用到字符串ffifdyop,其加密后的二进制格式为'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c 这是为数不多的转换为16字符二进制后带or的,这样就实现了该SQL语句的绕过。详细可以参考:https://blog.csdn.net/March97/article/details/81222922

    2. $a != $b && md5($a)==md5($b)
      

      我们分析一下该句话的意思,它要我们传入两个值a,b,且a和b明文不相同但是md5加密后就相同,这里可以使用科学计数法和数组来绕过。

      科学计数法。在经过MD5加密后是0exxxxxx形式的字符就被认定为科学计数法,即表示0×10^xxxxxx,当然结果还是0,可以被加密为科学计数法的字符串有以下几个:QNKCDZO240610708s155964671as214587387as214587387a s878926199a

      数组。在php中,md5无法数组加密,当遇到数组时会返回NULL,所以我们对两个不同的数组进行md5后的值都为NULL,即相等

靶场实操

随便提交数据并且抓包得:

在这里插入图片描述

在数据包中发现了该语句:

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

使用ffifdyop绕过该语句,得到页面:

在这里插入图片描述

并且在其原始页面代码中存在以下代码:

在这里插入图片描述

紧接着我们以GET方式提交a,b,页面跳转到了另一个页面并且提示以POST方式提交另外两个参数,其绕过方式和a,b一样:

在这里插入图片描述

POST这两个参数得到flag:

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丙戌年1101

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值