VULNCON CTF 2020 Writeup

この大会は2020/12/19 19:30(JST)~2020/12/20 19:30(JST)に開催されました。
今回もチームで参戦。結果は4374点で442チーム中18位でした。
自分で解けた問題をWriteupとして書いておきます。

Sanity Check (VULNCON 2020)

Instructionsのページでフラグの一部があった。

vulncon{w3_4

Rulesのページにもあった。

r3_N00B_4rMY}

結合すると、フラグになる。

vulncon{w3_4r3_N00B_4rMY}

Pcaped (Miscellaneous)

TCPに1バイトずつ多数の通信パケットに含まれているので、集めていく。集めるとbase64文字列になるので、デコードするとフラグになる。

from scapy.all import *

packets = rdpcap('Data.pcapng')

data = ''
for p in packets:
    if p.haslayer(IP) and p.haslayer(TCP):
        if p[IP].dst == '172.16.139.128' and p[TCP].dport == 4545:
            if p.haslayer(Raw):
                data += p[Raw].load.rstrip()

print '[+] data: ', data
flag = data.decode('base64')
print '[*] flag: ', flag

実行結果は以下の通り。

[+] data:  VGhlIGZsYWcgaXMtPiBCMXRfYnlfQjF0X3YxYV9uYwo=
[*] flag:  The flag is-> B1t_by_B1t_v1a_nc
vulncon{B1t_by_B1t_v1a_nc}

All I know was zip (Miscellaneous)

16進数の値が羅列されているので、デコードしてバイナリにする。

with open('file.txt', 'r') as f:
    code_str = f.read().replace('\n', '')

data = ''
codes = code_str.split(', ')
for code in codes:
    data += chr(int(code, 16))

with open('flag.zip', 'wb') as f:
    f.write(data)

バイナリにしたzipを解凍すると、encrption.pdfが展開される。このpdfはパスワードがかかっているので、クラックする。

$ pdfcrack --wordlist=dict/rockyou.txt encrption.pdf 

PDF version 1.7
Security Handler: Standard
V: 2
R: 3
P: -4
Length: 128
Encrypted Metadata: True
FileID: 711e4d90e5d70fb92c3af750cceac6cc
U: 03f0fafc462dd0c18b42cc6ccfc5825d28bf4e5e4e758a4164004e56fffa0108
O: e7bb9840492c36e5b7ca2f8128ea45e3a318f45fa979d4e48a1458486c5bb9c2
found user-password: 'butterfly'

このパスワードでファイルを開くと、シンボルを使った換字式暗号と推測できる暗号が書いてあった。
f:id:satou-y:20201226085751p:plain
いろいろと調べたら、「Dragon language」というもののようだった。
以下を参考に復号してみる。

- https://et.maisfontes.com/dragon-alphabet-thuum
- https://diaryofadragonborn.tumblr.com/post/27274240213/the-word-wall-guide-to-the-dragon-language-part
vuln9ondra
9oni9is98l

以下の変換をする。

9->c
8->oo
vulncondra
coniciscool
vulncon{draconic_is_cool}

T1G3R (Miscellaneous)

$ steghide extract -sf tiger.jpeg -p tiger
wrote extracted data to "hash.txt".
$ cat hash.txt
6e2dfb581bbe2b0f82e59781fb962ff9099e8d82f45f1496

48桁(192bit)のハッシュなので、Tigerハッシュと推測。https://md5hashing.net/hash/tiger192,3/で調べる。

you are going good go get the flag password is "Tiger_is_cool"

このパスワードでzipファイルを解凍する。

$ unzip -P Tiger_is_cool flag.zip
Archive:  flag.zip
  inflating: flag
