来源:http://bbs.ichunqiu.com/thread-9811-1-1.html?from=ch
社区:i春秋
时间:2016年8月10日
作者:池寒
前言:
最近一个朋友组了个队去打CTF,然后拉我去助他一臂之力(差人,拉我去打酱油。。。),然后我就去了。由于技术渣,只能旁观。过程:
0x01
有一道题很有有意思,好像是21题,貌似最后只有18个人做出来了。
额,没错,就是一个妹纸的照片,据说许多人盯着妹纸看了一天都没做出来。0x02
注意URL,发现可能是文件包含,这种URL表单是filename,然后尝试用读取这个文件http://218.76.35.75:20106/index.php?image=index.php
查看源代码
明显是base64,解码得到:[AppleScript]纯文本查看复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
*CreatedbyPhpStorm.
*User:pfven
*Date:2016/7/20
*Time:21:35
*/
include 'header.php';
if(isset($_GET["image"])){
$file=$_GET['image'];
$file=preg_replace("/[^a-zA-Z0-9.]+/","",$file);
$file=str_replace("config","_",$file);
$txt=base64_encode(file_get_contents($file));
echo"";
}else{
header("Location: index.php?image=heihei.jpg");
exit();
}
include 'footer.php';
//***
发现是代码泄漏
PhpStorm是一个php 的IDE。由于编辑器为了防止突然断电,保存项目。都会建立自己的文件夹。
每个项目的配置存储在项目所在目录的 .idea 文件夹中,并以XML格式保存配置。如果你设置的是 “default project settings 默认项目设置”,那么这个默认设置将会自动应用到下一个最新创建的项目上。
于是就找.idea的文件夹,找到了这个http://218.76.35.75:20106/.idea/workspace.xml
然后就读取function_crypt.php
发现没什么有用的信息,于是看了下之前base64解出来的源代码
[AppleScript]纯文本查看复制代码
?
1
$file=preg_replace("/[^a-zA-Z0-9.]+/","",$file);
正则匹配,不是a到z,A到Z,0到9和.的全删
[AppleScript]纯文本查看复制代码
?
1
$file=str_replace("config","_",$file);
config换成_
然后就是这样了
http://218.76.35.75:20106/index.php?image=functionconfigcrypt.php
查看源代码,继续解base64
[AppleScript]纯文本查看复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/**
*CreatedbyPhpStorm.
*User:pfv
*Date:2016/7/20
*Time:17:19
*/
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
$tmp .=chr(ord($txt[$i])+10);
}
$txt=$tmp;
$rnd=random(4);
$key=md5($rnd.$key);
$s=0;
for($i=0;$i
if($s==32)$s=0;
$ttmp .=$txt[$i]^$key[++$s];
}
returnbase64_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
if($s==32)$s=0;
$tmp .=$txt[$i]^$key[++$s];
}
for($i=0;$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"It's Works!";
}
最后通过解密代码跑出flag,不懂,就到这儿了。
总结:
虽然我很菜,但是能跟许多大牛一起讨论问题,即使拿不到flag,也学到了很多东西。社区:i春秋
时间:2016年8月10日
作者:池寒
前言:
最近一个朋友组了个队去打CTF,然后拉我去助他一臂之力(差人,拉我去打酱油。。。),然后我就去了。由于技术渣,只能旁观。
过程:
0x01
有一道题很有有意思,好像是21题,貌似最后只有18个人做出来了。
额,没错,就是一个妹纸的照片,据说许多人盯着妹纸看了一天都没做出来。
0x02
注意URL,发现可能是文件包含,这种URL表单
是filename,然后尝试用读取这个文件
http://218.76.35.75:20106/index.php?image=index.php
查看源代码
明显是base64,解码得到:
<
?php
/
*
*
*
Created
by
PhpStorm.
*
User
:
pfven
*
Date
:
2016
/
7
/
20
*
Time
:
21
:
35
*
/
include 'header.php';
if
(
isset
(
$_GET[
"image"
]
)
)
{
$
file
=
$_GET['
image
'];
$
file
=
preg_replace
(
"/[^a-zA-Z0-9.]+/"
,
""
,
$
file
)
;
$
file
=
str_replace
(
"config"
,
"_"
,
$
file
)
;
$txt
=
base
64
_encode
(
file_get_contents
(
$
file
)
)
;
echo
""
;
}
else
{
header
(
"Location: index.php?image=heihei.jpg"
)
;
exit
(
)
;
}
include 'footer.php';
/
/
*
*
*
发现是代码泄漏
PhpStorm是一个php 的IDE。由于编辑器为了防止突然断电,保存项目。都会建立自己的文件夹。
每个项目的配置存储在项目所在目录的 .idea 文件夹中,并以XML格式保存配置。如果你设置的是 “default project settings 默认项目设置”,那么这个默认设置将会自动应用到下一个最新创建的项目上。
于是就找.idea的文件夹,找到了这个http://218.76.35.75:20106/.idea/workspace.xml
然后就读取function_crypt.php
发现没什么有用的信息,于是看了下之前base64解出来的源代码
$
file
=
preg_replace
(
"/[^a-zA-Z0-9.]+/"
,
""
,
$
file
)
;
正则匹配,不是a到z,A到Z,0到9和.的全删
$
file
=
str_replace
(
"config"
,
"_"
,
$
file
)
;
config换成_
然后就是这样了
http://218.76.35.75:20106/index.php?image=functionconfigcrypt.php
查看源代码,继续解base64
<
?php
/
*
*
*
Created
by
PhpStorm.
*
User
:
pfv
*
Date
:
2016
/
7
/
20
*
Time
:
17
:
19
*
/
error_reporting
(
E_ALL || ~E_NOTICE
)
;
include
(
'config.php'
)
;
function random
(
$length
,
$chars
=
'ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
abcdefghijklmnopqrstuvwxyz'
)
{
$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
=
md
5
(
$rnd.$
key
)
;
$s
=
0
;
for
(
$i
=
0
;$i
<
strlen
(
$txt
)
;$i
+
+
)
{
if
(
$s
=
=
32
)
$s
=
0
;
$ttmp .
=
$txt[$i]
^
$
key
[
+
+
$s];
}
return
base
64
_encode
(
$rnd.$ttmp
)
;
}
function decrypt
(
$txt
,
$
key
)
{
$txt
=
base
64
_decode
(
$txt
)
;
$rnd
=
substr
(
$txt
,
0
,
4
)
;
$txt
=
substr
(
$txt
,
4
)
;
$
key
=
md
5
(
$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
+
+
)
{
$tmp
1
.
=
chr
(
ord
(
$tmp[$i]
)
-10
)
;
}
return
$tmp
1
;
}
$username
=
decrypt
(
$_COOKIE['user']
,
$
key
)
;
if
(
$username
=
=
'system'
)
{
echo $flag;
}
else
{
setcookie
(
'user'
,
encrypt
(
'guest'
,
$
key
)
)
;
echo
"It's Works!"
;
}
最后通过解密代码跑出flag,不懂,就到这儿了。
总结:
虽然我很菜,但是能跟许多大牛一起讨论问题,即使拿不到flag,也学到了很多东西。