BCTF Web Code–考腦洞,你能過麼?

BCTF Web Code–考腦洞,你能過麼? php

 

1)打開連接,是一張圖片 html

根據URL特色推斷多是有文件包含漏洞 算法

2) 將jpg參數修改爲index.php,查看源代碼,發現base64編碼後的代碼 編程

3)解碼後index.php的源碼 cookie

<?php dom

/** phpstorm

* Created by PhpStorm. ide

* Date: 2015/11/16 ui

* Time: 1:31 編碼

*/

header('content-type:text/html;charset=utf-8');

if(! isset($_GET['jpg']))

header('Refresh:0;url=./index.php?jpg=hei.jpg');

$file = $_GET['jpg'];

echo '<title>file:'.$file.'</title>';

$file = preg_replace("/[^a-zA-Z0-9.]+/","", $file);

$file = str_replace("config","_", $file);

$txt = base64_encode(file_get_contents($file));

echo "<img src='data:image/gif;base64,".$txt."'></img>";

/*

* Can you find the flag file?

*

*/

 

?>

提到一個config,嘗試訪問config.php,沒有用,返回內容爲空

 

4)此題腦洞在於註釋部分

 

Created by PhpStorm.

 

phpstorm會產生一個./idea文件,嘗試訪問 .idea/workspace.xml

 

獲得另外一個php文件

 

5)直接訪問文件,沒有可用信息

讀取該文件,也沒有可用信息

6)腦洞在於,根據config.php源碼,對config進行了replace替換操做,逆向思惟下將_編程config

fl3g_ichuqiu.php –> fl3gconfigichuqiu.php

讀取文件,發現能夠讀到

7)base64解碼後,獲得源代碼

<?php

/**

* Created by PhpStorm.

* Date: 2015/11/16

* Time: 1:31

*/

error_reporting(E_ALL || ~E_NOTICE);

include('config.php');

function random($length, $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz') {

$hash = '';

$max = strlen($chars) - 1;

for($i = 0; $i < $length; $i++) {

$hash .= $chars[mt_rand(0, $max)];

}

return $hash;

}

function encrypt($txt,$key){

for($i=0;$i<strlen($txt);$i++){

$tmp .= chr(ord($txt[$i])+10);

}

$txt = $tmp;

$rnd=random(4);

$key=md5($rnd.$key);

$s=0;

for($i=0;$i<strlen($txt);$i++){

if($s == 32) $s = 0;

$ttmp .= $txt[$i] ^ $key[++$s];

}

return base64_encode($rnd.$ttmp);

}

function decrypt($txt,$key){

$txt=base64_decode($txt);

$rnd = substr($txt,0,4);

$txt = substr($txt,4);

$key=md5($rnd.$key);

 

$s=0;

for($i=0;$i<strlen($txt);$i++){

if($s == 32) $s = 0;

$tmp .= $txt[$i]^$key[++$s];

}

for($i=0;$i<strlen($tmp);$i++){

$tmp1 .= chr(ord($tmp[$i])-10);

}

return $tmp1;

}

$username = decrypt($_COOKIE['user'],$key);

if ($username == 'system'){

echo $flag;

}else{

setcookie('user',encrypt('guest',$key));

echo "╮(╯▽╰)╭";

}

?>

根據源代碼獲得加密和解密算法,當輸入的cookie[user]通過解密算法獲得system時,能夠輸出flag的值

 

8)根據encrypt算法,須要計算出$key的值,而後用在decrypt中,根據算法寫出解密算法

<?php

function ss($txt,$m){

for($i=0;$i<strlen($m);$i++){

$tmp .= chr(ord($m[$i])+10);

}

$m=$tmp;

$tmp='';

$txt=base64_decode($txt);

$rnd = substr($txt,0,4);

$txt = substr($txt,4);

for($i=0;$i<strlen($txt);$i++){

$key .= $txt[$i] ^ $m[$i];

}

$s='0123456789abcdef';

$txt1='system';

for($i=0;$i<strlen($txt1);$i++){

$tmp .= chr(ord($txt1[$i])+10);

}

$txt1=$tmp;

$tmp='';

for($i=0;$i<16;$i++){

$tmp = $key.$s[$i];

for($ii=0;$ii<strlen($txt1);$ii++){

$txt2 .= $txt1[$ii] ^ $tmp[$ii];

}

echo base64_encode($rnd.$txt2).'</br>';

$txt2='';

}

}

ss('Nmo1ehccWERM','guest');

?>

9)首先訪問連接獲得user的cookie值

而後將cookie值做爲參數帶入解密算法中,計算獲得

10)將這16個值做爲burpsuite爆破的對象,進行爆破,獲得flag

相關文章
相關標籤/搜索