1. 程式人生 > 其它 >web16 備份是個好習慣

web16 備份是個好習慣

技術標籤:bugku webweb

一、得到原始碼
根據提示,是關於原始碼洩露的題,直接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
flag{fbc20877d2dc3a19b2d413f62d4a270f}
2、
?kekeyy1[]=[a]&kekeyy2[]=[1]