Write-up

[InCTF 2018] writeup

ch4rli3kop 2018. 10. 16. 01:13
반응형

Biz44re
Kevin sent me a file with some hidden message. Help me recover this secret from this bizzare network.

우선, 파일이 존재한다고 했으므로 pcap file안에 특정 파일의 시그니처가 발견될 것을 예상하고 binwalk로 검사.

인증서 파일들만이 존재.

헥스 값으로 pcap file 안에 존재할 가능성이 있음. 아래와 같이 검사.
m444ndu@ubuntu:~/handout/bizz$ strings bizz.pcap | xxd -r -p > a.txt
m444ndu@ubuntu:~/handout/bizz$ binwalk a.txt

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
18            0x12            Zip archive data, at least v2.0 to extract, compressed size: 4961, uncompressed size: 6668, name: flag.png
7307          0x1C8B          End of Zip archive
zip file 존재.


해당 패킷을 찾아보면 위와 같이 icmp 프로토콜을 이용하여 zip file의 hex 값을 전송하고 있는 것을 확인할 수 있다. 따라서 ip 주소 10.30.8.102 은 Kevin이 사용하고 있는 주소라는 것을 알 수 있으며, 알아낸 Kevin이 보낸 패킷들의 hex 값들을 모으면 아래와 같은 플래그를 가진 zip file을 추출할 수 있다.


inctf{_s0meTim3s_u_h4v3_t0_lOOk_3v3ryWh3r3_cl0s3r_TO_G3T_th3_wh0l3!}

이렇게 풀었어야 했는데!





Evilcrypter
A harmful ransomware script encrypted my precious text and hid it somewhere. I was going through some old photos when this incident happened. Luckily I was able to dump the memory as soon as I noticed something suspicious. Can you retrieve my data?

메모리 포렌식 문제다. volatility를 사용해서 raw 파일을 살펴보면 Win7 메로리 덤프 파일이라는 것을 알 수 있다.

D:\Tool\volatility_2.6_win64_standalone\volatility_2.6_win64_standalone>volatility_2.6_win64_standalone.exe -f challenge.raw imageinfo
Volatility Foundation Volatility Framework 2.6
INFO    : volatility.debug    : Determining profile based on KDBG search...
          Suggested Profile(s) : Win7SP1x86_23418, Win7SP0x86, Win7SP1x86
                     AS Layer1 : IA32PagedMemoryPae (Kernel AS)
                     AS Layer2 : FileAddressSpace (D:\Tool\volatility_2.6_win64_standalone\volatility_2.6_win64_standalone\challenge.raw)
                      PAE type : PAE
                           DTB : 0x185000L
                          KDBG : 0x82742c68L
          Number of Processors : 1
     Image Type (Service Pack) : 1
                KPCR for CPU 0 : 0x82743d00L
             KUSER_SHARED_DATA : 0xffdf0000L
           Image date and time : 2018-09-30 09:47:54 UTC+0000
     Image local date and time : 2018-09-30 15:17:54 +0530


여러 Profile(Win7SP1x86_23418, Win7SP0x86, Win7SP1x86)이 존재하는데, Service Pack이 1이므로 1인 것 중의 제일 처음에 나온 Win7SP1x86_23418을 사용한다.

