BugkuCTF-WEB题web16备份是个

知识点

ini_set — 为一个配置选项设置值
PHP ini_set用来设置php.ini的值,在函数执行的时候生效,脚本结束后,设置失效。无需打开php.ini文件,就能修改配置,对于虚拟空间来说,很方便

strstr — 查找字符串的首次出现,strstr() 函数搜索字符串在另一字符串里的第一次出现。
实例
查找 “python” 在 “I love python!” 里的第一次出现,并返回字符串的剩余部分:
echo strstr(“I love python!”,“python”);返回python!

$_SERVER[‘REQUEST_URI’] 这是取得当前URL的 路径地址 比如:
http://microsoft.com/question/469321857.html?push=core&group=1
他获得是这个路径:question/469321857.html?push=core&group=1

substr() 函数返回字符串的一部分。
echo substr(“Hello world”,6); 返回world
语法
substr(string,start,length)

str_replace — 子字符串替换,str_replace() 函数以其他字符替换字符串里的一些字符(区分大小写)。
echo str_replace(“world”,“python”,“Hello world!”); 返回Hello python!
语法:str_replace(find,replace,string,count)

parse_str — 将字符串解析成多个变量,parse_str() 函数把查询字符串解析到变量里。
实例:把查询字符串解析到变量里:

<?php parse_str("name=Bill&age=60"); echo $name."
"; echo $age; ?>

结果:
Bill
60

补充:
md5(‘240610708’) 的结果是:0e462097431906509019562988736854
md5(‘QNKCDZO’) 的结果是:0e830400451993494058024219903391

PHP 是弱类型语言,在使用 == 号时,如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。此规则也适和于 switch 语句。上述例子里的两个字符串恰好以 0e 的科学记数法开头,字符串被隐式转换为浮点数,实际上也就等效于 0×10^0 ,因此比较起来是相等的

解题流程

常用备份文件后缀:.swp,.bak
御剑扫描,发现index.php.bak文件,下载下来(若御剑扫描不出,可以通过dirsearch可以扫描出来)
在这里插入图片描述
备份文件:

<?php
/**
 * Created by PhpStorm.
 * User: Norse
 * Date: 2017/8/6
 * Time: 20:22
*/

include_once "flag.php"; //包含flag.php
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');//设变量str的值为url里?后面的字符串
$str = substr($str,1);//设str为str里第一位开始后的字符串
$str = str_replace('key','',$str);//把str里的key替换成空
parse_str($str);//把str里的字符串解析为变量
echo md5($key1);//输出md5加密的key1
echo md5($key2);//输出md5加密的key2
if(md5($key1) == md5($key2) && $key1 !== $key2){
    echo $flag."取得flag";
}
/*
ini_set — 为一个配置选项设置值
PHP ini_set用来设置php.ini的值,在函数执行的时候生效,脚本结束后,设置失效。无需打开php.ini文件,就能修改配置,对于虚拟空间来说,很方便

strstr — 查找字符串的首次出现,strstr() 函数搜索字符串在另一字符串里的第一次出现。
实例
查找 "python" 在 "I love python!" 里的第一次出现,并返回字符串的剩余部分:
echo strstr("I love python!","python");返回python!

$_SERVER['REQUEST_URI'] 这是取得当前URL的 路径地址 比如: http://American.microsoft.com/question/469321857.html?push=core&group=1
他获得是这个路径:question/469321857.html?push=core&group=1 

substr() 函数返回字符串的一部分。
echo substr("Hello world",6);  返回world
语法
substr(string,start,length)

str_replace — 子字符串替换,str_replace() 函数以其他字符替换字符串里的一些字符(区分大小写)。
echo str_replace("world","PHP","Hello world!"); 返回Hello PHP!
语法:str_replace(find,replace,string,count)

parse_str — 将字符串解析成多个变量,parse_str() 函数把查询字符串解析到变量里。
实例:把查询字符串解析到变量里:
<?php
parse_str("name=Bill&age=60");
echo $name."<br>";
echo $age;
?>
结果:
Bill
60
*/
?>

要key1和key2加密后的md5值相等,但是key1和key2不相等,想到md5绕过-------传md5值是0e开头的字符串
构造url:?key1=QNKCDZO&key2=s878926199a,页面并没有弹出flag
正确的payload:?kkeyey1=QNKCDZO&kkeyey2=s878926199a

用kkeyey而不用key的原因:
传入的参数带有key就会被替换为空,所以这里双写kkeyey来绕过,这样kkey ey即使key替换成空了一头一尾拼起来还是key
在这里插入图片描述
或者输入http://114.67.246.176:13427/index.php?kkeyey1=QNKCDZO&kkeyey2=240610708
或者输入?kekeyy1[]=1&kekeyy2[]=2(即null==null)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值