BUGKU-WEB 备份是个好习惯

题目描述

题目截图如下:
在这里插入图片描述

进入场景看看:
在这里插入图片描述

解题思路

  • 看源码
  • 看提示:备份是个好习惯
  • 扫描目录
  • md5弱比较

相关工具

  • 御剑
  • md5解密:https://www.somd5.com/

解题步骤

  1. 看到的这串字符,有点像md5?
d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e

但是有没有发现这段代码是两段一样的:

d41d8cd98f00b204e9800998ecf8427e

在这里插入图片描述
结果为NULL,也就是说这是NULL的MD5值。

  1. 使用御剑进行目录扫描

在这里插入图片描述
发现存在一个.bak的备份文件(备份文件一般都是.bak或者.swp):

http://114.67.175.224:11263/index.php.bak

下载后使用记事本查看一下内容,可以看到是一个php的代码:
在这里插入图片描述

<?php
/*** Created by PhpStorm.* User: Norse* Date: 2017/8/6* Time: 20:22
*/include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);
$str = str_replace('key','',$str);
parse_str($str);
echo md5($key1);echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){echo $flag."取得flag";
}
?>

此代码是一个简单的PHP脚本,主要功能是接收URL参数并进行处理。

  • 首先,通过include_once语句包含了一个名为"flag.php"的文件。该文件应该包含了一个变量$flag,存储着一个标志(flag)。

  • 然后,通过ini_set函数将PHP的错误显示设置为0,即不显示错误信息。

  • 接下来,代码从$_SERVER['REQUEST_URI']中获取URL中的参数部分,并去掉了第一个字符(‘?’)。然后使用str_replace函数将参数中的’key’替换为空字符串。接着使用parse_str函数将参数解析为变量。

  • 然后,代码使用md5函数对$key1$key2进行哈希运算,并通过echo语句输出结果。

  • 最后,代码使用条件语句判断$key1$key2的哈希值是否相等,并且不等于$key1$key2本身。如果满足条件,则通过echo语句输出$flag变量的值和一段文字。

总体来说,此代码通过URL参数传递两个值,并比较它们的哈希值,如果满足md5相同且key不同,则输出一个标志(flag)。


现在关键得到flag,需不同的key1和key2的md5值比较相等(之前解密得到是一个空密码,所以这是提示)。知识点:【md5弱比较】,见后文的【新知识点】,可以使用kkeyey绕过,他会让我们的kkeyey变为key:

方式一:利用==比较漏洞

  • PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

  • 攻击者可以利用这一漏洞,通过输入一个经过哈希后以”0E”开头的字符串,即会被PHP解释为0,如果数据库中存在这种哈希值以”0E”开头的密码的话,他就可以以这个用户的身份登录进去,尽管并没有真正的密码。

记录一些MD5值:

纯数字类:s878926199a
0e545993274517709034328855841020s155964671a
0e342768416822451524974117254469s214587387a
0e848240448830537924465865611904s214587387a
0e848240448830537924465865611904s878926199a
0e545993274517709034328855841020s1091221200a
0e940624217856561557816327384675s1885207154a
0e509367213418206700842008763514s1502113478a
0e861580163291561247404381396064s1885207154a
0e509367213418206700842008763514s1836677006a
0e481036490867661113260034900752s155964671a
0e342768416822451524974117254469s1184209335a
0e072485820392773389523109082030s1665632922a
0e731198061491163073197128363787s1502113478a
0e861580163291561247404381396064s1836677006a
0e481036490867661113260034900752s1091221200a
0e940624217856561557816327384675s155964671a
0e342768416822451524974117254469s1502113478a
0e861580163291561247404381396064s155964671a
0e342768416822451524974117254469s1665632922a
0e731198061491163073197128363787s155964671a
0e342768416822451524974117254469s1091221200a
0e940624217856561557816327384675s1836677006a
0e481036490867661113260034900752s1885207154a
0e509367213418206700842008763514s532378020a
0e220463095855511507588041205815s878926199a
0e545993274517709034328855841020s1091221200a
0e940624217856561557816327384675s214587387a
0e848240448830537924465865611904s1502113478a
0e861580163291561247404381396064s1091221200a
0e940624217856561557816327384675s1665632922a
0e731198061491163073197128363787s1885207154a
0e509367213418206700842008763514s1836677006a
0e481036490867661113260034900752s1665632922a
0e731198061491163073197128363787s878926199a
0e545993274517709034328855841020大写字母类:
QLTHNDT
0e405967825401955372549139051580QNKCDZO
0e830400451993494058024219903391EEIZDOI
0e782601363539291779881938479162TUFEPMC
0e839407194569345277863905212547UTIPEZQ
0e382098788231234954670291303879UYXFLOI
0e552539585246568817348686838809IHKFRNS
0e256160682445802696926137988570PJNPDWY
0e291529052894702774557631701704ABJIHVY
0e755264355178451322893275696586DQWRASX
0e742373665639232907775599582643DYAXWCA
0e424759758842488633464374063001GEGHBXL
0e248776895502908863709684713578GGHMVOE
0e362766013028313274586933780773GZECLQZ
0e537612333747236407713628225676NWWKITQ
0e763082070976038347657360817689NOOPCJF
0e818888003657176127862245791911MAUXXQC
0e478478466848439040434801845361MMHUWUV
0e701732711630150438129209816536

