2018/11/11

Google CTF Beginners Quest FIRMWARE

ext4 filesystem dataが与えられる。mount後.mediapc_backdoor_password.gzを発見。明らかに怪しいため中身を確認したところフラグを得た。

このファイルはtestdiskによるチェック時に発見した。

$ mkdir /mnt/challenge
$ mount challenge.ext4 /mnt/challenge
$ ls -la /mnt/challenge
total 40
drwxr-xr-x. 22 root root  1024 Jun 22 09:54 .
drwxr-xr-x.  3 root root    23 Nov 11 04:56 ..
-rw-r--r--.  1 root root    40 Jun 22 09:54 .mediapc_backdoor_password.gz
drwxr-xr-x.  2 root root  3072 Jun 22 09:54 bin
drwxr-xr-x.  2 root root  1024 Jun 22 09:54 boot
drwxr-xr-x.  4 root root  1024 Jun 22 09:54 dev
drwxr-xr-x. 52 root root  4096 Jun 22 09:54 etc
drwxr-xr-x.  2 root root  1024 Jun 22 09:54 home
drwxr-xr-x. 12 root root  1024 Jun 22 09:54 lib
drwxr-xr-x.  2 root root  1024 Jun 22 09:54 lib64
drwx------.  2 root root 12288 Jun 22 09:51 lost+found
drwxr-xr-x.  2 root root  1024 Jun 22 09:54 media
drwxr-xr-x.  2 root root  1024 Jun 22 09:54 mnt
drwxr-xr-x.  2 root root  1024 Jun 22 09:54 opt
drwxr-xr-x.  2 root root  1024 Jun 22 09:54 proc
drwx------.  2 root root  1024 Jun 22 09:54 root
drwxr-xr-x.  4 root root  1024 Jun 22 09:54 run
drwxr-xr-x.  2 root root  3072 Jun 22 09:54 sbin
drwxr-xr-x.  2 root root  1024 Jun 22 09:54 srv
drwxr-xr-x.  2 root root  1024 Jun 22 09:54 sys
drwxr-xr-x.  2 root root  1024 Jun 22 09:54 tmp
drwxr-xr-x. 10 root root  1024 Jun 22 09:54 usr
drwxr-xr-x.  9 root root  1024 Jun 22 09:54 var
$ gzip -d /mnt/challenge/.mediapc_backdoor_password.gz
$ cat /mnt/challenge/.mediapc_backdoor_password
CTF{DUMMY_FLAG}

Google CTF Beginners Quest GATEKEEPER

usernameとpasswordを要求するELFファイルが与えられる。

$ ./gatekeeper
/===========================================================================\
|               Gatekeeper - Access your PC from everywhere!                |
+===========================================================================+
[ERROR] Login information missing
Usage: ./gatekeeper <username> <password>

gdb-pedaでstrcmp実行個所のRSIを確認。

1回目は0n3_W4rM。これがusernameになるため第一引数に設定して再実行

[----------------------------------registers-----------------------------------]
RAX: 0x7fffffffe7f8 --> 0x4242004141414141 ('AAAAA')
RBX: 0x0
RCX: 0xb48 ('H\x0b')
RDX: 0x2e ('.')
RSI: 0x555555554de0 ("0n3_W4rM")
RDI: 0x7fffffffe7f8 --> 0x4242004141414141 ('AAAAA')
RBP: 0x7fffffffe490 --> 0x0
RSP: 0x7fffffffe3e0 --> 0x7fffffffe578 --> 0x7fffffffe7d0 ("/media/sf_VirtualBoxCentOS/./gatekeeper")
RIP: 0x555555554a46 (<main+143>:        call   0x555555554770 <strcmp@plt>)
R8 : 0x2e ('.')
R9 : 0x7ffff7ff1740 (0x00007ffff7ff1740)
R10: 0x7fffffffde20 --> 0x0
R11: 0x246
R12: 0x5555555547c0 (<_start>:  xor    ebp,ebp)
R13: 0x7fffffffe570 --> 0x3
R14: 0x0
R15: 0x0
EFLAGS: 0x212 (carry parity ADJUST zero sign trap INTERRUPT direction overflow)
[-------------------------------------code-------------------------------------]
   0x555555554a39 <main+130>:   mov    rax,QWORD PTR [rax]
   0x555555554a3c <main+133>:   lea    rsi,[rip+0x39d]        # 0x555555554de0
   0x555555554a43 <main+140>:   mov    rdi,rax
=> 0x555555554a46 <main+143>:   call   0x555555554770 <strcmp@plt>
   0x555555554a4b <main+148>:   test   eax,eax
   0x555555554a4d <main+150>:   je     0x555555554a7b <main+196>
   0x555555554a4f <main+152>:   mov    edi,0xa
   0x555555554a54 <main+157>:   call   0x555555554710 <putchar@plt>
Guessed arguments:
arg[0]: 0x7fffffffe7f8 --> 0x4242004141414141 ('AAAAA')
arg[1]: 0x555555554de0 ("0n3_W4rM")

2回目はzLl1ks_d4m_T0g_I。これを第二引数に設定して再実行。