그럼 첫 번째로, 우선 사용자가 어떤 프로세스를 사용했는지 확인한다.
D:\Tool\volatility_2.6_win64_standalone\volatility_2.6_win64_standalone>volatility_2.6_win64_standalone.exe -f challenge.raw --profile=Win7SP1x86  pslist
Volatility Foundation Volatility Framework 2.6
Offset(V)  Name                    PID   PPID   Thds     Hnds   Sess  Wow64 Start                          Exit
---------- -------------------- ------ ------ ------ -------- ------ ------ ------------------------------ ------------------------------
0x83d09c60 System                    4      0     88      541 ------      0 2018-09-30 08:09:59 UTC+0000
0x84551b98 smss.exe                260      4      2       29 ------      0 2018-09-30 08:09:59 UTC+0000
0x84d58030 csrss.exe               340    332      9      352      0      0 2018-09-30 08:10:04 UTC+0000
0x84d76030 csrss.exe               380    372     10      189      1      0 2018-09-30 08:10:05 UTC+0000
0x84d77d28 wininit.exe             388    332      3       83      0      0 2018-09-30 08:10:05 UTC+0000
0x84da6d28 winlogon.exe            424    372      3      115      1      0 2018-09-30 08:10:05 UTC+0000
0x84dcdbd0 services.exe            484    388      6      195      0      0 2018-09-30 08:10:07 UTC+0000
0x84dd0658 lsass.exe               492    388      6      561      0      0 2018-09-30 08:10:08 UTC+0000
0x84dd4b28 lsm.exe                 500    388     10      151      0      0 2018-09-30 08:10:08 UTC+0000
0x8454e348 svchost.exe             588    484     10      351      0      0 2018-09-30 08:10:12 UTC+0000
0x84e15d28 VBoxService.ex          648    484     12      115      0      0 2018-09-30 08:10:13 UTC+0000
0x84e1d030 svchost.exe             712    484      8      268      0      0 2018-09-30 08:10:14 UTC+0000
0x84e5ad28 svchost.exe             800    484     18      438      0      0 2018-09-30 08:10:14 UTC+0000
0x84e67d28 svchost.exe             852    484     16      371      0      0 2018-09-30 08:10:15 UTC+0000
0x84e6b030 svchost.exe             880    484     18      452      0      0 2018-09-30 08:10:15 UTC+0000
0x84e6fa18 svchost.exe             904    484     31     1116      0      0 2018-09-30 08:10:15 UTC+0000
0x8481bcb0 svchost.exe            1236    484     15      478      0      0 2018-09-30 08:10:22 UTC+0000
0x8484a800 spoolsv.exe            1340    484     12      285      0      0 2018-09-30 08:10:24 UTC+0000
0x8485b030 svchost.exe            1368    484     18      302      0      0 2018-09-30 08:10:24 UTC+0000
0x8488e860 svchost.exe            1488    484     11      267      0      0 2018-09-30 08:10:26 UTC+0000
0x84893030 svchost.exe            1516    484     12      215      0      0 2018-09-30 08:10:26 UTC+0000
0x85192030 LogonUI.exe             876    388      5      152      0      0 2018-09-30 08:10:40 UTC+0000
0x8515cae0 sppsvc.exe              292    484      6      153      0      0 2018-09-30 08:12:31 UTC+0000
0x8514bbf0 svchost.exe             440    484     13      342      0      0 2018-09-30 08:12:32 UTC+0000
0x84d69d00 SearchIndexer.         1184    484     15      724      0      0 2018-09-30 08:12:33 UTC+0000
0x8441d7e0 taskhost.exe           4816    484      8      196      1      0 2018-09-30 09:28:32 UTC+0000
0xa0b21170 dwm.exe                3028    852      3      186      1      0 2018-09-30 09:28:36 UTC+0000
0x8449d890 explorer.exe           5300   5128     30      871      1      0 2018-09-30 09:28:36 UTC+0000
0x851cdd28 VBoxTray.exe           3064   5300     14      154      1      0 2018-09-30 09:28:44 UTC+0000
0x84d77868 wuauclt.exe            5644    904      3       86      1      0 2018-09-30 09:28:49 UTC+0000
0x9c627d28 msiexec.exe            1016    484      7      345      0      0 2018-09-30 09:39:03 UTC+0000
0xbc2d08a8 msiexec.exe            5652   1016      0 --------      1      0 2018-09-30 09:39:13 UTC+0000   2018-09-30 09:41:17 UTC+0000
0xbc21b9f0 TrustedInstall         4724    484      4      139      0      0 2018-09-30 09:40:24 UTC+0000
0x84489800 audiodg.exe            5996    800      4      120      0      0 2018-09-30 09:45:22 UTC+0000
0x83fbba40 SearchProtocol         5748   1184      7      281      0      0 2018-09-30 09:45:32 UTC+0000
0x84ead628 DumpIt.exe             4116   5300      2       37      1      0 2018-09-30 09:45:43 UTC+0000
0x84e37498 conhost.exe            3176    380      2       51      1      0 2018-09-30 09:45:43 UTC+0000
0x84700ab8 dllhost.exe            1008    588      8      225      1      0 2018-09-30 09:45:48 UTC+0000
0x84ef6768 SearchFilterHo         4036   1184      5       97      0      0 2018-09-30 09:47:36 UTC+0000
0x9c6b0970 notepad.exe            3736   5300      1       60      1      0 2018-09-30 09:47:49 UTC+0000
0x8443d3c0 notepad.exe            3432   5300      1       60      1      0 2018-09-30 09:47:50 UTC+0000

 사실 나는 pslist를 사용했었는데, 몇몇 롸업을 참고하니 volatility를 사용할 때 pslist보단 psscan을 사용하는 것이 더 좋은 것 같다. pslist의 경우 종료되거나 비활성된 프로세스나 은닉된 프로세스들은 출력하지 않기 때문에, 풀 태그 스캐닝 방식을 사용하여 숨겨진 프로세스들까지 모두 출력해주는 psscan이 더 유용할 것이다.

