Hi guys,
I’m trying to solve the ropme challenge. I got it pretty much doing what I want. I can call arbitrary functions of glibc. Now I’m trying to spawn a shell using system
. I pass the string via rdi
, looks good to me when I bp system
, but no shell is spawned. When I call puts
with the same argument the string I’m trying to execute is printed.
Would really appreciate if somebody could give me a hint!
stack trace:
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── registers ────
$rax : 0x0
$rbx : 0x0
$rcx : 0xf
$rdx : 0x00007f162f6fc8d0 → 0x0000000000000000
$rsp : 0x00007ffcf6d450d0 → 0x00007f162f352120 → <exit+0> lea rsi, [rip+0x3a85f1] # 0x7f162f6fa718
$rbp : 0x4141414141414141 ("AAAAAAAA"?)
$rsi : 0x00007ffcf6d45070 → "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA[...]"
$rdi : 0x00007f162f4c2e9a → 0x0068732f6e69622f ("/bin/sh"?)
$rip : 0x00007f162f35e440 → <system+0> test rdi, rdi
$r8 : 0x00000000024576d9 → 0x0000000000000000
$r9 : 0x00007f162f6fc8d0 → 0x0000000000000000
$r10 : 0x00007f162f91c4c0 → 0x00007f162f91c4c0 → [loop detected]
$r11 : 0x246
$r12 : 0x0000000000400530 → <_start+0> xor ebp, ebp
$r13 : 0x00007ffcf6d45170 → 0x0000000000000001
$r14 : 0x0
$r15 : 0x0
$eflags: [ZERO carry PARITY adjust sign trap INTERRUPT direction overflow resume virtualx86 identification]
$cs: 0x0033 $ss: 0x002b $ds: 0x0000 $es: 0x0000 $fs: 0x0000 $gs: 0x0000
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── stack ────
0x00007ffcf6d450d0│+0x0000: 0x00007f162f352120 → <exit+0> lea rsi, [rip+0x3a85f1] # 0x7f162f6fa718 ← $rsp
0x00007ffcf6d450d8│+0x0008: 0x00007ffcf6d4000a → 0x0000000000000000
0x00007ffcf6d450e0│+0x0010: 0x0000000000000000
0x00007ffcf6d450e8│+0x0018: 0x0000000000000000
0x00007ffcf6d450f0│+0x0020: 0xf142e57213da8789
0x00007ffcf6d450f8│+0x0028: 0xf09756bca4048789
0x00007ffcf6d45100│+0x0030: 0x0000000000000000
0x00007ffcf6d45108│+0x0038: 0x0000000000000000
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── code:x86:64 ────
0x7f162f35e435 add BYTE PTR [rax], 0x0
0x7f162f35e438 add BYTE PTR [rbx-0x3d], bl
0x7f162f35e43b nop DWORD PTR [rax+rax*1+0x0]
→ 0x7f162f35e440 <system+0> test rdi, rdi
0x7f162f35e443 <system+3> je 0x7f162f35e450 <system+16>
0x7f162f35e445 <system+5> jmp 0x7f162f35deb0
0x7f162f35e44a <system+10> nop WORD PTR [rax+rax*1+0x0]
0x7f162f35e450 <system+16> lea rdi, [rip+0x164a4b] # 0x7f162f4c2ea2
0x7f162f35e457 <system+23> sub rsp, 0x8
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── threads ────
[#0] Id 1, Name: "ropme", stopped, reason: BREAKPOINT
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── trace ────
[#0] 0x7f162f35e440 → system()
[#1] 0x7f162f352120 → lea rsi, [rip+0x3a85f1] # 0x7f162f6fa718
[#2] 0x7ffcf6d4000a → add BYTE PTR [rax], al
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Breakpoint 1, 0x00007f162f35e440 in system () from /lib/x86_64-linux-gnu/libc.so.6