h-takara.hatenablog.com
Open in
urlscan Pro
54.199.90.60
Public Scan
Submitted URL: http://h-takara.hatenablog.com/
Effective URL: https://h-takara.hatenablog.com/
Submission: On November 30 via api from US — Scanned from JP
Effective URL: https://h-takara.hatenablog.com/
Submission: On November 30 via api from US — Scanned from JP
Form analysis
1 forms found in the DOMGET https://h-takara.hatenablog.com/search
<form class="search-form" role="search" action="https://h-takara.hatenablog.com/search" method="get">
<input type="text" name="q" class="search-module-input" value="" placeholder="記事を検索" required="">
<input type="submit" value="検索" class="search-module-button">
</form>
Text Content
h_takara’s blog 読者になる H_TAKARA’S BLOG 2024-10-13 WINDOWS24H2でSUDOが使えるようになった話 WINDOWS24H2でSUDOが使えるようになった話 sudoの話から,Windowsでsudoが使えるようになった事に対する個人的な意見を書こうかなと.. その前に... WINDOWS11 24H2について Windows11からは,1年に1度の機能更新プログラムがきます.そして2024年10月1日に24H2がリリースされている. Windows Updateでは,段階的にロールアウトし始め,ロールアウト対象になれば,設定のWindows Updateから「Windows11 24H2」が利用できます. ※注意点 Windows Updateで「24H2への更新」が来ていない時に,MicrosoftのWebサイトからisoファイルをとってきてUpdateするのはおすすめしません. 理由としては,まだリリースして時間がたっておらず,どんな不具合があるかも明らかになっていないからです.聞いた話によると,今年の7月に発生した"ブルースクリーン"になる恐れがあるとかなんとか. Microsoft Windows11、バージョン24H2の更新履歴 本題 SUDOコマンドって? sudoコマンドは,一般ユーザーに対してコマンド実行の単位でroot権限を与える仕組みのこと. たとえば,以下のようにhoge(私)が「b」のファイルを操作する場合はroot権限がいることが分かります.そういう時は,コマンドの先頭にsudoをつける.(例:sudo vim b) ファイルを他人と共有したいけど...って時に一時的に管理者権限を与えることで,誤って操作した際にシステム全体への影響を減らすことができる. $ ls -l total 5 -rw-r----- 19 hoge hoge 4096 Oct 13 21:02 a -rw-r----- 3 root root 4096 Dec 15 2023 b -rw------- 1 hoge hoge 7625 Dec 17 2023 c -rw-r--r-- 1 hoge hoge 220 Dec 15 2023 d -rw-r--r-- 1 hoge hoge 3938 Oct 12 23:55 e WINDOWSのSUDOコマンド 今回の24H2へのアップデートでWindowsのターミナル上でsudoが使えるようになった. これまで,sudoコマンドの利用はLinux系のOSがメインだったが,Windowsにも搭載されて少し驚いた.というより遅くないかと思った 今まで,Win+Xキーのメニューからの操作やOSSのgsudoの導入が必要であった. その手間を省けたのは非常に大きい. OPTIONの違い Windowsのターミナル(cmd,powershell)とWSL2でのオプションの比較 cmd,powershell $ sudo -h sudo for Windows Usage: sudo.exe [OPTIONS] [COMMANDLINE]... [COMMAND] Commands: run 管理者としてコマンドを実行する config sudo の現在の構成情報を取得する help Print this message or the help of the given subcommand(s) Arguments: [COMMANDLINE]... 実行するコマンドライン Options: -E, --preserve-env 現在の環境変数をコマンドに渡す -N, --new-window コマンドに新しいウィンドウを使用する --disable-input ターゲット アプリケーションへの入力を無効にした状態で現在のターミナルで実行します --inline 現在のターミナルで実行する -D, --chdir <chdir> コマンドを実行する前に作業ディレクトリを変更してくだ さい -h, --help 印刷のヘルプ ("--help" で詳細を表示) -V, --version 印刷のバージョン WSL2 $ sudo -h sudo - execute a command as another user usage: sudo -h | -K | -k | -V usage: sudo -v [-ABknS] [-g group] [-h host] [-p prompt] [-u user] usage: sudo -l [-ABknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command] usage: sudo [-ABbEHknPS] [-r role] [-t type] [-C num] [-D directory] [-g group] [-h host] [-p prompt] [-R directory] [-T timeout] [-u user] [VAR=value] [-i|-s] [<command>] usage: sudo -e [-ABknS] [-r role] [-t type] [-C num] [-D directory] [-g group] [-h host] [-p prompt] [-R directory] [-T timeout] [-u user] file ... Options: -A, --askpass use a helper program for password prompting -b, --background run command in the background -B, --bell ring bell when prompting -C, --close-from=num close all file descriptors >= num -D, --chdir=directory change the working directory before running command -E, --preserve-env preserve user environment when running command --preserve-env=list preserve specific environment variables -e, --edit edit files instead of running a command -g, --group=group run command as the specified group name or ID -H, --set-home set HOME variable to target user's home dir -h, --help display help message and exit -h, --host=host run command on host (if supported by plugin) -i, --login run login shell as the target user; a command may also be specified -K, --remove-timestamp remove timestamp file completely -k, --reset-timestamp invalidate timestamp file -l, --list list user's privileges or check a specific command; use twice for longer format -n, --non-interactive non-interactive mode, no prompts are used -P, --preserve-groups preserve group vector instead of setting to target's -p, --prompt=prompt use the specified password prompt -R, --chroot=directory change the root directory before running command -r, --role=role create SELinux security context with specified role -S, --stdin read password from standard input -s, --shell run shell as the target user; a command may also be specified -t, --type=type create SELinux security context with specified type -T, --command-timeout=timeout terminate command after the specified time limit -U, --other-user=user in list mode, display privileges for user -u, --user=user run command (or edit file) as specified user name or ID -V, --version display version information and exit -v, --validate update user's timestamp without running a command -- stop processing command line arguments これからオプションの数とか増えていくのかな,どうなんだろう. まとめ 私自身,Windows上でsudoを使う意義を見いだせていない. Linuxではたくさん使うが,Windowsで使うことは想像しづらい.(WSLは使う) なので,いろんな方の意見などを収集して追記していきたい. h_takara 47日前 読者になる 広告を非表示にする * もっと読む コメントを書く 2024-10-10 FORENSICS(STEGANOGRAPHYについて) ステガノグラフィ(STEGANOGRAPHY) ステガノグラフィとは,情報隠蔽(英語版)技術の一つであり,情報を他の情報に埋め込む技術のこと,あるいはその研究を指す.(Wikipedia) 一見,なにも違和感はないが実は...みたいな感じで, 画像,動画,音声,テキストなどに隠すことが多い よく似た技術:電子透かし →ディジタルデータの著作権保護が目的 つよつよサイト:うさみみハリケーン→ステガノグラフィーの解析について CTFだとフォレンジック(Forensics)やその他(Misc)の分野でよく出題される. フォレンジックおすすめサイト→Forensics入門(CTF) - Qiita よく使うコマンドたち FILEコマンド ファイルのフォーマットがわかる (picoCTF 2024 Secret_of_the_Polyglot) $ file flag2of2-final.pdf flag2of2-final.pdf: PNG image data, 50 x 50, 8-bit/color RGBA, non-interlaced ファイルフォーマットが違う. pngファイルにリネームしてあげるとフラグが見える. EXIFTOOLコマンド 画像に埋め込まれた情報が見える 時には,画像が撮影された日付や場所まで正確に特定できる $ exiftool flag2of2-final.png ExifTool Version Number : 12.40 File Name : flag2of2-final.png Directory : . File Size : 3.3 KiB File Modification Date/Time : 2024:02:08 02:50:37+09:00 File Access Date/Time : 2024:10:10 21:24:54+09:00 File Inode Change Date/Time : 2024:03:13 20:23:06+09:00 File Permissions : -rwxrwxrwx File Type : PNG File Type Extension : png MIME Type : image/png Image Width : 50 Image Height : 50 Bit Depth : 8 Color Type : RGB with Alpha Compression : Deflate/Inflate Filter : Adaptive Interlace : Noninterlaced Profile Name : ICC profile Profile CMM Type : Little CMS Profile Version : 4.3.0 Profile Class : Display Device Profile Color Space Data : RGB Profile Connection Space : XYZ Profile Date Time : 2023:11:02 17:42:31 Profile File Signature : acsp Primary Platform : Apple Computer Inc. CMM Flags : Not Embedded, Independent Device Manufacturer : Device Model : Device Attributes : Reflective, Glossy, Positive, Color Rendering Intent : Perceptual Connection Space Illuminant : 0.9642 1 0.82491 Profile Creator : Little CMS Profile ID : 0 Profile Description : GIMP built-in sRGB Profile Copyright : Public Domain Media White Point : 0.9642 1 0.82491 Chromatic Adaptation : 1.04788 0.02292 -0.05022 0.02959 0.99048 -0.01707 -0.00925 0.01508 0.75168 Red Matrix Column : 0.43604 0.22249 0.01392 Blue Matrix Column : 0.14305 0.06061 0.71393 Green Matrix Column : 0.38512 0.7169 0.09706 Red Tone Reproduction Curve : (Binary data 32 bytes, use -b option to extract) Green Tone Reproduction Curve : (Binary data 32 bytes, use -b option to extract) Blue Tone Reproduction Curve : (Binary data 32 bytes, use -b option to extract) Chromaticity Channels : 3 Chromaticity Colorant : Unknown (0) Chromaticity Channel 1 : 0.64 0.33002 Chromaticity Channel 2 : 0.3 0.60001 Chromaticity Channel 3 : 0.15001 0.06 Device Mfg Desc : GIMP Device Model Desc : sRGB Pixels Per Unit X : 11811 Pixels Per Unit Y : 11811 Pixel Units : meters Modify Date : 2023:11:02 17:57:06 Comment : Created with GIMP Warning : [minor] Trailer data after PNG IEND chunk Image Size : 50x50 Megapixels : 0.003 他にもあるけが,だいたいQiitaのサイト見ながらやってる感じ よく使うツールたち * CyberChef * HexEd.it * 青空白猫 最後に 他にもCTFのWriteup書いてたりするので読んでみてください!! h_takara 50日前 読者になる 広告を非表示にする * HoriK (id:HoriK) ここも良いですよ.よく使ってる. https://0xrick.github.io/lists/stego/ 50日前 * もっと読む コメントを書く 2024-10-07 IRON CTF 2024 WRITEUP(CRYPTO/RANDOM PIXELS) Q : MY IMAGE ACCIDENTLY FELL INTO A PIXEL MIXER CAN YOU HELP ME RECOVER IT? A zip file is given, containing a python program (enc.py) to encode the image and the image (encrypted.png). So, we can decode the images. ENC.PY import random, time, numpy from PIL import Image from secret import FLAG def randomize(img, seed): random.seed(seed) new_y = list(range(img.shape[0])) new_x = list(range(img.shape[1])) random.shuffle(new_y) random.shuffle(new_x) new = numpy.empty_like(img) for i, y in enumerate(new_y): for j, x in enumerate(new_x): new[i][j] = img[y][x] return numpy.array(new) if __name__ == "__main__": with Image.open(FLAG) as f: img = numpy.array(f) out = randomize(img, int(time.time())) image = Image.fromarray(out) image.save("encrypted.png") Looking at enc.py, it seems that seed (timestamp) is required for decoding, so use exiftool to obtain it. ENCRYPTED.PNG $ exiftool encrypted.png ExifTool Version Number : 12.76 File Name : encrypted.png Directory : . File Size : 22 kB File Modification Date/Time : 2024:10:07 09:58:36+09:00 File Access Date/Time : 2024:10:07 09:59:07+09:00 File Inode Change Date/Time : 2024:10:07 09:58:36+09:00 File Permissions : -rwxrwxrwx File Type : PNG File Type Extension : png MIME Type : image/png Image Width : 300 Image Height : 300 Bit Depth : 8 Color Type : RGB with Alpha Compression : Deflate/Inflate Filter : Adaptive Interlace : Noninterlaced Image Size : 300x300 Megapixels : 0.090 DECRYPTED.PY import random, numpy from PIL import Image from datetime import datetime def derandomize(img, seed): random.seed(seed) new_y = list(range(img.shape[0])) new_x = list(range(img.shape[1])) random.shuffle(new_y) random.shuffle(new_x) original = numpy.empty_like(img) for i, y in enumerate(new_y): for j, x in enumerate(new_x): original[y][x] = img[i][j] return original if __name__ == "__main__": date_str = '2024-10-03T06:02:40+0900' dt = datetime.strptime(date_str, '%Y-%m-%dT%H:%M:%S%z') seed = int(dt.timestamp()) with Image.open("encrypted.png") as f: img = numpy.array(f) original_img = derandomize(img, seed) image = Image.fromarray(original_img) image.save("decrypted.png") print("Image successfully decrypted and saved as decrypted.png") DECRYPTED.PNG $ zbarimg decrypted.png QR-Code:ironCTF{p53ud0_r4nd0m_f0r_4_r3450n} scanned 1 barcode symbols from 1 images in 0.01 seconds FLAG:ironCTF{p53ud0_r4nd0m_f0r_4_r3450n} h_takara 54日前 読者になる 広告を非表示にする * もっと読む コメントを書く 2024-06-14 DIVER OSINT CTF 2024 DIVER OSINT CTF WRITEUP 結果は、1,178ptで453チーム中115位でした。 チーム登録だけど、一人で参加しました。 MISC NUMBER この車両の持ち主に連絡を取りたい。電話番号を調べてもらえないだろうか。 Flag形式: Diver24{0123456789} 注意: 実際に電話を掛けてはならない。 ナンバープレートを拡大していってみると「外-4906」と書いてある。 調べてみると、外交官用の専用車両だった。 数字の先頭2字が国名を表しているらしい。 https://warmheart0159.hatenablog.com/entry/2017/06/06/162406 クウェートらしいのでクウェートの日本大使館の連絡先を書いてあげる https://www.kuwait-embassy.or.jp/ DiverCTF{0334550361} MILITARY OSPREY1 2023年11月29日、アメリカ軍のオスプレイ(V-22)が日本の屋久島沖で墜落した。この機体の番号と、墜落時のコールサインは何か。 Flag形式: Diver24{XX-XXXX_CALLSIGN} たとえば機体登録番号が01-2345、コールサインがCALL01の場合、Flagは Diver24{01-2345_CALL01} となる。 検索していったら、Xに書いてあった(ドメインは相変わらずtwitter.comやなww) https://twitter.com/oldconnie/status/1730027810469941508 回答の制限回数が無かったので試していくとビンゴ Diver24{12-0065_GUNDAM22} INTRODUCTION OFFICE ファイルから得られるFlagを入力してください。 https://drive.google.com/file/d/1VOZPbwYzoynoNCW3SR5_cHRvPiXUx9lI/view?usp=drive_link ファイルをダウンロードして、fileコマンドで見てみると $ file mudai.odt mudai.odt: Zip archive data, at least v2.0 to extract, compression method=deflate zipファイルでしたと。 解凍してpngファイル見てみると、、ビンゴ! Diver24{World Ocean Day} DREAM 画像に写っているパイプオルガンがある施設の郵便番号を答えなさい。 Flag形式: Diver24{123-4567} Google Lensに突っ込んだらあった! Diver24{574-0046} SERIAL これらの動画の背景に映っている航空機のシリアル番号は何か? シリアル番号が123456の場合、Flagは Diver24{123456} となる。 https://www.tiktok.com/@ana_allnipponairways/video/7318648417620741377 https://www.tiktok.com/@ana_allnipponairways/video/7338422699301145857 動画に映っている「ANA JA222A」で検索かけたらすぐ出る Diver24{9580} GEO IMAGETRACK 画像の撮影された郷土料理屋の店名を答えよ。 Flag形式: Diver24{店名} 画像渡されるから、exiftool使う。 $ exiftool DSC_8886.JPG ExifTool Version Number : 12.76 File Name : DSC_8886.JPG Directory : . File Size : 1805 kB File Modification Date/Time : 2024:06:08 13:59:09+09:00 File Access Date/Time : 2024:06:14 21:13:15+09:00 File Inode Change Date/Time : 2024:06:08 14:00:00+09:00 File Permissions : -rwxrwxrwx File Type : JPEG File Type Extension : jpg MIME Type : image/jpeg Exif Byte Order : Big-endian (Motorola, MM) X Resolution : 72 Y Resolution : 72 Resolution Unit : inches Y Cb Cr Positioning : Centered GPS Version ID : 2.3.0.0 GPS Latitude : 34 deg 41' 41.22" GPS Longitude : 135 deg 11' 35.58" Image Width : 4032 Image Height : 2268 Encoding Process : Baseline DCT, Huffman coding Bits Per Sample : 8 Color Components : 3 Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2) Image Size : 4032x2268 Megapixels : 9.1 GPS Position : 34 deg 41' 41.22", 135 deg 11' 35.58" 「34 deg 41' 41.22", 135 deg 11' 35.58"」をGoogle Mapに突っ込む ※degは切り取る 答え→GoogleMap Diver24{郷土料理 からす} CHIBAN 画像の中央に写っている道路の地番は何か。 たとえば住所が 仙台市宮城野区二十人町 303-8 の場合、Flagは Diver24{303-8} となる。 また、地番には数字だけでなく漢字が含まれることもある。その場合は漢字表記のまま解答せよ。 根気強く探したら「サンディ(双葉店)」だった。 地番検索くんで検索して地番をフラグすればいい 地番検索くん:https://chiban-kensaku.com/ Diver24{筆界未定地-6} LEAK 先月、日本の会社で大規模なBTCの不正流出が起きた。 流出先となっているウォレットアドレスを答えよ。 Flag形式: Diver24{ウォレットアドレス} 困ったときはXで検索するwww やっぱりあったwww → Jo∞ |フリミンするならmooon| Diver24{1B6rJRfjTXwEy36SCs5zofGMmdv2kdZw7P} PROMOTER 画像に写っている池沼を開拓した発起人の父親の命日を答えよ。 Flag形式: Diver24{yyyy/MM/dd} Google Lensで検索したら、愛知県の「明治村」ってところにたどり着いた。 博物館明治村:https://www.meijimura.com/area/ そこから池の名前が「入鹿池」が分かる。 入鹿池の歴史っぽいのが書いてあったので見てみたらビンゴ https://www.jstage.jst.go.jp/article/jjsidre1965/49/7/49_7_630/_pdf 池を作った人:江崎善左衛門 父親:江崎善左衛門 宗度 Diver24{1627/11/13} #CTF #OSINT h_takara 168日前 読者になる 広告を非表示にする * もっと読む コメントを書く 2024-06-09 ANGSTROMCTF 2024 WRITEUP ANGSTROMCTF 2024 WRITEUP WEB SPINNER https://spinner.web.actf.co/ www.youtube.com こういう感じで、くるくる回すページに飛ぶ。 とりあえずいつも通りソースコード見てみる。 if (state.total >= 10_000 * 360) { state.flagged = true const response = await fetch('/falg', { method: 'POST' }) element.textContent = await response.text() } 怪しいところがあった。 「/flag」と「POST」がキーポイント! $ curl -X POST https://spinner.web.actf.co/falg actf{b152d497db04fcb1fdf6f3bb64522d5e} actf{b152d497db04fcb1fdf6f3bb64522d5e} MISC PUTNAM $ nc challs.actf.co 31337 514 + 97 = ? 611 You succeeded! The flag is actf{just_a_tad_easier_than_the_actual_putnam} :D actf{just_a_tad_easier_than_the_actual_putnam} TRIP 写真を撮ったのはどこの道路か、という問題。 「exiftool」で見てみる $ exiftool trip.jpeg Create Date : 2024:04:18 05:54:34.337-04:00 Date/Time Original : 2024:04:18 05:54:34.337-04:00 Modify Date : 2024:04:18 05:54:34-04:00 GPS Altitude : 1 m Above Sea Level GPS Date/Time : 2024:04:18 09:54:33.79Z GPS Latitude : 37 deg 56' 23.60" N GPS Longitude : 75 deg 26' 17.11" W Circle Of Confusion : 0.008 mm Field Of View : 73.7 deg Focal Length : 6.8 mm (35 mm equivalent: 24.0 mm) GPS Position : 37 deg 56' 23.60" N, 75 deg 26' 17.11" W ビンゴ! GPS Position : 37 deg 56' 23.60" N, 75 deg 26' 17.11" W これをGoogleMapで探すと、、、 GoogleMap actf{chincoteague} CRYPTO ERM WHAT THE ENIGMA brht{d_imhw_cexhrmwyy_lbvkvqcf_ldcz} https://cryptii.com/pipes/enigma-machine エニグマでエンコードする 問題文の指示通りにセットしていけば大丈夫だった。 actf{i_love_enigmatic_machines_mwah} h_takara 173日前 読者になる 広告を非表示にする * もっと読む コメントを書く 2024-05-04 はじめてのMARKDOWN はじめてのMARKDOWN 「見たまま」で書くのが早いが、Markdownに挑戦してみることにした。 練習 強調 Markdown→Markdown 打消し線 Markdown 折り畳み PythonでHello World!を出力する print("Hello World!") 参考サイト:Markdown記法 チートシート h_takara 210日前 読者になる 広告を非表示にする * もっと読む コメントを書く 2024-03-27 PICOCTF2024 WRITEUP 開催期間:2024/3/13 1:00am ~ 2024/3/27 4:00am 自分で説いた問題だけ。 * Web * WebDecode(50pt) * Unminify(100pt) * Cryptgraphy * interencode(50pt) * Forensics * Scan Surprise(50pt) * Verify(50pt) * CanYouSee(100pt) * Secret of the Polyglot(100pt) * General Skills * Time Machine(50pt) * Blame Game(75pt) * Collaborative Development(75pt) * binhexa(100pt) * Binary Search(100pt) * endianness(200pt) * Binary Exploitation * format string 0(50pt) * heap 0(50pt) WEB WEBDECODE(50PT) > Do you know how to use the web inspector? > Start searching here to find the flag リンク飛んでみると、 「HOME」「ABOUT」「CONTACT」がある。 それぞれのソースコードを見ていくと「ABOUT」のソースコードに怪しげな文字列がある。 cGljb0NURnt3ZWJfc3VjYzNzc2Z1bGx5X2QzYzBkZWRfMTBmOTM3NmZ9 CyberChefでデコードしてみるとbase64でフラグが得られた。 picoCTF{web_succ3ssfully_d3c0ded_10f9376f} UNMINIFY(100PT) > I don't like scrolling down to read the code of my website, so I've squished > it. As a bonus, my pages load faster! > Browse here, and find the flag! とりあえずリンク飛んでみる。 ソースコード見ても怪しそうなものはない。 「curlコマンドでリクエスト送ってみるか」と思いやったところビンゴ。 picoCTF{pr3tty_c0d3_ed938a7e} CRYPTGRAPHY INTERENCODE(50PT) > Can you get the real meaning from this file. > Download the file here. ダウンロードファイルの中身見てみる。 YidkM0JxZGtwQlRYdHFhR3g2YUhsZmF6TnFlVGwzWVROclh6YzRNalV3YUcxcWZRPT0nCg== 末尾に「==」があるからいったんbase64でデコードしてみる。 $cat a.py import base64 encoded_string = "YidkM0JxZGtwQlRYdHFhR3g2YUhsZmF6TnFlVGwzWVROclh6YzRNalV3YUcxcWZRPT0nCg==" decoded_bytes = base64.b64decode(encoded_string) decoded_string = decoded_bytes.decode('utf-8') print(decoded_string) $python3 a.py b'd3BqdkpBTXtqaGx6aHlfazNqeTl3YTNrXzc4MjUwaG1qfQ==' Pythonのバイト文字列が得られたのでもう1回デコード $cat b.py import base64 encoded_string = b'd3BqdkpBTXtqaGx6aHlfazNqeTl3YTNrXzc4MjUwaG1qfQ==' decoded_string = base64.b64decode(encoded_string).decode('utf-8') print(decoded_string) $python3 b.py wpjvJAM{jhlzhy_k3jy9wa3k_78250hmj} ここまでこればROTで合わせれば出るでしょう。 ROT19でフラグ見えた。 picoCTF{caesar_d3cr9pt3d_78250afc} FORENSICS SCAN SURPRISE(50PT) > I've gotten bored of handing out flags as text. Wouldn't it be cool if they > were an image instead? > You can download the challenge files here: > challenge.zip launchしたらsshのコマンドが見えるようになるけど、 zipファイルを解凍してみるとQRコードがあるのでそれを読み込んでみるとフラグがでてくる。 picoCTF{p33k_@_b00_b5ce2572} VERIFY(50PT) > People keep trying to trick my players with imitation flags. I want to make > sure they get the real thing! I'm going to provide the SHA-256 hash and a > decrypt script to help you know that my flags are legitimate. > You can download the challenge files here: > challenge.zip > The same files are accessible via SSH here: > ssh -p 64446 ctf-player@rhea.picoctf.net > Using the password 1ad5be0d. Accept the fingerprint with yes, and ls once > connected to begin. Remember, in a shell, passwords are hidden! > Checksum: 5848768e56185707f76c1d74f34f4e03fb0573ecc1ca7b11238007226654bcda > To decrypt the file once you've verified the hash, run ./decrypt.sh > files/<file>. launchしてsshで接続してみる。 files以下にtextファイルがたくさんある。 sha256で復号してみてChecksumと同じ文字列を探す。 $sha256sum files/* | grep 5848768e56185707f76c1d74f34f4e03fb0573ecc1ca7b11238007226654bcda 5848768e56185707f76c1d74f34f4e03fb0573ecc1ca7b11238007226654bcda files/8eee7195 「8eee7195」と一致したのでシェルスクリプトを実行。 $./decrypt.sh files/8eee7195 picoCTF{trust_but_verify_8eee7195} picoCTF{trust_but_verify_8eee7195} CANYOUSEE(100PT) > How about some hide and seek? > Download this file here. zipファイル解凍したらjpgが出てくる 写真見ても何もわからない qiita.com こういう時にこのサイト見てForensics解けばほぼできる。(笑) 1番最初にexiftoolでjpg見てみる。 $exiftool ukn_reality.jpg ExifTool Version Number : 12.40 File Name : ukn_reality.jpg Directory : . File Size : 2.2 MiB File Modification Date/Time : 2024:02:16 07:40:17+09:00 File Access Date/Time : 2024:03:23 00:03:48+09:00 File Inode Change Date/Time : 2024:03:13 18:59:09+09:00 File Permissions : -rwxrwxrwx File Type : JPEG File Type Extension : jpg MIME Type : image/jpeg JFIF Version : 1.01 Resolution Unit : inches X Resolution : 72 Y Resolution : 72 XMP Toolkit : Image::ExifTool 11.88 Attribution URL : cGljb0NURntNRTc0RDQ3QV9ISUREM05fNGRhYmRkY2J9Cg== Image Width : 4308 Image Height : 2875 Encoding Process : Baseline DCT, Huffman coding Bits Per Sample : 8 Color Components : 3 Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2) Image Size : 4308x2875 Megapixels : 12.4 怪しい文字列発見 cGljb0NURntNRTc0RDQ3QV9ISUREM05fNGRhYmRkY2J9Cg== base64でデコードしてみるとゲット picoCTF{ME74D47A_HIDD3N_4dabddcb} SECRET OF THE POLYGLOT(100PT) > The Network Operations Center (NOC) of your local institution picked up a > suspicious file, they're getting conflicting information on what type of file > it is. They've brought you in as an external expert to examine the file. Can > you extract all the information from this strange file? > Download the suspicious file here. pdfとpngファイルがあるので開いてみる。 flag2of2-final.pngにはフラグの前半部分が書いてある。 flag2of2-final.pdfにはフラグの後半部分が書いてある。 ※pdfファイルはadobeなどのツールだと開けないのでChromeかEgdeで開くとフラグが見れる。 合体すると picoctf{f1u3n7_1n_pn9_&_pdf_249d05c0} GENERAL SKILLS TIME MACHINE(50PT) > What was I last working on? I remember writing a note to help me remember... > You can download the challenge files here: > challenge.zip とりあえずzipファイル解凍してみると $cat message.txt This is what I was working on, but I'd need to look at my commit history to know why... 見えなかった。 ヒント見ると、 https://primer.picoctf.org/#_git_version_control にgitコマンドがいろいろ書いてある。 $git log commit b92bdd8ec87a21ba45e77bd9bed3e4893faafd0f (HEAD -> master) Author: picoCTF <ops@picoctf.com> Date: Sat Mar 9 21:10:29 2024 +0000 picoCTF{t1m3m@ch1n3_5cde9075} 「git log」で見えた。 picoCTF{t1m3m@ch1n3_5cde9075} BLAME GAME(75PT) > Someone's commits seems to be preventing the program from working. Who is it? > You can download the challenge files here: > challenge.zip zipファイル解凍していろいろやってみたが、わからなかったのでヒント見てみた。 前問と同じようにgit logコマンドを打ってみるが、引数に「message.py」を指定するとフラグが見える。 $git log message.py commit fadeca9476b6713ec8cdda633aca9e9aebffc698 Author: picoCTF{@sk_th3_1nt3rn_e9957ce1} <ops@picoctf.com> Date: Sat Mar 9 21:09:11 2024 +0000 optimize file size of prod code commit 2dd46769e2d65656bb14aed0ff5d3237daaa7d9d Author: picoCTF <ops@picoctf.com> Date: Sat Mar 9 21:09:11 2024 +0000 create top secret project picoCTF{@sk_th3_1nt3rn_e9957ce1} COLLABORATIVE DEVELOPMENT(75PT) > My team has been working very hard on new features for our flag printing > program! I wonder how they'll work together? > You can download the challenge files here: > challenge.zip zipファイル解凍してみて、pythonファイル見てみると print("Printing the flag...") つまり、何らかの操作をしたらここにフラグが書き込まれるっぽい。 ヒント見てみると、git branchしてブランチの中身をmainブランチにマージしてフラグを得るという方向性が定まった。 $git branch -a feature/part-1 feature/part-2 feature/part-3 * main $git checkout main $git merge feature/part-1 Merge made by the 'ort' strategy. flag.py | 1 + 1 file changed, 1 insertion(+) $cat flag.py print("Printing the flag...") print("picoCTF{t3@mw0rk_", end='') feature/part-2,3も同様にやっていけばいい。 ※注意点として1つのブランチをマージした後はコミットすること。 $cat flag.py print("Printing the flag...") <<<<<<< HEAD <<<<<<< HEAD print("picoCTF{t3@mw0rk_", end='') ======= print("m@k3s_th3_dr3@m_", end='') >>>>>>> feature/part-2 ======= print("w0rk_7ffa0077}") >>>>>>> feature/part-3 picoCTF{t3@mw0rk_m@k3s_th3_dr3@m_w0rk_7ffa0077} BINHEXA(100PT) > nc titan.picoctf.net 50971 とりあえずncでアクセスしてみる。 $nc titan.picoctf.net 50971 Welcome to the Binary Challenge!" Your task is to perform the unique operations in the given order and find the final result in hexadecimal that yields the flag. Binary Number 1: 10100001 Binary Number 2: 10110011 6つの質問に全て正解するとフラグが得られるらしい Question 1/6: Operation 1: '&' Perform the operation on Binary Number 1&2. Enter the binary result: 10100001 Correct! Question 2/6: Operation 2: '>>' Perform a right shift of Binary Number 2 by 1 bits . Enter the binary result: 01011001 Correct! Question 3/6: Operation 3: '+' Perform the operation on Binary Number 1&2. Enter the binary result: 101010100 Correct! Question 4/6: Operation 4: '|' Perform the operation on Binary Number 1&2. Enter the binary result: 10110011 Correct! Question 5/6: Operation 5: '<<' Perform a left shift of Binary Number 1 by 1 bits. Enter the binary result: 101000010 Correct! Question 6/6: Operation 6: '*' Perform the operation on Binary Number 1&2. Enter the binary result: 111000010010011 Correct! Incorrect answer! Enter the results of the last operation in hexadecimal: 7093 Correct answer! The flag is: picoCTF{b1tw^3se_0p3eR@tI0n_su33essFuL_6ab1ad84} picoCTF{b1tw^3se_0p3eR@tI0n_su33essFuL_6ab1ad84} ※再びアクセスしてみるとBinaryNumberや問題の順番が変わってたりするのでご自身で解いてみてください! BINARY SEARCH(100PT) > Want to play a game? As you use more of the shell, you might be interested in > how they work! Binary search is a classic algorithm used to quickly find an > item in a sorted list. Can you find the flag? You'll have 1000 possibilities > and only 10 guesses. > Cyber security often has a huge amount of data to look through - from logs, > vulnerability reports, and forensics. Practicing the fundamentals manually > might help you in the future when you have to write your own tools! > You can download the challenge files here: > challenge.zip > Additional details will be available after launching your challenge instance. launchしてsshでアクセスしてみる。 問題文にもあるように10回の探索で(おそらく)0~1000までの数を当てるとフラグが得られる。 $ssh -p 63620 ctf-player@atlas.picoctf.net The authenticity of host '[atlas.picoctf.net]:63620 ([18.217.83.136]:63620)' can't be established. ED25519 key fingerprint is SHA256:M8hXanE8l/Yzfs8iuxNsuFL4vCzCKEIlM/3hpO13tfQ. This host key is known by the following other names/addresses: ~/.ssh/known_hosts:4: [hashed name] Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '[atlas.picoctf.net]:63620' (ED25519) to the list of known hosts. ctf-player@atlas.picoctf.net's password: Welcome to the Binary Search Game! I'm thinking of a number between 1 and 1000. Enter your guess: 500 Lower! Try again. Enter your guess: 250 Lower! Try again. Enter your guess: 125 Lower! Try again. Enter your guess: 70 Higher! Try again. Enter your guess: 90 Lower! Try again. Enter your guess: 80 Congratulations! You guessed the correct number: 80 Here's your flag: picoCTF{g00d_gu355_3af33d18} Connection to atlas.picoctf.net closed. 2¹⁰=1024なので2分探索をすれば最大10回で見つかるのです。 picoCTF{g00d_gu355_3af33d18} ENDIANNESS(200PT) > Know of little and big endian? > Additional details will be available after launching your challenge instance. launchしてncでアクセスする。 リトルエンディアンとビックエンディアンを答える問題 $nc titan.picoctf.net 59731 Welcome to the Endian CTF! You need to find both the little endian and big endian representations of a word. If you get both correct, you will receive the flag. Word: ubqro Enter the Little Endian representation: 6F72716275 Correct Little Endian representation! Enter the Big Endian representation: 756271726F Correct Big Endian representation! Congratulations! You found both endian representations correctly! Your Flag is: picoCTF{3ndi4n_sw4p_su33ess_817b7cfe} picoCTF{3ndi4n_sw4p_su33ess_817b7cfe} BINARY EXPLOITATION FORMAT STRING 0(50PT) > Can you use your knowledge of format strings to make the customers happy? > Download the binary here. > Download the source here. > Additional details will be available after launching your challenge instance. launchして、ncでアクセス。 3つのバーガーの中から1つ入力してその質問を2問連続で正解したらフラグが得られる。(PatrickとBobを喜ばせようww) 以下ソースコード(format-string-0.c) #include #include #include #include #include #include <sys/types.h> #define BUFSIZE 32 #define FLAGSIZE 64 char flag[FLAGSIZE]; void sigsegv_handler(int sig) { printf("\n%s\n", flag); fflush(stdout); exit(1); } int on_menu(char *burger, char *menu[], int count) { for (int i = 0; i < count; i++) { if (strcmp(burger, menu[i]) == 0) return 1; } return 0; } void serve_patrick(); void serve_bob(); int main(int argc, char **argv){ FILE *f = fopen("flag.txt", "r"); if (f == NULL) { printf("%s %s", "Please create 'flag.txt' in this directory with your", "own debugging flag.\n"); exit(0); } fgets(flag, FLAGSIZE, f); signal(SIGSEGV, sigsegv_handler); gid_t gid = getegid(); setresgid(gid, gid, gid); serve_patrick(); return 0; } void serve_patrick() { printf("%s %s\n%s\n%s %s\n%s", "Welcome to our newly-opened burger place Pico 'n Patty!", "Can you help the picky customers find their favorite burger?", "Here comes the first customer Patrick who wants a giant bite.", "Please choose from the following burgers:", "Breakf@st_Burger, Gr%114d_Cheese, Bac0n_D3luxe", "Enter your recommendation: "); fflush(stdout); char choice1[BUFSIZE]; scanf("%s", choice1); char *menu1[3] = {"Breakf@st_Burger", "Gr%114d_Cheese", "Bac0n_D3luxe"}; if (!on_menu(choice1, menu1, 3)) { printf("%s", "There is no such burger yet!\n"); fflush(stdout); } else { int count = printf(choice1); if (count > 2 * BUFSIZE) { serve_bob(); } else { printf("%s\n%s\n", "Patrick is still hungry!", "Try to serve him something of larger size!"); fflush(stdout); } } } void serve_bob() { printf("\n%s %s\n%s %s\n%s %s\n%s", "Good job! Patrick is happy!", "Now can you serve the second customer?", "Sponge Bob wants something outrageous that would break the shop", "(better be served quick before the shop owner kicks you out!)", "Please choose from the following burgers:", "Pe%to_Portobello, $outhwest_Burger, Cla%sic_Che%s%steak", "Enter your recommendation: "); fflush(stdout); char choice2[BUFSIZE]; scanf("%s", choice2); char *menu2[3] = {"Pe%to_Portobello", "$outhwest_Burger", "Cla%sic_Che%s%steak"}; if (!on_menu(choice2, menu2, 3)) { printf("%s", "There is no such burger yet!\n"); fflush(stdout); } else { printf(choice2); fflush(stdout); } } $nc mimas.picoctf.net 49825 Welcome to our newly-opened burger place Pico 'n Patty! Can you help the picky customers find their favorite burger? Here comes the first customer Patrick who wants a giant bite. Please choose from the following burgers: Breakf@st_Burger, Gr%114d_Cheese, Bac0n_D3luxe Enter your recommendation: Gr%114d_Cheese Gr 4202954_Cheese Good job! Patrick is happy! Now can you serve the second customer? Sponge Bob wants something outrageous that would break the shop (better be served quick before the shop owner kicks you out!) Please choose from the following burgers: Pe%to_Portobello, $outhwest_Burger, Cla%sic_Che%s%steak Enter your recommendation: Cla%sic_Che%s%steak ClaCla%sic_Che%s%steakic_Che picoCTF{7h3_cu570m3r_15_n3v3r_SEGFAULT_c8362f05} 1つ目の質問は、BUFSIZE(=32)*2=64(文字)よりも長い文字数のバーガーを選ぶ ここで2つ目のバーガー「Gr%114d_Cheese」に注目する。 これは、printfで出力すると「%114d」が114文字分の空白を出力することななる。 つまり、この3つのバーガーの中で選ぶのは「Gr%114d_Cheese」となる。 2つ目の質問は、おそらくバッファオーバフローを起こして、 隠れたフラグを見えるようにするということだろう。 c言語の%sは文字列の出力が行われるのでCheの後ろにフラグが出力されていうのが分かる。 picoCTF{7h3_cu570m3r_15_n3v3r_SEGFAULT_c8362f05} HEAP 0(50PT) > Are overflows just a stack concern? > Download the binary here. > Download the source here. > Additional details will be available after launching your challenge instance. launchしてncでアクセス。 ソースコード見た感じ、バッファオーバフロー起こせばいい 以下ソースコード(chall.c) #include #include #include #define FLAGSIZE_MAX 64 // amount of memory allocated for input_data #define INPUT_DATA_SIZE 5 // amount of memory allocated for safe_var #define SAFE_VAR_SIZE 5 int num_allocs; char *safe_var; char *input_data; void check_win() { if (strcmp(safe_var, "bico") != 0) { printf("\nYOU WIN\n"); // Print flag char buf[FLAGSIZE_MAX]; FILE *fd = fopen("flag.txt", "r"); fgets(buf, FLAGSIZE_MAX, fd); printf("%s\n", buf); fflush(stdout); exit(0); } else { printf("Looks like everything is still secure!\n"); printf("\nNo flage for you :(\n"); fflush(stdout); } } void print_menu() { printf("\n1. Print Heap:\t\t(print the current state of the heap)" "\n2. Write to buffer:\t(write to your own personal block of data " "on the heap)" "\n3. Print safe_var:\t(I'll even let you look at my variable on " "the heap, " "I'm confident it can't be modified)" "\n4. Print Flag:\t\t(Try to print the flag, good luck)" "\n5. Exit\n\nEnter your choice: "); fflush(stdout); } void init() { printf("\nWelcome to heap0!\n"); printf( "I put my data on the heap so it should be safe from any tampering.\n"); printf("Since my data isn't on the stack I'll even let you write whatever " "info you want to the heap, I already took care of using malloc for " "you.\n\n"); fflush(stdout); input_data = malloc(INPUT_DATA_SIZE); strncpy(input_data, "pico", INPUT_DATA_SIZE); safe_var = malloc(SAFE_VAR_SIZE); strncpy(safe_var, "bico", SAFE_VAR_SIZE); } void write_buffer() { printf("Data for buffer: "); fflush(stdout); scanf("%s", input_data); } void print_heap() { printf("Heap State:\n"); printf("+-------------+----------------+\n"); printf("[*] Address -> Heap Data \n"); printf("+-------------+----------------+\n"); printf("[*] %p -> %s\n", input_data, input_data); printf("+-------------+----------------+\n"); printf("[*] %p -> %s\n", safe_var, safe_var); printf("+-------------+----------------+\n"); fflush(stdout); } int main(void) { // Setup init(); print_heap(); int choice; while (1) { print_menu(); int rval = scanf("%d", &choice); if (rval == EOF){ exit(0); } if (rval != 1) { //printf("Invalid input. Please enter a valid choice.\n"); //fflush(stdout); // Clear input buffer //while (getchar() != '\n'); //continue; exit(0); } switch (choice) { case 1: // print heap print_heap(); break; case 2: write_buffer(); break; case 3: // print safe_var printf("\n\nTake a look at my variable: safe_var = %s\n\n", safe_var); fflush(stdout); break; case 4: // Check for win condition check_win(); break; case 5: // exit return 0; default: printf("Invalid choice\n"); fflush(stdout); } } } とりあえずやってみる $nc tethys.picoctf.net 61026 Welcome to heap0! I put my data on the heap so it should be safe from any tampering. Since my data isn't on the stack I'll even let you write whatever info you want to the heap, I already took care of using malloc for you. Heap State: +-------------+----------------+ [*] Address -> Heap Data +-------------+----------------+ [*] 0x55fa48c272b0 -> pico +-------------+----------------+ [*] 0x55fa48c272d0 -> bico +-------------+----------------+ 1. Print Heap: (print the current state of the heap) 2. Write to buffer: (write to your own personal block of data on the heap) 3. Print safe_var: (I'll even let you look at my variable on the heap, I'm confident it can't be modified) 4. Print Flag: (Try to print the flag, good luck) 5. Exit Enter your choice: 1 Heap State: +-------------+----------------+ [*] Address -> Heap Data +-------------+----------------+ [*] 0x55fa48c272b0 -> pico +-------------+----------------+ [*] 0x55fa48c272d0 -> bico +-------------+----------------+ 1. Print Heap: (print the current state of the heap) 2. Write to buffer: (write to your own personal block of data on the heap) 3. Print safe_var: (I'll even let you look at my variable on the heap, I'm confident it can't be modified) 4. Print Flag: (Try to print the flag, good luck) 5. Exit Enter your choice: 2 Data for buffer: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1. Print Heap: (print the current state of the heap) 2. Write to buffer: (write to your own personal block of data on the heap) 3. Print safe_var: (I'll even let you look at my variable on the heap, I'm confident it can't be modified) 4. Print Flag: (Try to print the flag, good luck) 5. Exit Enter your choice: 3 Take a look at my variable: safe_var = a 1. Print Heap: (print the current state of the heap) 2. Write to buffer: (write to your own personal block of data on the heap) 3. Print safe_var: (I'll even let you look at my variable on the heap, I'm confident it can't be modified) 4. Print Flag: (Try to print the flag, good luck) 5. Exit Enter your choice: 44 Invalid choice 1. Print Heap: (print the current state of the heap) 2. Write to buffer: (write to your own personal block of data on the heap) 3. Print safe_var: (I'll even let you look at my variable on the heap, I'm confident it can't be modified) 4. Print Flag: (Try to print the flag, good luck) 5. Exit Enter your choice: 4 YOU WIN picoCTF{my_first_heap_overflow_1ad0e1a6} 1~5の入力を受け付けて、それ以外の番号を入れると再入力を求められる。 2を入れると「pico」が入っているバッファを書き換えることができる。 このバッファは32bitなので32文字目まで入り、あふれるとbicoが書き換わる。 ソースコードからbicoが書き換わればフラグが得られそうなので、 入力で以下のようにすればいい。 Enter your choice: 2 Data for buffer: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa picoCTF{my_first_heap_overflow_1ad0e1a6} #picoCTF2024 #CTF h_takara 248日前 読者になる 広告を非表示にする * もっと読む コメントを書く 次のページ プロフィール h_takara 読者です 読者をやめる 読者になる 読者になる 1 このブログについて 検索 リンク * はてなブログ * ブログをはじめる * 週刊はてなブログ * はてなブログPro 最新記事 * Windows24H2でsudoが使えるようになった話 * Forensics(Steganographyについて) * IRON CTF 2024 Writeup(Crypto/Random Pixels) * Diver OSINT CTF 2024 * angstromCTF 2024 Writeup 月別アーカイブ * ▼ ▶ 2024 (7) * 2024 / 10 (3) * 2024 / 6 (2) * 2024 / 5 (1) * 2024 / 3 (1) * ▼ ▶ 2023 (2) * 2023 / 12 (1) * 2023 / 11 (1) h_takara’s blog Powered by Hatena Blog | ブログを報告する 引用をストックしました ストック一覧を見る 閉じる 引用するにはまずログインしてください ログイン 閉じる 引用をストックできませんでした。再度お試しください 閉じる 限定公開記事のため引用できません。 読者です 読者をやめる 読者になる 読者になる 1