아래는 psscan을 사용할 경우의 결과이다.
D:\Tool\volatility_2.6_win64_standalone\volatility_2.6_win64_standalone>volatility_2.6_win64_standalone.exe -f challenge.raw --profile=Win7SP1x86_23418 psscan
Volatility Foundation Volatility Framework 2.6
Offset(P)          Name                PID   PPID PDB        Time created                   Time exited
------------------ ---------------- ------ ------ ---------- ------------------------------ ------------------------------
0x0000000001823970 notepad.exe        3736   5300 0x3df55ea0 2018-09-30 09:47:49 UTC+0000
0x000000000e95dc70 msiexec.exe         272   1016 0x3df55a20 2018-09-30 09:39:36 UTC+0000   2018-09-30 09:40:43 UTC+0000
0x00000000101b69f0 TrustedInstall     4724    484 0x3df554a0 2018-09-30 09:40:24 UTC+0000
0x0000000018350170 dwm.exe            3028    852 0x3e6bd0e0 2018-09-30 09:28:36 UTC+0000
0x0000000018440030 dllhost.exe        2272    588 0x3df554e0 2018-09-30 09:47:55 UTC+0000   2018-09-30 09:48:00 UTC+0000
0x000000002a661aa0 python.exe         2284   1644 0x3df55ea0 2018-09-30 09:47:01 UTC+0000   2018-09-30 09:47:01 UTC+0000
0x00000000303188a8 msiexec.exe        5652   1016 0x3df55800 2018-09-30 09:39:13 UTC+0000   2018-09-30 09:41:17 UTC+0000
0x0000000037e92d28 msiexec.exe        1016    484 0x3df55bc0 2018-09-30 09:39:03 UTC+0000
0x000000003d0e4030 cmd.exe            1644   5300 0x3df55a20 2018-09-30 09:46:02 UTC+0000   2018-09-30 09:47:45 UTC+0000
0x000000003d194030 python.exe         3632   1644 0x3df55a40 2018-09-30 09:47:42 UTC+0000   2018-09-30 09:47:42 UTC+0000
0x000000003d34bbf0 svchost.exe         440    484 0x3df55380 2018-09-30 08:12:32 UTC+0000
0x000000003d35cae0 sppsvc.exe          292    484 0x3df55360 2018-09-30 08:12:31 UTC+0000
0x000000003d392030 LogonUI.exe         876    388 0x3df55340 2018-09-30 08:10:40 UTC+0000
0x000000003d3cdd28 VBoxTray.exe       3064   5300 0x3df55780 2018-09-30 09:28:44 UTC+0000
0x000000003d415d28 VBoxService.ex      648    484 0x3df55140 2018-09-30 08:10:13 UTC+0000
0x000000003d41d030 svchost.exe         712    484 0x3df55160 2018-09-30 08:10:14 UTC+0000
0x000000003d437498 conhost.exe        3176    380 0x3df55ee0 2018-09-30 09:45:43 UTC+0000
0x000000003d45ad28 svchost.exe         800    484 0x3df551a0 2018-09-30 08:10:14 UTC+0000
0x000000003d467d28 svchost.exe         852    484 0x3df551c0 2018-09-30 08:10:15 UTC+0000
0x000000003d46b030 svchost.exe         880    484 0x3df551e0 2018-09-30 08:10:15 UTC+0000
0x000000003d46fa18 svchost.exe         904    484 0x3df55200 2018-09-30 08:10:15 UTC+0000
0x000000003d4ad628 DumpIt.exe         4116   5300 0x3df55cc0 2018-09-30 09:45:43 UTC+0000
0x000000003d4f6768 SearchFilterHo     4036   1184 0x3df553c0 2018-09-30 09:47:36 UTC+0000
0x000000003d758030 csrss.exe           340    332 0x3df55060 2018-09-30 08:10:04 UTC+0000
0x000000003d769d00 SearchIndexer.     1184    484 0x3df553a0 2018-09-30 08:12:33 UTC+0000
0x000000003d776030 csrss.exe           380    372 0x3df550a0 2018-09-30 08:10:05 UTC+0000
0x000000003d777868 wuauclt.exe        5644    904 0x3df55180 2018-09-30 09:28:49 UTC+0000
0x000000003d777d28 wininit.exe         388    332 0x3df550c0 2018-09-30 08:10:05 UTC+0000
0x000000003d7a6d28 winlogon.exe        424    372 0x3df55040 2018-09-30 08:10:05 UTC+0000
0x000000003d7cdbd0 services.exe        484    388 0x3df55080 2018-09-30 08:10:07 UTC+0000
0x000000003d7d0658 lsass.exe           492    388 0x3df550e0 2018-09-30 08:10:08 UTC+0000
0x000000003d7d4b28 lsm.exe             500    388 0x3df55100 2018-09-30 08:10:08 UTC+0000
0x000000003da1bcb0 svchost.exe        1236    484 0x3df55260 2018-09-30 08:10:22 UTC+0000
0x000000003da4a800 spoolsv.exe        1340    484 0x3df55280 2018-09-30 08:10:24 UTC+0000
0x000000003da5b030 svchost.exe        1368    484 0x3df552a0 2018-09-30 08:10:24 UTC+0000
0x000000003da8e860 svchost.exe        1488    484 0x3df552c0 2018-09-30 08:10:26 UTC+0000
0x000000003da93030 svchost.exe        1516    484 0x3df552e0 2018-09-30 08:10:26 UTC+0000
0x000000003dd00ab8 dllhost.exe        1008    588 0x3df553e0 2018-09-30 09:45:48 UTC+0000
0x000000003de1d7e0 taskhost.exe       4816    484 0x3df558a0 2018-09-30 09:28:32 UTC+0000
0x000000003de3d3c0 notepad.exe        3432   5300 0x3df55ba0 2018-09-30 09:47:50 UTC+0000
0x000000003de89800 audiodg.exe        5996    800 0x3df55ce0 2018-09-30 09:45:22 UTC+0000
0x000000003de9d890 explorer.exe       5300   5128 0x3df55f00 2018-09-30 09:28:36 UTC+0000
0x000000003df4e348 svchost.exe         588    484 0x3df55120 2018-09-30 08:10:12 UTC+0000
0x000000003df51b98 smss.exe            260      4 0x3df55020 2018-09-30 08:09:59 UTC+0000
0x000000003e5bba40 SearchProtocol     5748   1184 0x3df55f20 2018-09-30 09:45:32 UTC+0000
0x000000003e7b3c60 System                4      0 0x00185000 2018-09-30 08:09:59 UTC+0000
기존 pslist로 봤을때 보이지 않던 몇몇 작업들도 보인다. 앞으로는 psscan을 더 사용해야겠다.

