16-08-29

本日のコード

☆以下のようなものを思いついた。
要素が含まれるが一意でない場合と、
要素自体が存在しない場合で返り値を区別した。

module Enumerable
  def is_unique(x)
    if include? x
      index(x) == rindex(x)
    else
      nil
    end
  end
end

☆相変わらず、

a = ["a", "b", "c"]
puts a * " "    # => "a b c"

とできる感覚が分からないので今後解明したい。

☆以下は(確率でいう)独立な試行(取り出した玉を箱に戻すパターン)
に相当すると思っていたが(実際そうだが)..

b = ["blue", "red"]
puts [b.sample, b.sample, b.sample].inspect

単に、メソッドが破壊的でないだけということに気づいた
(見方の問題)。

Write-upを読んだ

google-ctf-2016 flag-storage-service-175

ブラインドSQL(GQL?)問題。
GQLではLIKE %ができないらしく(?多分)
charの比較によって文字を絞り込んでいくという趣旨だった。
(以下はMySQLのサンプル)

CREATE TABLE blind (
username VARCHAR(32),
password VARCHAR(32)
);

INSERT INTO blind
SET username="saito",
password="sait0123";

のような状況で、LIKE %~を使わずパスワードを調べるには

-- password >= ?の部分をを"a"、"b"、...と変更していく
-- usernameはあらかじめ分かるようになっていた

-- password >= "s"まで来た時
-- レコード自体は取得できている
SELECT * FROM blind
WHERE username="saito"
AND password >= "s" AND password < "z";

-- "t"まで来た時
-- Empty set(該当レコードなし)
SELECT * FROM blind
WHERE username="saito"
AND password >= "t" AND password < "z";

のようにする。
"t"まで来た時点でレコードが取得できなくなることを利用する。
(印字される画面orメッセージの変化を感じ取る。)

Write-upを呼んだ(2)

google-ctf-2016 final-destination-200

iframeに任意のアドレスを指定する場合、

<iframe/src=//2130706433></iframe>

とする(これで127.0.0.1となる)。
[課題]Phantomjsを使ってみる。

本日のコード(2)

-- テーブル構造の異なるテーブル
CREATE TABLE union_user (
id INT,
name VARCHAR(32)
);

INSERT INTO union_user
VALUES
(1, "gaji"), (2, "tai"), (3, "hashimoto");

CREATE TABLE union_customer (
name VARCHAR(32)
);

INSERT INTO union_customer
VALUES
("watanabe"), ("saito"), ("minami");

以上のような状況で、カラム数の多い方のデータを、他テーブルの
カラムとともにUNIONですべて取得したい場合は,

SELECT * FROM union_user
UNION
SELECT name, 2 FROM union_customer;

とする(2の部分は何でもよい)。

今日見たヘッダ

X-XSS-Protection: 1
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XRDS-Location: http:~

他に

Write-upをざっと読んでいて、

  • Protocol Buffer
  • JWT (JSON Web Token)

が出てきた。