题目:备份是个好习惯

思路分析

打开题目,看到一个字符串。

联系到题目,就猜到肯定是源代码泄露,用工具扫一下,发现了index.php.bak,验证了我的猜想,下载下来看看。

<?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";
}
?>

源码审计

关注到parse_str函数。

parse_str — 将字符串解析成多个变量

如果 string 是 URL 传递入的查询字符串(query string),则将它解析为变量并设置到当前作用域(如果提供了 result 则会设置到该数组里 )。

str_replace — 子字符串替换

str_replace(

mixed $search,

mixed $replace,

mixed $subject,

int &$count = ?

): [mixed]

该函数返回一个字符串或者数组。该字符串或数组是将 subject 中全部的 search 都被 replace 替换之后的结果。

代码逻辑分析

程序逻辑比较简单:

  1. 提取query string,并去掉?,保存为$str

  2. 使用str_replace$str中的key字符串替换成空格

  3. 使用parse_str$str中的变量解析出来

  4. 判断变量$key1$key2的md5,需要同时满足:

  • md5($key1) == md5($key2)

  • $key1 !== $key2

所以做题思路也很简单,第一步,绕过str_replace。第二步,构造字符串绕过md5值比较。

payload构造

第一步payload:?kekeyy1=a&kekeyy2=a

第二步payload:?kkeyey1=QNKCDZO&kkeyey2=240610708

字符串不相等时如何构造md5相等?

PHP中==是判断值是否相等,若两个变量的类型不相等,则会转化为相同类型后再进行比较。PHP在处理哈希字符串的时候,它把每一个以0e开头的哈希值都解析为0。

在md5加密后以0E开头

  • QNKCDZO
  • 240610708
  • s878926199a
  • s155964671a

在sha1加密后以0E开头

  • aaroZmOk
  • aaK1STfY

获取flag

BugKu之备份是个好习惯的更多相关文章

  1. http://www.bugku.com:Bugku——备份是个好习惯(http://120.24.86.145:8002/web16/)

      看了bugku的这道题,陌生又熟悉.     题目首先说[备份是个好习惯],访问网站只有一串字符,,,,,emmmmm,这句话表明人家经常做备份,所以咯,肯定在网站哪里备份有网页信息.嘻嘻   1 ...

  2. Bugku-CTF之备份是个好习惯

    Day17 备份是个好习惯 听说备份是个好习惯 http://123.206.87.240:8002/web16/

  3. Bugku web(1—35)

    1.web2 打开网页: 哈哈,其实按下F12你就会发现flag. 2.计算器 打开网页,只是让你输入计算结果,但是发现只能输入一个数字,这时按下F12,修改一下参数,使之可以输入多个数字,修改后输入 ...

  4. 个人永久性免费-Excel催化剂功能第79波-自动及手动备份功能,比Onedrive还好用

    在OFFICE365里,有个自动保存功能,可惜保存的地址是在Onedrive里,在中国国情下,备份十分卡顿,近乎难以忍受的慢.虽然现在收费性的网盘部分是可以有文件版本的备份功能,但也是繁琐且最要命的是 ...

  5. web安全之备份

    1:打开界面,一头雾水.根据题目提示"备份是个好习惯"可以想到,这应该是一个代码泄露问题.常见的网页主页index.php.那么备份文件一般是.bak文件类型.尝试下载该文件 in ...

  6. BugkuCTF WEB

    web2 打开链接,一大堆表情 查看源代码 得到 flag 文件上传测试 打开链接 选择 1 个 jpg 文件进行上传,用 burp 抓包改包 将 php 改为 jpg,发包 得到 flag 计算器 ...

  7. CTF-代码审计(2)

    1.bugku 备份是个好习惯 网址:http://123.206.87.240:8002/web16/ 进去什么都没有,题目说备份想到备份文件,所以直接再后面加个    .bak 拿到源码: < ...

  8. bugkuCTFWEB部分WP

    前言 之前做的今天整理下 这个有点乱不建议大家参考我的wp 这个主要是自己看的.部分的我做的时候打不开就没写. 练手地址:https://ctf.bugku.com 矛盾 矛盾考察的是PHP弱类型首先 ...

  9. BugkuCTF——wp(旧版)

    title: BugkuCTF--wp(旧版) date: 2020-4-25 tags: CTF,比赛 categories: CTF 比赛 Web篇 0x001-web2 解题思路: 1.直接按F ...

随机推荐

  1. python学习笔记(六)-集合

    集合是一个无序不重复元素的集.基本功能包括关系测试和消除重复元素.集合对象还支持union(联合),intersection(交),difference(差)和sysmmetric differenc ...

  2. flask项目在Linux运行

    依赖安装: 1.flask 2.flask_sqlalchemy --需要安装flask-mysqldb  安装时提示mysql_config not found ,使用:yum install my ...

  3. 如何把springboot项目部署到tomcat上

    前言: 开始以为打包springboot项目为war包丢到tomcat上的webapps下面就可以访问controller层的路径了,可是调用接口却报404的错误,而打开8080的主页,不加路径却可以 ...

  4. 【SpringBoot技术专题】「权限校验专区」Shiro整合JWT授权和认证实现

    本章介绍一下常用的认证框架Shiro结合springboot以及集合jwt快速带您开发完成一个认证框架机制. Maven配置依赖 <dependency> <groupId>o ...

  5. 从零开始学算法---二叉平衡树(AVL树)

    先来了解一些基本概念: 1)什么是二叉平衡树? 之前我们了解过二叉查找树,我们说通常来讲, 对于一棵有n个节点的二叉查找树,查询一个节点的时间复杂度为log以2为底的N的对数. 通常来讲是这样的, 但 ...

  6. windows中抓包命令,以及保存为多个文件的方法

    本文主要介绍windows中抓包命令,以及保存为多个文件的方法 说一说保存为多个文件存储数据包这个问题的由来,一般如果长时间抓包,有可能需要等上几个小时,因为这个时候抓包的内容都是存放在内存中的,几个 ...

  7. Jekins 插件Extended Choice Parameter显示Json Parameter Type遇到的问题

    在jenkins中使用Extended Choice Parameter插件用来显示自定义的多选项,尝试通过groovy script来显示,正常,但查看它的例子,发现它例子中多选是通过类型 Json ...

  8. 学习使用SignalR

    1.创建空白的控制台程序 2.添加两个NuGet包(Microsoft.AspNet.SignalR.SelfHost.Microsoft.Owin.Cors.Topshelf)Topshelf用于快 ...

  9. 洛谷1501 Tree II(LCT,路径修改,路经询问)

    这个题是一个经典的维护路径信息的题,对于路径上的修改,我们只需要把对应的链\(split\)上来,然后修改最上面的点就好,注意pushdown的时候的顺序是先乘后加 然后下传乘法标记的时候,记得把对应 ...

  10. JavaScript表单输入合法控制

    写在前面 为了提高数据输入的容错性和数据库数据的安全性,除了后端对输入的数据的逻辑判断处理,还可以前端页面高效率处理,从而提高系统的可靠性,下面是这次项目中的自己写的一些符合当时需要的控制. 账号位数 ...