다시 문제로 돌아와서, ransomware script가 text를 암호화했다고 하니 psscan 결과를 봤을 때, notepad.exe를 분석하는 것이 타당해보인다. 또한 python.exe가 보이는 것으로 보아, ransomware script가 python code일 가능성도 염두에 두는 것이 좋아보인다.

D:\Tool\volatility_2.6_win64_standalone\volatility_2.6_win64_standalone>volatility_2.6_win64_standalone.exe -f challenge.raw --profile=Win7SP1x86_23418 memdump -p 3432 -D ./test3/.
Volatility Foundation Volatility Framework 2.6
************************************************************************
Writing notepad.exe [  3432] to 3432.dmp


해당 파일을 분석해보니, vip.txt라는 파일을 열었던 흔적을 발견할 수 있었다. 나는 hxd 에디터로 txt라는 키워드를 검색했는데, strings로 문자열만 파일로 만드는 것도 괜찮을 것 같다. 또한 해당 dump 파일에서 evilscript.py.py 라는 다분히 랜섬웨어라고 생각할만한 이름을 가진 파일도 발견했다. filescan 플러그인으로 해당 파일들을 확인해본다.

D:\Tool\volatility_2.6_win64_standalone\volatility_2.6_win64_standalone>volatility_2.6_win64_standalone.exe -f challenge.raw --profile=Win7SP1x86_23418 filescan | findstr vip.txt
Volatility Foundation Volatility Framework 2.6
0x000000003e727e50      8      0 -W-rw- \Device\HarddiskVolume2\Users\hello\Desktop\vip.txt

