一CTF wbe题思路及解题过程

来源:http://bbs.ichunqiu.com/thread-9811-1-1.html?from=ch

社区:i春秋

时间:2016年8月10日

作者:池寒

前言:

最近一个朋友组了个队去打CTF,然后拉我去助他一臂之力(差人,拉我去打酱油。。。),然后我就去了。由于技术渣,只能旁观。过程:

0x01

有一道题很有有意思,好像是21题,貌似最后只有18个人做出来了。

一CTF wbe题思路及解题过程_第1张图片

额,没错,就是一个妹纸的照片,据说许多人盯着妹纸看了一天都没做出来。0x02

注意URL,发现可能是文件包含,这种URL表单是filename,然后尝试用读取这个文件http://218.76.35.75:20106/index.php?image=index.php

一CTF wbe题思路及解题过程_第2张图片

查看源代码

明显是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

一CTF wbe题思路及解题过程_第3张图片

然后就读取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个人做出来了。


一CTF wbe题思路及解题过程_第4张图片

额,没错,就是一个妹纸的照片,据说许多人盯着妹纸看了一天都没做出来。

0x02


注意URL,发现可能是文件包含,这种URL表单

是filename,然后尝试用读取这个文件

http://218.76.35.75:20106/index.php?image=index.php


一CTF wbe题思路及解题过程_第5张图片


查看源代码


明显是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
< ?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


一CTF wbe题思路及解题过程_第6张图片


然后就读取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
< ?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,也学到了很多东西。

你可能感兴趣的:(一CTF wbe题思路及解题过程)