$ file flag
flag: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=0364adb6bf4349e7b93ec9d12d0d851b29a92001, for GNU/Linux 3.2.0, not stripped
$ ./flag
pi pi pi pi pi pi pi pi pi pi pika pipi pi pipi pi pi pi pipi pi pi pi pi pi pi pi pipi pi pi pi pi pi pi pi pi pi pi pichu pichu pichu pichu ka chu pipi pipi pipi pipi pi pi pi pi pikachu pi pi pi pi pi pi pi pi pi pi pi pi pikachu pikachu ka ka ka ka pikachu pi pi pi pikachu pichu ka ka ka ka ka ka ka ka ka ka ka ka pikachu ka ka ka ka ka ka ka ka ka ka ka pikachu pikachu pipi ka ka ka pikachu ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka pikachu pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pikachu pi pikachu ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka pikachu ka ka ka pikachu pi pi pi pi pi pi pi pikachu pi pi pi pi pi pikachu pichu ka pikachu pipi ka ka ka ka ka ka ka ka ka ka ka pikachu pi pi pi pi pi pi pi pi pi pi pi pi pikachu ka ka pikachu pichu pi pikachu pipi ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka ka pikachu ka pikachu pikachu pichu pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pikachu pi pi pi pi pi pi pi pi pikachu pipi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pi pikachu pichu pi pi pi pi pi pi pi pikachu pipi ka ka ka ka pikachu

解凍すると、flagが展開され、esolangと思われる言語で書かれた文字列が書いてあった。調べてみるとPikalangというのがあるらしい。
https://www.dcode.fr/pikalang-languageでデコードすると、以下のURLが出てきた。

https://pastebin.com/YXXBJwQs

このURLにアクセスすると、フラグが書いてあった。

vulncon{@Tiger_are_preu_hackers!!!!}

Game Over (Memory Forensic)

メモリダンプを解析して、マルウェア感染したときにアクセスしたURLと時刻を答える必要がある。

$ volatility -f dump.raw imageinfo
Volatility Foundation Volatility Framework 2.6
INFO    : volatility.debug    : Determining profile based on KDBG search...
          Suggested Profile(s) : Win7SP1x64, Win7SP0x64, Win2008R2SP0x64, Win2008R2SP1x64_23418, Win2008R2SP1x64, Win7SP1x64_23418
                     AS Layer1 : WindowsAMD64PagedMemory (Kernel AS)
                     AS Layer2 : FileAddressSpace (/mnt/hgfs/Shared/work/dump.raw)
                      PAE type : No PAE
                           DTB : 0x187000L
                          KDBG : 0xf80002bf20a0L
          Number of Processors : 1
     Image Type (Service Pack) : 1
                KPCR for CPU 0 : 0xfffff80002bf3d00L
             KUSER_SHARED_DATA : 0xfffff78000000000L
           Image date and time : 2020-12-12 14:05:05 UTC+0000
     Image local date and time : 2020-12-12 19:35:05 +0530

$ volatility -f dump.raw --profile=Win7SP1x64 pstree
Volatility Foundation Volatility Framework 2.6
Name                                                  Pid   PPid   Thds   Hnds Time
-------------------------------------------------- ------ ------ ------ ------ ----
 0xfffffa8010d1a950:csrss.exe                         324    316      9    406 2020-12-12 13:45:12 UTC+0000
 0xfffffa8010ebd220:wininit.exe                       364    316      3     76 2020-12-12 13:45:13 UTC+0000