D:\Tool\volatility_2.6_win64_standalone\volatility_2.6_win64_standalone>volatility_2.6_win64_standalone.exe -f challenge.raw --profile=Win7SP1x86_23418 filescan | findstr evilscript
Volatility Foundation Volatility Framework 2.6
0x000000003d065038      2      0 RW-rw- \Device\HarddiskVolume2\Users\hello\AppData\Roaming\Microsoft\Windows\Recent\evilscript.lnk
0x000000003de1b5f0      8      0 R--rw- \Device\HarddiskVolume2\Users\hello\Desktop\evilscript.py.py
0x000000003e727490      2      0 RW-rw- \Device\HarddiskVolume2\Users\hello\AppData\Roaming\Microsoft\Windows\Recent\evilscript.py.lnk


두 파일의 위치가 모두 \hello\Desktop 인데 혹시나 싶어 해당 위치의 파일들을 검색해보았다.(envars의 결과를 단서로도 이러한 결론을 도출해낼 수 있지 않을까싶다. 이 파일에서는 너무 많아서 못했지만..)
D:\Tool\volatility_2.6_win64_standalone\volatility_2.6_win64_standalone>volatility_2.6_win64_standalone.exe -f challenge.raw --profile=Win7SP1x86_23418 filescan | findstr \hello\Desktop
Volatility Foundation Volatility Framework 2.6
0x0000000004f34148      2      0 RW---- \Device\HarddiskVolume2\Users\hello\Desktop\suspision1.jpeg
0x000000000be20b10      2      1 R--rwd \Device\HarddiskVolume2\Users\hello\Desktop
0x00000000385d3958      8      0 R--rw- \Device\HarddiskVolume2\Users\hello\Desktop\OSForensics.lnk
0x000000003d3c0f80      1      1 RW-rw- \Device\HarddiskVolume2\Users\hello\Desktop\DumpIt\HELLO-PC-20180930-094543.raw
0x000000003d46c3c8      1      1 R--rw- \Device\HarddiskVolume2\Users\hello\Desktop
0x000000003d481788      1      1 R--rw- \Device\HarddiskVolume2\Users\hello\Desktop\DumpIt
0x000000003d489c90      4      0 R--r-d \Device\HarddiskVolume2\Users\hello\Desktop\DumpIt\DumpIt.exe
0x000000003dcf3f18      8      0 R--r-- \Device\HarddiskVolume2\Users\hello\Desktop\DumpIt\DumpIt.exe
0x000000003de1b5f0      8      0 R--rw- \Device\HarddiskVolume2\Users\hello\Desktop\evilscript.py.py
0x000000003de41d00      8      0 R--rwd \Device\HarddiskVolume2\Users\hello\Desktop\desktop.ini
0x000000003de646e0      2      1 R--rwd \Device\HarddiskVolume2\Users\hello\Desktop
0x000000003e1e9360      1      1 R--rw- \Device\HarddiskVolume2\Users\hello\Desktop
0x000000003e727e50      8      0 -W-rw- \Device\HarddiskVolume2\Users\hello\Desktop\vip.txt


suspision1.jpeg 라는 역시 다분히 오해할만한 이름의 파일이 존재했다. 이 3개의 파일들을 잘 추출하면 다음과 같다. 
D:\Tool\volatility_2.6_win64_standalone\volatility_2.6_win64_standalone>volatility_2.6_win64_standalone.exe -f challenge.raw --profile=Win7SP1x86_23418 dumpfiles -Q 0x0000000004f34148 -D ./test3/.