需要用到的一个kkeyey:

?kkeyey1=MMHUWUV&kkeyey2=MAUXXQC

在这里插入图片描述

方式二:md5()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。

?kkeyey1[]=no&kkeyey2[]=so

在这里插入图片描述

得到Flag

flag{c98558c4bae6bb11a218f22a53288972}

在这里插入图片描述

新知识点

  • md5强比较&弱比较
    弱比较:使用两个 ‘’==‘’ 比较,只比较值,不比较类型
    强比较:使用三个 ‘’===‘’ 比较,比较值,也比较类型

a==b 将a,b的值转换成同类型再比较值
a===b 先判断a,b类型,若相同,则比较值,若不相同,则返回false

在这里插入图片描述

  • PHP strstr() 函数

有用的话,请点赞收藏评论,帮助更多的同学哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2804736.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【PCL】(十二)使用ConditionalRemoval或RadiusOutlierRemoval滤波器对点云进行滤波

&#xff08;十二&#xff09;使用ConditionalRemoval 或 RadiusOutlierRemoval滤波器对点云进行滤波 RadiusOutlierRemove滤波器删除PointCloud中在指定半径的邻域范内&#xff0c;邻点没能达到指定数量的点。下图中&#xff0c;如果指定了邻点数为1&#xff0c;则黄色点将从…

亿道丨三防平板电脑厂家推荐丨三防平板PAN智能化赋能

随着科技的不断进步和人们对智能化产品的需求日益增长&#xff0c;三防平板迎来了智能化赋能的时代。通过融合创新科技&#xff0c;三防平板实现了更高的性能、更智能的功能以及更广泛的应用场景&#xff0c;引领着未来的发展潮流。 一、智能化技术提升性能 随着技术的进步&…

Nginx网络服务四-----日志、Nginx压缩和ssl

1.自定义访问日志 如果访问出错---404&#xff0c;可以去看error.log日志信息 访问日志是记录客户端即用户的具体请求内容信息&#xff0c;而在全局配置模块中的error_log是记录nginx服务器运行时的日志保存路径和记录日志的level&#xff0c;因此两者是不同的&#xff0c;而且…

openssl 生成nginx自签名的证书

1、命令介绍 openssl req命令主要的功能有&#xff0c;生成证书请求文件&#xff0c; 查看验证证书请求文件&#xff0c;还有就是生成自签名证书。 主要参数 主要命令选项&#xff1a; -new :说明生成证书请求文件 -x509 :说明生成自签名证书 -key :指定已…

计算机网络面经-从浏览器地址栏输入 url 到显示主页的过程?

大概的过程比较简单&#xff0c;但是有很多点可以细挖&#xff1a;DNS解析、TCP三次握手、HTTP报文格式、TCP四次挥手等等。 DNS 解析&#xff1a;将域名解析成对应的 IP 地址。TCP连接&#xff1a;与服务器通过三次握手&#xff0c;建立 TCP 连接向服务器发送 HTTP 请求服务器…

JS基础(一)

一 JS概述 1. 历史 1995年 JS出现在网景浏览器中 1996年 IE也开始出现了JS 1997年 指定了JS的标准规范ECMAScript 目前是ES6 2009年 JS开始向后端发展&#xff0c;出现了Node.js 二 JS入门 1. JS的运行方式 1. 内部写法 <script>J…

查看navicat保存的数据库连接密码

背景 经常使用navicat的朋友可能会碰到忘记数据库连接密码的情况&#xff0c;自然会想到navicat连接配置中就保存了密码。 个人经验&#xff0c;按以下步骤可查看密码明文 本人在mac上使用的navicat版本 1&#xff0c;导出connection_local.ncx 点击OK导出保存为connection_l…

iOS面试:4.多线程GCD

一、多线程基础知识 1.1 什么是进程&#xff1f; 进程是指在系统中正在运行的一个应用程序。对于电脑而已&#xff0c;你打开一个软件&#xff0c;就相当于开启了一个进程。对于手机而已&#xff0c;你打开了一个APP&#xff0c;就相当于开启了一个进程。 1.2 什么是线程&am…

