美文网首页ctf
一CTF wbe题思路及解题过程

一CTF wbe题思路及解题过程

作者: 池寒 | 来源:发表于2016-08-11 12:50 被阅读786次

    来源: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,解码得到:

    [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 = base64_encode(file_get_contents($file));       echo "<img src='data:image/png;base64,".$txt."'></img>"; }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 <?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 = '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 "It's Works!"; }

    最后通过解密代码跑出flag,不懂,就到这儿了。


    总结:


    虽然我很菜,但是能跟许多大牛一起讨论问题,即使拿不到flag,也学到了很多东西。

    相关文章

      网友评论

        本文标题:一CTF wbe题思路及解题过程

        本文链接:https://www.haomeiwen.com/subject/krfssttx.html