. 0xfffffa8010ed9b30:services.exe                     464    364      7    202 2020-12-12 13:45:13 UTC+0000
.. 0xfffffa8011274b30:VGAuthService.                 1280    464      4     93 2020-12-12 13:45:15 UTC+0000
.. 0xfffffa80113aeb30:svchost.exe                    1544    464      7     98 2020-12-12 13:45:15 UTC+0000
.. 0xfffffa801142a590:msdtc.exe                      1816    464     12    142 2020-12-12 13:45:16 UTC+0000
.. 0xfffffa8010fff890:svchost.exe                     660    464      7    266 2020-12-12 13:45:13 UTC+0000
.. 0xfffffa80114e7460:taskhost.exe                   1348    464      7    150 2020-12-12 13:45:19 UTC+0000
.. 0xfffffa801170b9e0:svchost.exe                    2800    464     10    140 2020-12-12 13:45:29 UTC+0000
.. 0xfffffa801105a980:svchost.exe                     808    464     16    410 2020-12-12 13:45:13 UTC+0000
... 0xfffffa80115b2060:dwm.exe                       2424    808      3     72 2020-12-12 13:45:27 UTC+0000
.. 0xfffffa80112f3060:dllhost.exe                    1736    464     13    185 2020-12-12 13:45:16 UTC+0000
.. 0xfffffa8011302b30:svchost.exe                     692    464      8    314 2020-12-12 13:47:16 UTC+0000
.. 0xfffffa8011035b30:svchost.exe                     736    464     19    472 2020-12-12 13:45:13 UTC+0000
... 0xfffffa80117fa060:audiodg.exe                   3812    736      4    125 2020-12-12 14:00:16 UTC+0000
.. 0xfffffa8011070b30:svchost.exe                     840    464     40    984 2020-12-12 13:45:13 UTC+0000
.. 0xfffffa80112e4910:vmtoolsd.exe                   1356    464     11    292 2020-12-12 13:45:15 UTC+0000
... 0xfffffa8011801b30:cmd.exe                       3660   1356      0 ------ 2020-12-12 14:05:05 UTC+0000
.. 0xfffffa8010f8eb30:svchost.exe                     596    464     10    353 2020-12-12 13:45:13 UTC+0000
... 0xfffffa801146bb30:WmiPrvSE.exe                  1980    596     10    203 2020-12-12 13:45:16 UTC+0000
.. 0xfffffa80111b5960:spoolsv.exe                    1112    464     12    271 2020-12-12 13:45:14 UTC+0000
.. 0xfffffa8011352b30:SearchIndexer.                 3204    464     11    582 2020-12-12 13:45:34 UTC+0000
.. 0xfffffa8011172890:svchost.exe                     484    464     15    464 2020-12-12 13:45:14 UTC+0000
.. 0xfffffa80110ff910:svchost.exe                    1016    464     10    509 2020-12-12 13:45:14 UTC+0000
.. 0xfffffa8011517b30:sppsvc.exe                      276    464      4    149 2020-12-12 13:45:19 UTC+0000
.. 0xfffffa80111cfb30:svchost.exe                    1148    464     18    327 2020-12-12 13:45:14 UTC+0000
. 0xfffffa8010f357f0:lsass.exe                        480    364      7    694 2020-12-12 13:45:13 UTC+0000
. 0xfffffa8010edb580:lsm.exe                          488    364      9    154 2020-12-12 13:45:13 UTC+0000
 0xfffffa80115aa950:explorer.exe                     2448   2412     20    654 2020-12-12 13:45:27 UTC+0000
. 0xfffffa8011671b30:chrome.exe                      2588   2448     29    921 2020-12-12 13:45:28 UTC+0000
.. 0xfffffa8011840670:chrome.exe                     2944   2588      7    130 2020-12-12 13:45:29 UTC+0000
.. 0xfffffa80118441e0:chrome.exe                      252   2588      0 ------ 2020-12-12 13:46:36 UTC+0000
.. 0xfffffa80117d1060:chrome.exe                     2528   2588     12    240 2020-12-12 14:04:11 UTC+0000
.. 0xfffffa80116bfb30:chrome.exe                     2664   2588      9     92 2020-12-12 13:45:28 UTC+0000
.. 0xfffffa801187bb30:chrome.exe                     2996   2588     14    224 2020-12-12 13:45:29 UTC+0000
.. 0xfffffa8011919060:chrome.exe                     3020   2588     12    174 2020-12-12 13:45:29 UTC+0000
.. 0xfffffa80117e16b0:chrome.exe                     2908   2588     14    201 2020-12-12 13:45:29 UTC+0000
.. 0xfffffa80115d2b30:chrome.exe                     2164   2588      8    206 2020-12-12 13:45:32 UTC+0000
.. 0xfffffa80115aeb30:chrome.exe                     2644   2588      0 ------ 2020-12-12 13:46:36 UTC+0000
.. 0xfffffa80118a8b30:chrome.exe                     2864   2588     13    199 2020-12-12 14:04:12 UTC+0000
. 0xfffffa8011662060:sidebar.exe                     2556   2448      7    233 2020-12-12 13:45:28 UTC+0000
. 0xfffffa8010427790:vmtoolsd.exe                    2544   2448      8    154 2020-12-12 13:45:28 UTC+0000
. 0xfffffa801165a2e0:vm3dservice.ex                  2536   2448      2     39 2020-12-12 13:45:28 UTC+0000
 0xfffffa800f919990:System                              4      0     87    407 2020-12-12 13:45:12 UTC+0000
