撤退

参加報告を記します.

SecHack365 に参加します。

参加できるとのことなので、参加します。 これから1年間よろしくお願いいたします。

Effective Python ―Pythonプログラムを改良する59項目 を読んだ

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

Python を書くにあたって気を付けると良いことを 59 個の項目にわたって説明しています。

もちろん、どの言語だろうと変わらないプログラムを書く上で気を付けるべきことも言語化されているので、なんとなく感じていたことを確認できることも多いと思います。 以下のような項目が特に勉強になりました。

  • Python でのクロージャの細かい動作
  • デコレータの様々な使い方
  • Python の実装による multithread の並列性の限界

GitHub などで Python プロダクトのソースコードを読んだ時に、見たことのない書き方を見かけたらこの本を一度読んでみても良いかもしれません。

katagaitai #7, #8 に行った

katagaitai #7, #8 に行った

今回は2日連続で長丁場になりましたが,最後まで濃密でとても面白かったです. 引き続き頑張っていきます.

続きを読む

CTF for ビギナーズ Final に参加した。( bin 300 Writeup )

SECCON Online 予選で pwn が全くできないということが身に染みて分かったので,論発表直前でしたが ctf4b final に行きました. 関係者の皆様ありがとうございました.

結果は4位だったのでとても辛かったです. 2問目の forensic 200, web 200 の union select を用いた sqli で凡ミスをしてしまったのが原因といったところだと思います. 引き続き頑張っていきたいと思います.

bin300 の Write up だけ書こうと思います.

ctf4b bin 300 Cipher

checksec

RELRO           STACK CANARY      NX            PIE             RPATH      RUNPATH      FORTIFY Fortified Fortifiable  FILE
Partial RELRO   Canary found      NX enabled    No PIE          No RPATH   No RUNPATH   Yes     0               4    bin300

解法

main() 関数にて流れを追うと次のことがわかる.

  • 文字列を入力に取る
  • check_flag() 関数を呼ぶ
  • 戻り値が 0 なら "Correct!\n" そうでないなら "Wrong...\n" を出力する.

Flag を入力すると check_flag() 関数の戻り値が 0 になることがわかる. check_flag() 関数は次のようなことを行っている.

int check_flag(char *input_str)
{
  char encrypted[] = encrypted flag;
  char* buf;

  srand(0);
  buf = malloc(strlen(input_str) + 1);

  for (int i = 0; input_str[i]; i++)
    buf[i] = input_str[i] ^ rand();

  return strcmp(encrypted, buf);
}

それぞれの変数とアドレスの対応は次のようになっている.

  • [ebp-0x2c] buf
  • [ebp-0x30] i
  • [ebp-0x3c] input_str

solver は次にようになった.

LKMのページを userspace にマップする。

LKMのページを userspace にマップする。

LKM のページを userspace にマップできると構造体を共有できていろいろと便利。 このやり方はKVMで使われていて、それを参考にして簡略化したものを実装してみた。 百聞は一見に如かずということでデモのコード。

github.com

続きを読む

/proc/iomem で user 権限だとアドレスが 00000000 としか表示されない.

mmio のマップされているアドレスを確認しようとしたときに,手元の環境だと表示されたり表示されなかったりしたので,原因がわからず調べまわっていたら出てきた.

Linux Kernel 4.6以上だと privileged users でないとマップされているアドレスが表示されなくなったとのこと.

セキュリティ・キャンプ2016に行った

  • セキュリティ・キャンプ2016感想
    • 動機
    • 応募用紙
      • 10
      • 1
    • 事前課題
    • 専門講義
    • 専門講義以外
    • 生活
    • スポンサー向け画像
    • 終わりに

セキュリティ・キャンプ2016感想

行ったぞ。

続きを読む