cuspy memo


codepad.org

2008/03/08 Saturday 00:06:06

秋元さんの blog経由でこんなの発見
http://codepad.org/

がーん、似たようなものを作ろうとしてたのに先越されてしまった。
でもさすがに実行出来るページを公開しようとは思ってなかったな。
Cのコードを実行出来るなんてとっても危険な予感がする。破れるものなら破ってみろ見たいな事が書いてあるのでいろいろイタズラをしてみたけどほとんどのシステムコールは無効にされている様子。どのレベルで防いでいるのか解らなかったのでスタックに置いたコードから system call を呼んでみる。

http://codepad.org/h9rGgGop

これは、「/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 ってデバッグ用のシステムコールだと思ってたんだけどこんな事もできるんだな。今度使ってみたい。

  1. Robert wrote related post…

    Silk posts and stories…

    Trackback by Robert wrote related post — 2008/06/19 Thursday @ 22:01:38

Leave a comment

You must be logged in to post a comment.

hoge