. 0xfffffa80100fa8c0:smss.exe                         244      4      2     29 2020-12-12 13:45:12 UTC+0000
 0xfffffa80110b21a0:GoogleCrashHan                   2284   2216      5     92 2020-12-12 13:45:22 UTC+0000
 0xfffffa801103cb30:GoogleCrashHan                   2276   2216      5    100 2020-12-12 13:45:22 UTC+0000
 0xfffffa8010ee1060:winlogon.exe                      408    356      4    114 2020-12-12 13:45:13 UTC+0000
 0xfffffa8010ebe060:csrss.exe                         372    356     14    446 2020-12-12 13:45:13 UTC+0000
. 0xfffffa80118a77d0:conhost.exe                     4032    372      1     34 2020-12-12 13:45:40 UTC+0000
 0xfffffa80111a4b30:mailspring.exe                   2596   2616     31    569 2020-12-12 13:45:32 UTC+0000
. 0xfffffa8011321630:mailspring.exe                  2196   2596      3    126 2020-12-12 13:45:33 UTC+0000
. 0xfffffa801172bb30:mailspring.exe                  3416   2596     19    213 2020-12-12 13:45:34 UTC+0000
. 0xfffffa8011760b30:mailspring.exe                  3604   2596      0 ------ 2020-12-12 13:45:35 UTC+0000
. 0xfffffa801167e3b0:mailspring.exe                  3272   2596      0 ------ 2020-12-12 13:45:34 UTC+0000
. 0xfffffa8011464b30:mailspring.exe                  3424   2596     20    328 2020-12-12 13:45:34 UTC+0000
.. 0xfffffa80118a55f0:mailsync.exe                   4020   3424     12    466 2020-12-12 13:45:39 UTC+0000
 0xfffffa801173d140:dwm.exe                          2932   2004      6    159 2020-12-12 13:58:01 UTC+0000
. 0xfffffa80117662e0:netsh.exe                       1696   2932      0 ------ 2020-12-12 13:58:07 UTC+0000

Chromeでサイトにアクセスしていると思われる。

$ volatility --plugins=../plugins -f dump.raw --profile=Win7SP1x64 chromehistory
Volatility Foundation Volatility Framework 2.6
Index  URL                                                                              Title                                                                            Visits Typed Last Visit Time            Hidden Favicon ID
------ -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ------ ----- -------------------------- ------ ----------
     7 https://www.google.com/search?source=hp...QCgAQGqAQdnd3Mtd2l6sAEA&sclient=psy-ab facebook - Google खोजी                                                        2     0 2020-12-12 13:46:13.497778        N/A       
     1 http://google.com/                                                               Google                                                                                2     2 2020-12-12 13:46:06.035590        N/A       
     4 https://www.google.com/search?source=hp...nO2MycjtAhW3zzgGHcBJDXIQ4dUDCAc&uact=5 online betting game - Google खोजी                                             3     0 2020-12-12 13:42:15.187823        N/A       
     8 https://www.facebook.com/                                                        Facebook - Log In or Sign Up                                                          2     0 2020-12-12 13:46:16.862696        N/A       
     2 http://www.google.com/                                                           Google                                                                                2     0 2020-12-12 13:46:06.035590        N/A       
     6 https://www.gamblingsites.org/                                                   Online Gambling Sites - Best Real Money Gambling Sites 2020                           1     0 2020-12-12 13:43:07.638967        N/A       
     3 https://www.google.com/                                                          Google                                                                                2     0 2020-12-12 13:46:06.035590        N/A       
     4 https://www.google.com/search?source=hp...nO2MycjtAhW3zzgGHcBJDXIQ4dUDCAc&uact=5 online betting game - Google खोजी                                             3     0 2020-12-12 13:42:15.187823        N/A       
     7 https://www.goov%;|eo������...�i�y�Yd�(1     0 1601-01-01 00:00:00               N/A       
     1 http://google.com/                                                               Google                                                                                1     1 2020-12-12 13:41:40.947451        N/A