[----------------------------------registers-----------------------------------]
RAX: 0x555555757010 --> 0x4242424242 ('BBBBB')
RBX: 0x0
RCX: 0xb48 ('H\x0b')
RDX: 0x2e ('.')
RSI: 0x555555554e01 ("zLl1ks_d4m_T0g_I")
RDI: 0x555555757010 --> 0x4242424242 ('BBBBB')
RBP: 0x7fffffffe480 --> 0x0
RSP: 0x7fffffffe3d0 --> 0x7fffffffe568 --> 0x7fffffffe7cd ("/media/sf_VirtualBoxCentOS/./gatekeeper")
RIP: 0x555555554b57 (<main+416>:        call   0x555555554770 <strcmp@plt>)
R8 : 0x2e ('.')
R9 : 0x7ffff7ff1740 (0x00007ffff7ff1740)
R10: 0x7fffffffde20 --> 0x0
R11: 0x246
R12: 0x5555555547c0 (<_start>:  xor    ebp,ebp)
R13: 0x7fffffffe560 --> 0x3
R14: 0x0
R15: 0x0
EFLAGS: 0x246 (carry PARITY adjust ZERO sign trap INTERRUPT direction overflow)
[-------------------------------------code-------------------------------------]
   0x555555554b49 <main+402>:   mov    rax,QWORD PTR [rbp-0x10]
   0x555555554b4d <main+406>:   lea    rsi,[rip+0x2ad]        # 0x555555554e01
   0x555555554b54 <main+413>:   mov    rdi,rax
=> 0x555555554b57 <main+416>:   call   0x555555554770 <strcmp@plt>
   0x555555554b5c <main+421>:   test   eax,eax
   0x555555554b5e <main+423>:   jne    0x555555554bba <main+515>
   0x555555554b60 <main+425>:   lea    rdi,[rip+0x2ab]        # 0x555555554e12
   0x555555554b67 <main+432>:   call   0x5555555548ca <text_animation>
Guessed arguments:
arg[0]: 0x555555757010 --> 0x4242424242 ('BBBBB')
arg[1]: 0x555555554e01 ("zLl1ks_d4m_T0g_I")

2回目のstrcmp。RDIには第2引数が入っているはずだが、zLl1ks_d4m_T0g_IからI_g0T_m4d_sk1lLzに変わっている。挙動や結果から反転されて比較されていることが分かるため、I_g0T_m4d_sk1lLzに設定して再実行。

[----------------------------------registers-----------------------------------]
RAX: 0x555555757010 ("I_g0T_m4d_sk1lLz")
RBX: 0x0
RCX: 0xb48 ('H\x0b')
RDX: 0x2e ('.')
RSI: 0x555555554e01 ("zLl1ks_d4m_T0g_I")
RDI: 0x555555757010 ("I_g0T_m4d_sk1lLz")
RBP: 0x7fffffffe480 --> 0x0
RSP: 0x7fffffffe3d0 --> 0x7fffffffe568 --> 0x7fffffffe7c2 ("/media/sf_VirtualBoxCentOS/./gatekeeper")
RIP: 0x555555554b57 (<main+416>:        call   0x555555554770 <strcmp@plt>)
R8 : 0x2e ('.')
R9 : 0x7ffff7ff1740 (0x00007ffff7ff1740)
R10: 0x7fffffffde20 --> 0x0
R11: 0x246
R12: 0x5555555547c0 (<_start>:  xor    ebp,ebp)
R13: 0x7fffffffe560 --> 0x3
R14: 0x0
R15: 0x0
EFLAGS: 0x246 (carry PARITY adjust ZERO sign trap INTERRUPT direction overflow)
[-------------------------------------code-------------------------------------]
   0x555555554b49 <main+402>:   mov    rax,QWORD PTR [rbp-0x10]
   0x555555554b4d <main+406>:   lea    rsi,[rip+0x2ad]        # 0x555555554e01
   0x555555554b54 <main+413>:   mov    rdi,rax
=> 0x555555554b57 <main+416>:   call   0x555555554770 <strcmp@plt>
   0x555555554b5c <main+421>:   test   eax,eax
   0x555555554b5e <main+423>:   jne    0x555555554bba <main+515>
   0x555555554b60 <main+425>:   lea    rdi,[rip+0x2ab]        # 0x555555554e12
   0x555555554b67 <main+432>:   call   0x5555555548ca <text_animation>
Guessed arguments:
arg[0]: 0x555555757010 ("I_g0T_m4d_sk1lLz")
arg[1]: 0x555555554e01 ("zLl1ks_d4m_T0g_I")

I_g0T_m4d_sk1lLzがpasswordであり、フラグを得る。

$ ./gatekeeper 0n3_W4rM I_g0T_m4d_sk1lLz
/===========================================================================\
|               Gatekeeper - Access your PC from everywhere!                |
+===========================================================================+
 ~> Verifying.......Correct!
Welcome back!
CTF{DUMMY_FLAG}

mstdn.unigiri.net jemalloc導入

2018/11/091の手順では導入に失敗していた。mastodon-sidekiq.serviceとmastodon-streaming.serviceのcp元が誤っていたため修正して再度再起動を行った。

mstdn.unigiri.net チューニング

公式ドキュメントのscaling-up2に従い、以下のチューニングを行った

デフォルトの2から1へ削減。メモリ使用量が約200MB減少。

デフォルトの25から15へ削減。目立った効果はなし。

scaling-upの手順に従い導入。目立った効果はなし。


  1. 2018/11/09
  2. https://source.joinmastodon.org/mastodon/docs/blob/master/content/en/administration/scaling-up.md