进入页面只有一张图片 url上有jpg参数,大概是文件读取
改jpg参数为index.php
得到index.php源码的base64 但是没啥用
看到wp里说 phpstrom创建的项目下会有.idea文件夹,含misc.xml,modules.xml,workspace.xml等文件
进入/.idea/wordspace.xml,发现有index.php,config.php,fl3g_ichuqiu.php三个文件
在index.php源码中知道config.php文件读不到,只能读一下fl3g_ichuqiu.php,构造参数jpg=fl3gconfigichuqiu.php,因为参数中不能含除.以外的其他符号但是config会被替换为_。
读到源码后发现是一个cookie加密的代码,要求我们伪造出system的cookie。代码如下:
<?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;
}//在chars参数中随机选择length个字符
function encrypt($txt,$key){
for($i=0;$i<strlen($txt);$i++){
$tmp .= chr(ord($txt[$i])+10);//后移10
}
$txt = $tmp;
$rnd=random(4);
$key=md5($rnd.$key);//随机数和key参数md5
$s=0;
for($i=0;$i<strlen($txt);$i++){
if($s == 32) $s = 0;
$ttmp .= $txt[$i] ^ $key[++$s];//txt和key异或
}
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 "╮(╯╰)╭";
在这里我首先想到的是爆破key,但是由于5位且没有其他任何信息,可能的值有128^5个,我这里没有成功爆出来
再看加密的源码,发现key是用来的明文异或的,由于异或的性质(a^a=0;a^0=a),我们可以构造payload:
$s=base64_decode('QkNBdxVPCkxI');//这里是响应中的cookie user值
$txt='guest';$m='system';
$rnd = substr($s,0,4);
$txts = substr($s,4);
for($i=0;$i<strlen($txt);$i++){
$tmp .= chr(ord($txt[$i])+10);//后移10
}
$txt=$tmp;$tmp='';
for($i=0;$i<strlen($m);$i++){
$tmp .= chr(ord($m[$i])+10);//后移10
}
$m=$tmp;
for($i=0;$i<5;$i++){
$temm.=$m[$i]^$txt[$i]^$txts[$i];
}
for($i=0;$i<128;$i++)
echo base64_encode($rnd.$temm.chr($i)).'<br>';
因为guest只有5位,所以我们只能利用guest的密文对system前5位进行加密,最后一位直接爆破即可,可以生成128个密文,放进burp爆破就能出结果了。
网友评论