vulncon{gamblingsites.org-12-12-2020}

Attack (Forensic)

仮想イメージが添付されているので、攻撃者のIPアドレスと、どのような攻撃がされていたかを答える。
auth.logを見ると、192.168.30.1からsshでuser=karmaの認証失敗が続いていることがわかる。

vulncon{192.168.30.1_bruteforce}

Compromise (Forensic)

侵害されたユーザのユーザ名とパスワードを答える。

root@innocent:~# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
syslog:x:104:108::/home/syslog:/bin/false
_apt:x:105:65534::/nonexistent:/bin/false
lxd:x:106:65534::/var/lib/lxd/:/bin/false
messagebus:x:107:111::/var/run/dbus:/bin/false
uuidd:x:108:112::/run/uuidd:/bin/false
dnsmasq:x:109:65534:dnsmasq,,,:/var/lib/misc:/bin/false
sshd:x:110:65534::/var/run/sshd:/usr/sbin/nologin
pollinate:x:111:1::/var/cache/pollinate:/bin/false
karma:x:1002:1002:,,,:/home/karma:/bin/bash
root@innocent:~# cat /etc/shadow
root:$6$feJDQPNQ$UcnsMIXNSPoj80LSnVg9EFp6FhU3cNs130FOLOHXctzHbVkzKnIyZEY2NhmHn3F6UzdBhXcdw2bJeA1y6M8MI/:18616:0:99999:7:::
daemon:*:18584:0:99999:7:::
bin:*:18584:0:99999:7:::
sys:*:18584:0:99999:7:::
sync:*:18584:0:99999:7:::
games:*:18584:0:99999:7:::
man:*:18584:0:99999:7:::
lp:*:18584:0:99999:7:::
mail:*:18584:0:99999:7:::
news:*:18584:0:99999:7:::
uucp:*:18584:0:99999:7:::
proxy:*:18584:0:99999:7:::
www-data:*:18584:0:99999:7:::
backup:*:18584:0:99999:7:::
list:*:18584:0:99999:7:::
irc:*:18584:0:99999:7:::
gnats:*:18584:0:99999:7:::
nobody:*:18584:0:99999:7:::
systemd-timesync:*:18584:0:99999:7:::
systemd-network:*:18584:0:99999:7:::
systemd-resolve:*:18584:0:99999:7:::
systemd-bus-proxy:*:18584:0:99999:7:::
syslog:*:18584:0:99999:7:::
_apt:*:18584:0:99999:7:::
lxd:*:18584:0:99999:7:::
messagebus:*:18584:0:99999:7:::
uuidd:*:18584:0:99999:7:::
dnsmasq:*:18584:0:99999:7:::
sshd:*:18584:0:99999:7:::
pollinate:*:18584:0:99999:7:::
karma:$6$hKdO3pAp$wAMPSH2X4PESTuGwPXrsOBzJRZJBS7lv.Ajx4IIM3P5zBXx5a7NfPdB8V.x0zaEBSlmB2trLbGVprjJFW3VDe/:18598:0:99999:7:::

侵害されたユーザは karma。該当する行だけ抜き出し、クラックする。

$ unshadow passwd shadow > passwd_shadow
$ ~/john-1.9.0-jumbo-1/run/john --wordlist=dict/rockyou.txt passwd_shadow 
Warning: detected hash type "sha512crypt", but the string is also recognized as "sha512crypt-opencl"
Use the "--format=sha512crypt-opencl" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 128/128 AVX 2x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
godisgood        (karma)
1g 0:00:00:01 DONE (2020-12-20 14:17) 0.7936g/s 914.2p/s 914.2c/s 914.2C/s kucing..summer1
Use the "--show" option to display all of the cracked passwords reliably
Session completed
vulncon{karma_godisgood}

