web16 備份是個好習慣
阿新 • • 發佈:2021-02-11
一、得到原始碼
根據提示,是關於原始碼洩露的題,直接dirsearch掃描得到
訪問http://114.67.246.176:11039/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); //1
echo md5($key2); //2
if(md5($key1) == md5($key2) && $key1 !== $key2){
echo $flag."取得flag";
}
?>
二、分析
理解幾個函式
strstr(
a
,
a,
a,b) 取剩餘
str_replace() 替換
parse_str() 解析變數
要想得到flag,得通過傳參使parse_str()解析處
k
e
y
1
,
key1,
key1,key2兩個變數,且滿足:
md5(
k
e
y
1
)
=
=
m
d
5
(
key1) == md5(
key1)==md5(key2) && $key1 !== $key2
思路一:弱md5碰撞
s155964671a
s214587387a
s214587387a
…
md5()後以0開頭,弱型別比較相等,原值強型別比較不等思路二、md5()中的引數為陣列時函式報錯
三、構造payload
對應payload
1、
?kekeyy1=s155964671a&kekeyy2=s214587387a
//內嵌key是繞過str_replace()
得到flag
2、
?kekeyy1[]=[a]&kekeyy2[]=[1]