codepad.org
秋元さんの blog経由でこんなの発見
http://codepad.org/
がーん、似たようなものを作ろうとしてたのに先越されてしまった。
でもさすがに実行出来るページを公開しようとは思ってなかったな。
Cのコードを実行出来るなんてとっても危険な予感がする。破れるものなら破ってみろ見たいな事が書いてあるのでいろいろイタズラをしてみたけどほとんどのシステムコールは無効にされている様子。どのレベルで防いでいるのか解らなかったのでスタックに置いたコードから system call を呼んでみる。
これは、「/etc/passwd を open(2) して返値を表示するコード」をスタックに置いて実行するプログラム。アセンブリコードは以下の通り
segment .text
global _start
_start:
push ebp
mov ebp, esp
mov eax, 0x00647773
push eax
mov eax, 0x7361702f
push eax
mov eax, 0x6374652f
push eax
mov eax, 5 ;write
mov ebx, esp
mov ecx, 0
int 0x80
add eax, '0'
push eax
mov eax, 4 ;write
mov ebx, 1 ;stdout
mov ecx, esp
mov edx, 1
int 0x80
leave
ret
上手くいけば open(2) したファイルディスクリプタが表示されるはずなんだけど、がっちり防がれている。
kernel に 手を入れて system call 制御しているのかなと思ったんだけど、良く読むと ptrace で制御しているんだそうな。ptrace ってデバッグ用のシステムコールだと思ってたんだけどこんな事もできるんだな。今度使ってみたい。
Permanent Link: http://www.cuspy.org/blog/archives/586
Trackback URL: http://www.cuspy.org/blog/archives/586/trackback
Robert wrote related post…
Silk posts and stories…
Trackback by Robert wrote related post — 2008/06/19 Thursday @ 22:01:38