Suspicious (Forensic)

攻撃に使ったツールのダウンロード先のURLを答える。

root@innocent:# cd /home/karma
root@innocent:/home/karma# ls
hack privilege-escalation-awesome-scripts-suite

privilege-escalation-awesome-scripts-suiteがダウンロードされているので、そのURLを調べて答える。

vulncon{https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite}

Secret (Forensic)

秘密ファイルのファイルパスを答える。

root@innocent:/home/karma# find / -name *secret*
/proc/sys/net/ipv4/ipfrag_secret_interval
/proc/sys/net/ipv6/conf/all/stable_secret
/proc/sys/net/ipv6/conf/default/stable_secret
/proc/sys/net/ipv6/conf/enp0s3/stable_secret
/proc/sys/net/ipv6/conf/enp0s8/stable_secret
/proc/sys/net/ipv6/conf/lo/stable_secret
/proc/sys/net/ipv6/ip6frag_secret_interval
/etc/.secret
/etc/.secret/file/is/here/thisissupersecretfile
/etc/.secret/file/is/thisissecretfile
root@innocent:~# cat /etc/.secret/file/is/here/thisissupersecretfile
top secret info
vulncon{/etc/.secret/file/is/here/thisissupersecretfile}

Go On Date? (Cryptography)

Vigenere暗号と推測する。https://www.dcode.fr/vigenere-cipherでいろいろ復号方法を変えながら試す。???? shift cipher encodingsに復号できそう。鍵を確認する。

          1111111111222222
01234567890123456789012345
abcdefghijklmnopqrstuvwxyz

???? shift cipher encodings
ddve uhkft fkpjet enfqdknis

s(18) -> u(20) + 2(c)
h(07) -> h(07) + 0(a)
i(08) -> k(10) + 2(c)
f(05) -> f(05) + 0(a)
t(19) -> t(19) + 0(a)

c(02) -> f(05) + 3(d)
i(08) -> k(10) + 2(c)
p(15) -> p(15) + 0(a)
h(07) -> j(09) + 2(c)
e(04) -> e(04) + 0(a)
r(17) -> t(19) + 2(c)

e(04) -> e(04) + 0(a)
n(13) -> n(13) + 0(a)
c(02) -> f(05) + 3(d)

キーを "ADCACACA" にすると復号できた。

date shift cipher encodings
vulncon{date_shift_cipher_encodings}

can_you_c_the_password? (Cryptography)

Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\Groups.xmlを見る。

name="n00b_us3r" image="0" changedcpassword="HlQWFdlPXQTU7n8W9VbsVTP245DcAJAUQeAZZfkJE/Q8ZlWgwj7CqKl6YiPvKbQFO7PWS7rSwbVtSSZUhJSj5YzjbkKtyXR5fP9VQDEieMU"

この暗号方式は公開されている。暗号方式はAES-CBC。key, ivもわかっているので、それを使って復号する。

from Crypto.Cipher import AES
from base64 import b64decode

def unpad(s):
    return s[:-ord(s[-1])]

cpassword = 'HlQWFdlPXQTU7n8W9VbsVTP245DcAJAUQeAZZfkJE/Q8ZlWgwj7CqKl6YiPvKbQFO7PWS7rSwbVtSSZUhJSj5YzjbkKtyXR5fP9VQDEieMU'
while True:
    if len(cpassword) % 4 == 0:
        break
    else:
        cpassword += '='

password = b64decode(cpassword)

key = """
4e 99 06 e8  fc b6 6c c9  fa f4 93 10  62 0f fe e8
f4 96 e8 06  cc 05 79 90  20 9b 09 a4  33 b6 6c 1b
""".replace(' ', '').replace('\n', '').decode('hex')

cipher = AES.new(key, AES.MODE_CBC, '\x00' * 16)
flag = unpad(cipher.decrypt(password)).replace('\x00', '')
print flag
vulncon{s3cur1ty_h4s_3volv3d_s0__much}