vip.txt
am1gd2V4M20wXGs3b2U=

evilscript.py
import sys
import string

def xor(s):
    a = ''.join(chr(ord(i)^3) for i in s)
    return a

def encoder(x):
    return x.encode("base64")

if __name__ == "__main__":
    f = open("C:\\Users\\hello\\Desktop\\vip.txt", "w")
    arr = sys.argv[1]
    arr = encoder(xor(arr))
    f.write(arr)
    f.close()

suspision1.jpeg


evilscript가 vip.txt를 암호화했기 때문에, 이를 복호화 하면 다음과 같은 flag의 일부분을 얻을 수 있다.
import sys
import string
import base64

def xor(s):

    a = ''.join(chr(ord(i)^3) for i in s)
    return a

if __name__ == "__main__":

    arr = 'am1gd2V4M20wXGs3b2U='
    arr = base64.b64decode(arr)
    #print(arr)
    arr = xor(arr)
    print(arr)

````````````````````````````````````````````
inctf{0n3_h4lf



대회 때 여기까지 했다..... suspision1.jpeg를 조금 더 의심해보면 좋으련만.. 그냥 낚시용인줄 알았는데..

나머지 플래그는 suspision1.jpeg에 steganograpy로 숨겨져있었다. steghide라는 도구로 아까 구한 inctf{0n3_h4lf 를 키로 삼아 숨겨진 메시지를 얻을 수 있다..

D:\Tool\steghide>steghide.exe extract -sf D:\download\InCTF\Evilcrypter\test3\suspision1.jpeg
Enter passphrase:
the file "secret text" does already exist. overwrite ? (y/n) y
wrote extracted data to "secret text".

``````````````````
_1s_n0t_3n0ugh}



그리하야
inctf{0n3_h4lf_1s_n0t_3n0ugh}


요즘 포렌식 문제에서는 스태가노그래피가 거의 끼는 거 같다!







Winter Sport
I have a friend named Jake.We were watching a football tournament on one fine chilly morning. Meanwhile Jake's sister Susan did something mischievous which cause Jake to lose some really important data. We could only find this piece of evidence, can you recover it for him?

binwalk 통해 제공된 file.pdf 파일을 분석해보면 7zip 파일이 숨겨져 있음을 확인할 수 있다. 

압축을 해제하면 omg.pdf 파일이 나오는데 이 파일은 손상된 pdf 파일이다.

 

pdf file format은  아래와 같이 Header, Body, Cross-reference Table, Trailer로 구성되어 있는데, Header가 완전 박살난 것을 확인할 수 있다.

그래도 어찌저찌 파일을 열어보면(NesPDF) 그냥 흰 화면만 있는데 사실 흰색 글자로 다음과 같이 적혀있다.
What is       Steganography     ?Steganography   is       an      amaz

사실 나는 여기서 문서 상에서 그림같은 오브젝트들을 복원하는게 해답이라고 생각해서 한참동안 pdf format에 맞춰 오브젝트들을 배치해주고 있었다. 결국 실패했지만.. 
근데 여기서 이러고 있을게 아니라 헤더 부분을 제대로 봤어야 했다... 어그러진 부분은 역시 의도가 있었다.
white space로 flag가 숨겨져 있었다.



SNOW 라는 Whitespace steganography를 다루는 툴을 사용하여 flag를 얻어낼 수 있다.

D:\Tool\snwdos32>SNOW.EXE -C "D:\download\InCTF\winter sport\omg.pdf"
inctf{w3lcom3_t0_7h3_w0rld_0f_whit3sp4c3}


Whitespace는 생각지도 못했다!



반응형

'Write-up' 카테고리의 다른 글

[InCTF 2018] Yawn writeup  (0) 2018.10.30
[InCTF 2018] Magical Radio writeup  (0) 2018.10.20
[CSAW 2018] writeup  (0) 2018.09.21
[SECURITYFEST 2018] sshnuke writeup  (0) 2018.06.03
[SECURITYFEST 2018] zion writeup  (0) 2018.06.03