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

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.xdnf.cn/news/9907.html

相关文章:

  • LeetCode Hot100(矩阵)
  • 逻辑回归知识点
  • stm32 + ads1292心率检测报警设置上下限
  • 鸿蒙分辨率
  • TDengine 运维——巡检工具(安装前检查)
  • 【Redis】第3节|深入理解Redis线程模型
  • 3.1.1栈的基本概念
  • 德国GEMÜ 3020特价型号3020 25D 7 1 4P002 3600
  • Java面试:从Spring Boot到分布式系统的技术探讨
  • VirtualBox安装 Rocky
  • AI绘画:手把手带你Stable Diffusion从入门到精通(系列教程)
  • window11系统 使用GO语言建立TDengine 连接
  • LLaMaFactory - 支持的模型和模板 常用命令
  • unordered_map与map之间的区别和联系
  • SpringBoot 日志
  • ROS云课基础篇-02-C++-250529
  • 财管2 - 财务预测(内含增长率,可持续增长率)
  • [9-2] USART串口外设 江协科技学习笔记(9个知识点)
  • 20250529-C#知识:继承、密封类、密封方法、重写
  • Oracle 条件判断
  • <线段树>
  • 影楼精修-AI追色算法解析
  • FEMFAT许可的有效期限
  • 从融智学视角对决策态度进行定理级提炼,结合三标准数学建模
  • vue3: tmap (腾讯地图)using typescript
  • sudo apt-get update错误解决
  • Spring Boot+Activiti7入坑指南初阶版
  • 表单请求为什么需要进行 URL 编码?—详解application/x-www-form-urlencoded的正确用法
  • 从零开始的数据结构教程(五)​​动态规划(DP)
  • 数据结构 --- 顺序表