【电子书】人工智能

资料 wx&#xff1a;1945423050&#xff0c;备注来源和目的 个人整理了一些互联网电子书 人工智能 Julia机器学习核心编程&#xff1a;人人可用的高性能科学计算.epubKeras深度学习实战.epubMATLAB图像与视频处理实用案例详解.epubMATLAB金融算法分析实战&#xff1a;基于机器…

Java学习笔记2024/2/23

今日内容 抽象类 接口 内部类 教学目标 能够写出抽象类的格式能够写出抽象方法的格式能说出抽象类的应用场景写出定义接口的格式写出实现接口的格式说出接口中成员的特点能说出接口的应用场景能说出接口中为什么会出现带有方法体的方法能完成适配器设计模式 第一章 抽象类…

c语言--typedef关键字

目录 一、typedef关键字是用来干嘛的&#xff1f;二、用法 一、typedef关键字是用来干嘛的&#xff1f; typedef 是⽤来类型重命名的&#xff0c;可以将复杂的类型&#xff0c;简单化。 二、用法 比如&#xff0c;你觉得 unsigned int 写起来不方便&#xff0c;如果能写成 u…

[网鼎杯 2020 白虎组]PicDown

网鼎杯的&#xff0c;这应该是送分的那种 界面很普通&#xff0c;就长这样。源代码也没什么&#xff0c;随便输入试试 出现了"/page?url1" 这可能是ssrf题目。 但是尝试了一些payload发现下载了一张图片&#xff0c;并且url里自动补齐了127.0.0.1。使用记事本打开…

MySQL数据库基础(十三):关系型数据库三范式介绍

文章目录 关系型数据库三范式介绍 一、什么是三范式 二、数据冗余 三、范式的划分 四、一范式 五、二范式 六、三范式 七、总结 关系型数据库三范式介绍 一、什么是三范式 设计关系数据库时&#xff0c;遵从不同的规范要求&#xff0c;设计出合理的关系型数据库&…

SQL Server——建表时为字段添加注释

在 MySQL 中&#xff0c;新建数据库表为字段添加注释可以使用 comment 属性来实现。SQL Server 没有 comment 属性&#xff0c;但是可以通过执行 sys.sp_addextendedproperty 这个存储过程添加扩展属性来实现相同的功能。 这个存储过程的参数定义如下&#xff1a; exec sys.s…

Shell变量类型和运算符

一、Shell变量类型 1、变量类型 Shell的3种变量&#xff1a; &#xff08;1&#xff09;局部变量&#xff1a;除了本地变量外&#xff0c;还有shell脚本中定义的变量。 &#xff08;2&#xff09;全局变量&#xff1a;和局部变量相对。比如环境变量就是一种全局变量。 &am…

协议的概念+本质+作用+最终表现形式,网络问题(技术+应用+解决的协议+存在原因),主机的对称性

目录 协议 概念 示例 -- 摩斯密码 本质 作用 网络问题 引入 技术问题 应用问题 主机的对称性 问题对应的协议 问题出现的原因 理解协议(代码层面) 举例 -- 快递单 协议的最终表现形式 协议被双方主机认知的基础 协议 概念 协议是在计算机通信和数据传输中规定通…

Docusaurus框架——快速搭建markdown文档站点介绍sora

文章目录 ⭐前言⭐初始化项目&#x1f496; 创建项目&#xff08;react-js&#xff09;&#x1f496; 运行项目&#x1f496; 目录文件&#x1f496; 创建一个jsx页面&#x1f496; 创建一个md文档&#x1f496; 创建一个介绍sora的文档 ⭐总结⭐结束 ⭐前言 大家好&#xff0…

关于torch.cuda.is_available() 返回False 详细说明及解决

一 cuda 环境检测失败 cuda 环境检测代码&#xff1a; import torchprint(torch.__version__) print(torch.cuda.is_available()) print(torch.version.cuda) cuda 环境检测代码执行结果如下图&#xff1a; 关键代码print(torch.cuda.is_available()) 返回 False 通常表示当…

原型设计工具Axure RP

Axure RP是一款专业的快速原型设计工具。Axure&#xff08;发音&#xff1a;Ack-sure&#xff09;&#xff0c;代表美国Axure公司&#xff1b;RP则是Rapid Prototyping&#xff08;快速原型&#xff09;的缩写。 下载链接&#xff1a;https://www.axure.com/ 下载 可以免费试用…

HTMLElement.click()的回调触发踩坑

先看看以下代码 const el document.getElementById("btn") el.addEventListener("click", () > {Promise.resolve().then(() > console.log("microtask 1"));console.log("1"); }); el.addEventListener("click", (…