第二十二题——[BJDCTF2020]Easy MD5

本文详细介绍了如何利用Burpsuite进行SQL注入攻击,通过构造特定输入使得MD5加密后的密文形成永真条件。同时,文章还探讨了在不同场景下如何通过数组参数实现绕过检测,包括在POST请求中利用数组参数获取FLAG的方法。内容涉及网络安全、Web安全、SQL注入和数据验证等主题。
摘要由CSDN通过智能技术生成
题目地址:https://buuoj.cn/challenges

解题思路

第一步:进入题目,就一个输入框

在这里插入图片描述

第二步:使用burpsuite抓包,查看提示

在这里插入图片描述

第三步:根据提示构建输入参数

  1. 分析漏洞:输入框输入的值交给pass,再进行一次md5加密后,将密文与sql查询语句进行查询

  2. 构建参数:要形成select * from admin where password = xxx or 1的永真语句,所以md5加密后的密文要包含' or 1',根据提示,输入ffifdyop,跳转到新页面。
    在这里插入图片描述

  3. 解释1:md5(string,raw),raw的值默认不写为FALSE,结果为32位16进制的字符串,raw设置了TRUE,其结果为16位原始二进制格式的字符串。答案也不唯一,可以尝试:129581926211651571912466741651878684928

content: ffifdyop
hex: 276f722736c95d99e921722cf9ed621c(false)
raw: 'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c(true)
string: 'or'6]!r,b
content: 129581926211651571912466741651878684928
hex: 06da5430449f8f6f23dfc1276f722738
raw: \x06\xdaT0D\x9f\x8fo#\xdf\xc1'or'8
string: T0Do#'or'8
  1. 解释2:在mysql里面,在用作布尔型判断时,以1开头的字符串会被当做整型数。要注意的是这种情况是必须要有单引号括起来的,比如password=‘xxx’ or ‘1xxxxxxxxx’,那么就相当于password=‘xxx’ or 1 ,也就相当于password=‘xxx’ or true,所以返回值就是true。当然在我后来测试中发现,不只是1开头,只要是数字开头都是可以的。所以这里是password=’‘or’6xxx’,构成永真式。

第四步:来到新页面,查看提示

在这里插入图片描述

第五步:构建参数,进行绕过

此页面让我们传递两个参数a与b,且a与b的值不同但md5值相同。可以通过数值绕过,原理:md5函数不能处理数组,导致函数返回Null。而Null是等于Null的。输入?a[]=1&b[]=2来到新页面。
在这里插入图片描述

第六步:绕过检测获取flag

新页面绕过方式同理,构建数组绕过,注意这里需要使用post进行提交,且要带上上一步的a,b参数
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值