본문 바로가기

hacking/pwnable74

[Dream hack] cpp_string https://dreamhack.io/wargame/challenges/64 cpp_stringDescription 이 문제는 서버에서 작동하고 있는 서비스(cpp_string)의 바이너리와 소스 코드가 주어집니다. 프로그램의 취약점을 찾아 flag를 획득하세요! "flag" 파일의 내용을 워게임 사이트에 인증하dreamhack.io답먼저 코드가 너무 길어서 따로 전체 첨부는 하지 않느다.그리고 문제 코드에서 나오는 함수들의 설명은 자세히 하지 않는다.일단 먼저 read_flag(), read_file(), write_file(), show_contents() 함수들을 설명하고 간다.  이 함수는 test라는 파일을 열고 사용자로부티 데이터를 writebuffer에  입력받아서readbuffer의 크기만.. 2025. 3. 3.
[호출 규약] cdecl cdecl인자 정달 방식:'cdecl'에서는 인자를 스택을 통해 전달한다. 이때 인자들은 호출이 이루어지기 전에 스택에 push 되느넫마지막 인자부터 첫 번째 인자 순으로 거꾸로 push 된다. 사용하는 이유:호환성 보장: 다양한 컴파일러나 다른 호출 규약을 사용하는 시스템간의 호환성을 보장하기 위해 사용한다.쉽게 말해 어떤 시스템에서는 기본 호출 규약이 cdecl이 아닐 수도 있다.명시적 정의: 명시적으로 cdecl을 사용함으로써, 다름 사람이 코드를 이해하는데 도움을 준다. 예시int __attribute__((cdecl)) sum(int a, int b) { return a + b;}  참고앞에 __attribute__가 붙는 이유Microsoft Visual C++ 같은 컴파일러에선 'voi.. 2025. 3. 2.
[Assembly] c언어 코드를 어셈블리어로 변환하여 파일에 저장 1. 필요한 것GCC(GNU Compiler Collection) 컴파일러가 설치되어 있어야 한다.GCC는 Linux, maxOS, windows 등 대부분의 운영체제에서 사용할 수 있다. 2. 명령어GCC 컴파일러를 사용하여 c언어 코드를 어셈블리 코드로 변환하고자 할 때 아래 명령어를 사용한다.gcc -o [출력파일] [입력파일].c -m32 -S'gcc':GNU Compiler Collection의 약자로 여러 프로그래밍 언어의 컴파일을 지원하는 컴파일러 도구 모음 이다.'-o [출력파일]':컴파일된 결과물의 파일의 이름을 지정한다. '[출력파일]'부분에 웧나는 파일 이름을 입력한다.예를 들어 '-o program' 이라고 하면 결과물은 'program' 또는 'program.s'가 이름이다.'[입.. 2025. 3. 2.
[Dream hack] Welcome Hackers👨‍💻 👉잠시 아래의 두 코드를 읽고, "Welcome Hackers :)"가 출력되는 입력값을 찾아보세요.#include #include #include int main() { int sz = 0x30; // sz에 16진수 0x30을 할당한다. 십진수론 48이다. char *buf = (char *)malloc(sizeof(char) * sz); // sz 크기의 메모리를 동적할당 한다. puts("Hello World!"); // hello world 를 출력한다. puts는 출력하고 자동 줄바꿈 한다. printf("Education + Hack = ?\n"); fgets(buf, sz, stdin); //문자열을 읽어 buf에 저장한다. 최대 sz-1 개 문자를 읽는다. if (!strn.. 2025. 3. 2.
[Dream hack] Logical Bug: Type Error 들어가며서론자료형은 변수의 크기를 정의하고, 용도를 암시한다.자 예를들어 int 형으로 변수를 선언하면, 그 변수는 4바이트 크기고 정수 연산에 사용될 변수이다. 근데 자료형 담고 있는 정보가 컴파일러에도 전달이 되는데 변수의 자료형으로 고려해서 변수에 관한 코드르 생성한다.(int는 4바이트, char은 1바이트 /연산은 그 메모리 공간을 대상으로 ) 하번 정의된 변수의 자료형은 바꿀수 없다.변수에 할당된 메모리의 크기는 확장되거나 줄어들지 않는다. 근대 여기서 만약1바이트 크기의 변수에 1을 더하다가 0xff를 넘어가면 0x100이되냐 응 아닙니다.0X00 이 된다.이런형태를 데이터가 넘쳐따고 해서 overflow 라고 한다. 이것 처럼 변수의 크기보다 큰 값을 대입할떄도 데이터가 유실 될 수 있따... 2025. 3. 2.
[개념 정리] plt와 got 보호되어 있는 글 입니다. 2024. 11. 15.