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

BugKu Web渗透之备份是个好习惯

启动场景后,网页显示一段字符串。

看起来像md5值,但是又过长了。

步骤一:右键查看源代码,没有发现任何异常。

步骤二:使用dirsearch去查看是否有其他可疑文件。

在终端输入:

dirsearch -u http://117.72.52.127:19983/ 

运行结果如图:

步骤三:看起来flag.php很可疑。打开查看。

页面是空的,右键查看源代码也是空的。

步骤四:再根据题目意思,说备份。那么index.php.bak这个备份文件很是可疑。于是下载下来,打开查看。内容如下:

看到这段代码,大概意思是获取请求的URI数据,之后再进行一系列的操作。然后有两个参数,key1和key2。当key1和key2的md5值相等,并且key1本身不等于key2时,可以输出flag。

那首先我们需要得到两个参数。具体如何得到,我们可以用php代码去测试下。测试代码如下:

<?php$url1 = "http:www.baidu.com?key1=4446566&key2=5555";$str1 = strstr($url1, "?");echo $str1;echo("<br>");$str2 = substr($str1,1);echo $str2;echo("<br>");$str3 = str_replace('key','',$str2); echo $str3;echo("<br>");parse_str($str3);echo("<br>");echo $key1;echo("<br>");echo $key2;echo("<br>");
?>

运行结果如下图:

虽然后面代码出错了,但是我们可以由此知道:

strstr($url1, "?")是取url1中从?开始到最后的字符串。
substr($str1,1)是从索引为1开始截取的字符串。
str_replace('key','',$str2)是将字符串中的key替换成空。

代码的具体含义如下:

include_once "flag.php";         //包含运行依次flag.php
ini_set("display_errors", 0);    //关闭错误显示
$str = strstr($_SERVER['REQUEST_URI'], '?'); //取出URI中从?开始到最后的字符串
$str = substr($str,1);           //取出str中索引1到最后的字符串
$str = str_replace('key','',$str);        //把str中的key替换成空
parse_str($str);    //解析str字符串,解析出来的参数就是URI中的传参
echo md5($key1);    //输出key1参数echo md5($key2);    //输出key2参数
if(md5($key1) == md5($key2) && $key1 !== $key2){ //如何key1和key2并不相等,但是key1和key2的md5值相等                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           echo $flag."取得flag"; //输出flag
}

因为最后我们需要key1和key2参数,去计算md5值,所以我们想到双写绕过。也就是kkeyey,这样中间的key被替换成空字符串后,外面的字符串连接起来还是key。

步骤五

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

那么我们只要找到两个字符串,md5后以“0E”开头的就行。

在网上搜了几个,我找了两个“QNKCDZO”和“240610708”。

步骤六

把找到的参数放进浏览器,使用get请求参数传递,key1和key2参数需要双写绕过,之后尝试。flag出现。

浏览器输入:http://117.72.52.127:19983/index.php?kekeyy1=QNKCDZO&kekeyy2=240610708

http://www.lryc.cn/news/2391663.html

相关文章:

  • 华为AP6050DN无线接入点瘦模式转胖模式
  • uniapp 配置本地 https 开发环境(基于 Vue2 的 uniapp)
  • 十、【核心功能篇】项目与模块管理:前端页面开发与后端 API 联调实战
  • 【大模型/MCP】MCP简介
  • [Godot][游戏开发] 如何在 Godot 中配置 Android 环境(适配新版 Android Studio)
  • Vue-Router中的三种路由历史模式详解
  • 机器学习多分类逻辑回归和二分类神经网络实践
  • 社交类网站设计:经典feed流系统架构详细设计(小红书微博等)
  • K6 是什么
  • RISC-V PMA、PMP机制深入分析
  • git常见命令说明
  • 深入解析 Tomcat 线程管理机制:从设计思想到性能调优
  • 【NebulaGraph】查询案例(七)
  • 从“刚性扩容”到“弹性供给”:移动充电服务重构配电网边际成本
  • Java与Docker容器化优化:从核心技术到生产实践
  • QT单例模式简单讲解与实现
  • Vite Vue3 配置 Composition API 自动导入与项目插件拆分
  • React从基础入门到高级实战:React 生态与工具 - React Query:异步状态管理
  • Grafana-Gauge仪表盘
  • 按照状态实现自定义排序的方法
  • 游戏引擎学习第313天:回到 Z 层级的工作
  • 论文阅读:arxiv 2024 SmoothLLM: Defending LLMs Against Jailbreaking Attacks
  • Milvus部署架构选择和Docker部署实战指南
  • 高效合并 Excel 表格实用工具
  • 【前端】Vue3 中实现两个组件的动态切换保活
  • 拉取gitlab项目
  • 树莓派(Raspberry Pi)安装Docker教程
  • 计算机视觉---YOLOv4
  • 在雄性小鼠自发脑网络中定位记忆巩固的因果中枢
  • 刷机维修进阶教程-----没有开启usb调试 如何在锁定机型的拨号界面特殊手段来开启ADB