PollMor (Cryptography)

英数字を対応するモールス記号(-, ., スペース)に置き換えデコードする。

morse = {'.-': 'A', '-...': 'B', '-.-.': 'C', '-..': 'D', '.': 'E',
    '..-.': 'F', '--.': 'G', '....': 'H', '..': 'I', '.---': 'J', '-.-': 'K',
    '.-..': 'L', '--': 'M', '-.': 'N', '---': 'O', '.--.': 'P', '--.-': 'Q',
    '.-.': 'R', '...': 'S', '-': 'T', '..-': 'U', '...-': 'V', '.--': 'W',
    '-..-':'X' , '-.--': 'Y', '--..': 'Z', '-----': '0', '.----': '1',
    '..---': '2', '...--': '3', '....-': '4', '.....': '5', '-....': '6',
    '--...': '7', '---..': '8', '----.': '9'
}

enc = 'VEXCH881U3JPMLWO6TQ4MH5G5LNVUXGN86GWR1NZ8CA82AW7MLAY4UJ3E4K38335UBAUCQY6N4SJJ1RR6VBYSAOP9P9XBI35XSEPM4GHGFY39AWE9BJTBGZW93Q3Y2Y374JDFRF9AFE'

hyphen = '145BCGJNRTW'
dot = '0378AEFMOPQXYV'
space = '269DHIKLSUZ'

codes = ''
for i in range(len(enc)):
    if enc[i] in hyphen:
        codes += '-'
    elif enc[i] in dot:
        codes += '.'
    elif enc[i] in space:
        codes += ' '
    else:
        print 'Error!'

codes = codes.split(' ')
flag = ''
for code in codes:
    flag += morse[code]
print flag
VULNCONP0LLUX4NDM0RSEAR3BR0TH3RS

{, }, _を入れ、フラグの形式にする。

vulncon{P0LLUX_4ND_M0RSE_AR3_BR0TH3RS}

is_it_magic? (Cryptography)

JPGのヘッダを元にXOR鍵を求め、データ全体を復号する。

with open('smokeaway.jpg.enc', 'rb') as f:
    enc = f.read()

JPG_HEAD = '\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01'

key = []
for i in range(len(JPG_HEAD)):
    code = ord(JPG_HEAD[i]) ^ ord(enc[i])
    key.append(code)

flag = ''
for i in range(len(enc)):
    flag += chr(ord(enc[i]) ^ key[i%len(key)])

with open('smokeaway.jpg', 'wb') as f:
    f.write(flag)

復号したJPG画像にフラグが書いてあった。
f:id:satou-y:20201226114134j:plain

vulncon{x0r_1s_n0t_s@f3}

diffeRent_but_SimilAr (Cryptography)

Polynomial RSAの問題。因数分解して、一文字ずつ復号していく。

#!/usr/bin/env sage
from public_key import e, n

def decrypt(m, d):
    m_int = Integer(m.encode('hex'), 16)
    m_poly = P(R.fetch_int(m_int))
    c_poly = pow(m_poly, d, n_poly)
    c_int = R(c_poly).integer_representation()
    c = format(c_int, '02x').decode('hex')
    return c

with open('secret', 'rb') as f:
    encs = f.read().split('\n' * 3)[:-1]

P = PolynomialRing(GF(2), 'x')
n_poly = P(n)
R.<a> = GF(2^2049)

p, q = n_poly.factor()
p, q = p[0], q[0]
s = (2^p.degree()-1)*(2^q.degree()-1)
d = inverse_mod(e, s)

msg = ''
for enc in encs:
    msg += decrypt(enc, d)
print msg

復号結果は以下の通り。

Here is your secret password: PPfTx6>:Gc.r[~9P

このパスワードでflag.zipを解凍する。

$ unzip -P "PPfTx6>:Gc.r[~9P" flag.zip
Archive:  flag.zip
 extracting: flag.txt
$ cat flag.txt
vulncon{man1@C_L!k35_s@g3}

展開されたflag.txtにフラグが書いてあった。

vulncon{man1@C_L!k35_s@g3}