분류 전체보기(324)
-
The secret of a Queen 풀이
문제에서 주워진 그림을 보니 같은 문자가 여러 개 보입니다. 아마도 한 개의 문자는 어떠한 한 개의 글자를 가리키는 것 같습니다. 만약 제 유추가 맞다면 이 사진만으로는 문제를 풀 수 없으니 구글에 서칭을 조금 해봤습니다. 구글에 "the secret of a queen"이라고 검색한 뒤 이미지에 들어가 보니 이런 사진이 나왔습니다. 근데 이거 저작권 괜찮은건가..? 써도 되는 거겠죠? 이 사진과 문제에서 주어진 사진을 번갈아가며 하나하나 키를 대칭해서 찾았습니다. htb babingtonplot 처음에는 이렇게 답을 찾았습니다. 하지만 Hack The Box에서는 FLAG를 낼 때 HTB{~~~~}의 형식으로 내야한다는걸 생각했습니다. 그래서 모든 문자를 대문자로 바꾸고, 공백을 중괄호로 바꿨습니다. ..
2021.07.09 -
Canvas 풀이
(function(_0x173c04, _0x4e0b6e) { var _0x20fedb = function(_0x2548ec) { while (--_0x2548ec) { _0x173c04['\x70\x75\x73\x68'](_0x173c04['\x73\x68\x69\x66\x74']()); } }, _0x544f36 = function() { var _0x4c641a = { '\x64\x61\x74\x61': { '\x6b\x65\x79': '\x63\x6f\x6f\x6b\x69\x65', '\x76\x61\x6c\x75\x65': '\x74\x69\x6d\x65\x6f\x75\x74' }, '\x73\x65\x74\x43\x6f\x6f\x6b\x69\x65': function(_0x35c856, _0x1..
2021.06.19 -
x64 Buffer Overflow 풀이
int __cdecl main(int argc, const char **argv, const char **envp) { char s; // [rsp+10h] [rbp-110h] int v5; // [rsp+11Ch] [rbp-4h] _isoc99_scanf("%s", &s, envp); v5 = strlen(&s); printf("Hello %s\n", &s); return 0; } int callMeMaybe() { char *path; // [rsp+0h] [rbp-20h] const char *v2; // [rsp+8h] [rbp-18h] __int64 v3; // [rsp+10h] [rbp-10h] path = "/bin/bash"; v2 = "-p"; v3 = 0LL; return execve(..
2021.06.16 -
Basic_BOF #2 풀이
이 문제도 Basic_BOF #1와 같이 IDA로 먼저 보고 시작하겠습니다. int __cdecl main(int argc, const char **argv, const char **envp) { char s; // [esp+Ch] [ebp-8Ch] void (*v5)(void); // [esp+8Ch] [ebp-Ch] v5 = (void (*)(void))sup; fgets(&s, 133, stdin); v5(); return 0; } 우선 char형 배열 s를 선언하고, 포인터 변수인 v5를 선언합니다. 여기서 s의 길이는 여기서 v5는 sup이라는 함수(?)를 가리키고 있는 함수 포인터인 것 같습니다. 그리고 fgets로 133byte 길이의 s 배열을 입력받습니다. 마지막에는 v5 함수 포인터가 ..
2021.06.16 -
Basic_BOF #1 풀이
문제 파일인 bof_basic이 바이너리 파일로 주어졌으니 IDA를 이용해서 C 소스파일의 형태로 보겠습니다. int __cdecl main(int argc, const char **argv, const char **envp) { char s; // [esp+4h] [ebp-34h] int v5; // [esp+2Ch] [ebp-Ch] v5 = 67305985; fgets(&s, 45, stdin); printf("\n[buf]: %s\n", &s); printf("[check] %p\n", v5); if ( v5 != 67305985 && v5 != -559038737 ) puts("\nYou are on the right way!"); if ( v5 == -559038737 ) { puts("Yeah..
2021.06.15 -
Socket Programming
- 소켓(Socket)이란? 소켓의 사전적 정의는 "컴퓨터 네트워크를 경유하는 프로세스 간 통신의 종착점"입니다. 이를 간단하게 풀어 생각하면 데이터를 송수신 할 때 쓰이는 하나의 방이라고 생각하면 될 것 같습니다. - Socket과 http의 차이 둘의 차이를 표로 정리하여 비교해보면 이렇습니다. Socket http 단방향 통신(Client->Server) 양방향 통신 서버로 접근해야 할 때 용이 실시간 연결 할 때 용이 자원을 적게 소모 자원을 많이 소모 소켓은 여러가지 분야에 널리 사용됩니다. - 서버와 클라이언트의 소켓통신 과정 (소켓 프로그래밍) socket() 함수를 사용하여 소켓을 생성해줍니다. 그리고 서버에서 bind() 함수를 사용합니다. bind() 함수는 client가 아닌 serv..
2021.06.14