전체 글

전체 글

    [reversing.kr] Replace

    File Format : WINDOWS 32-bit 이전부터 리버싱 제대로 파일 분석해보고 싶었지만 그 시점에 딱 군대 오는 바람에 접었던 리버싱 다시 시작하려 한다. 안 그래도 큰 바이너리 분석 위해서는 조금씩 조작된 바이너리 보면서 익숙해진 다음 도전해보고 싶다는 생각은 가지고 있었다. 이번 문제부터 리버싱 계속 연습해보자. 🏒 Analyzing Dynamic Analysis 뭔가를 입력할 수 있다. 참고로 문자는 안되고 only 숫자만 된다. 문제는 입력하고 나서 check 버튼을 누르면 그대로 꺼진다. 루틴 분석해서 어떻게 동작하는지 보도록 하자. Static Analysis 먼저 에러나는 부분부터 어딘지 확인해봤다. 0x40466F 주소에서 넘어가질 않는다. [eax] = 0x90 을 하려고 하..

    [reversing.kr] Easy ELF

    File Format : LINUX 말 그대로 쉬운 ELF 파일 분석이다. 🏒 Execute Dynamic Analysis 딱히 실행하지 않아도 된다. Static Analysis 함수 이름은 내부 루틴에 따라 조금 변경시켰다. scanf() 함수는 내부에서 scanf("%s", &input)를 호출한다. input은 전역 변수다. input 다음에도 여러 전역 변수들이 char형으로 선언되어 있다. scanf에서 %s로 받으니 five까지 입력이 충분히 가능하다. 이제 check() 함수에서는 어떻게 검증하고 있는지 확인해본다. 이 함수에서 return 값으로 1이 나와야 flag를 얻을 수 있을 것 같다. 그냥 루틴대로 그대로 적거나 xor 해서 char로 바꿔보면 flag가 뭔지 바로 알 수 있다...

    [FwordCTF 2021] Blacklist Revenge + 후기

    FwordCTF 2021에 참여하게 되었다. To-Do List에 있는 목표 중 하나 달성해볼까라는 마인드로 참여해봤다. 얼마나 풀 수 있을까 고민됐지만 시간 내 2문제 그리고 아래에서 설명할 문제, 해서 pwn에서는 총 3문제 풀었다. 문제 풀이 환경 : Ubuntu 20.04 Note에 적혀있는 말 보면 사용자가 입력에 대한 리턴을 받을 수 없다는 말로 해석된다. 그래서 구글링 결과 리버싱 쉘(reversing shell)을 이용해야 한다는 결론을 얻었다. 📝 Analysis Mitigation & File Spec mitigation은 별거 없는데, 무려 static 파일이다. Code · main init_0()과 vuln() 함수로 이루어진 간단한 main이다. · init_0 대충 seccom..

    [Git] How to use?

    git이란 소스코드의 버전을 관리하기 위한 시스템이다. 컴퓨터 업계에 종사하는 이라면 거의 필수로 알아야 할 도구다. 이전부터 대충 사용하고는 있었지만 앞으로 있을 개인 프로젝트를 위해 이번 기회를 통해 마스터해보려 한다. 사용 방법들은 정리해놓은 많은 사이트들이 있으므로 생략하고, 필자가 공부하는 데에 도움받은 사이트들을 소개한다. 도움받은 사이트들: https://learngitbranching.js.org/?locale=ko Learn Git Branching An interactive Git visualization tool to educate and challenge! learngitbranching.js.org - 직접 실습 가능 https://backlog.com/git-tutorial/kr..

    [pwnable.xyz] words

    문제 풀이 환경 : Ubuntu 20.04 취약한 부분이 어딘지는 알았지만 오프셋 맞추기 귀찮았던 문제... switch의 default를 이용할 생각을 못해 다른 사람 롸업을 좀 봤다. 📝 Analysis > RELRO가 없으니 GOT Overwrite가 가능하다. · main 메뉴별로 선택할 수 있다. fill로 시작하는 메뉴에 들어가면 전역 변수 a를 기준으로 strcpy, strcat을 수행하고 있다. 핵심 메뉴 빼고는 설명하지 않겠다. · save_progress 전역 변수가 널려있는데 bss에 할당된 구조부터 보자. fill_xxx() 함수들에서 strcpy, strcat을 수행한다고 했는데 이를 잘 이용하면 save_progress에서 쓰이는 buf에 담긴 값을 조작할 수 있을 것 같다. (..

    [ImaginaryCTF] graphophobia

    문제 풀이 환경 : Ubuntu 20.04 📝 Analysis > · main #include #include int password = 0x65706f6e; int main() { setbuf(stdout, NULL); printf("The password is at %p\n\n", &password); puts("What's your name?"); char name[100]; fgets(name, 100, stdin); printf("Hi, "); printf(name); printf("!\n"); if (password == 0x87654321) { puts("Winner!"); FILE* f = fopen("flag.txt", "r"); fscanf(f, "%s", name); fclose(f)..

    ImaginaryCTF 소개

    ImaginaryCTF라고 디스코드 서버에서 진행되는 wargame이 있다. daily ctf challenge 형식으로 진행되는데 일정 주기로 Round가 진행되고 순위를 매긴다. 초급 ~ 중상급 정도의 문제에 분야도 pwn, reversing, forensic, crypto, steganography, web, misc 등 다양하다. 기초적인 지식과 더불어 해킹 실력의 감을 잃고 싶지 않은 사람들에게 추천한다. https://imaginaryctf.org/

    [RaRCTF 2021] write-ups

    RaRCTF 2021 > - code 1) main code 전역 변수의 기본값은 0x13371337이다. 그러니까 makeshot() 함수에서 뭔가를 해서 다른 값으로 변경시켜야 할 것 같다. 2) makeshot 저기 빨간 줄은 어셈이 잘못 해석되어있다. code의 주소는 0x404068이다. 그런데 더하는 값이 0x500000라서 scanf에 0x0을 줘도 넘어버린다. 그래서 integer overflow를 이용해서 code의 주소로 맞춰주면 밑에서 0으로 값을 수정해줘서 main의 성공 조건을 통과하고 쉘을 불러올 것이다. 저 값에서 간단하게 64bit로만 맞춰주면 된다. (∵ v1이 64bit로 연산되고 있기 때문) - exploit from pwn import * # p = process('...

    [pwnable.xyz] notebook

    문제 풀이 환경 : Ubuntu 16.04 📝 Analysis > 딱히 특별한 점은 보이지 않는다. · main note 만들기, 수정하기, 삭제하기, 그리고 notebook의 이름 다시 짓기. 이렇게 4가지 기능이 있다. 매번 보던 힙 익스 패턴인가 싶은데 오늘의 주목할 포인트는 거기가 아니다. 4번 메뉴가 이번 익스의 핵심 중 하나다. · readline delimiter이 나올 때까지, 혹은 size 크기만큼 입력을 받는 함수다. 위 주석에도 표시해놓았듯이 OOB, 그중에서도 Off by 1 취약점이 발생한다. 발생하는 조건은 인자로 넘어온 size 크기를 가득 채워서 보냈을 때다. · make_note note를 만드는 함수다. 구조는 아래와 같다. · edit_note ptr 전역 변수에 저장된..

    [pwnable.xyz] nin

    문제 풀이 환경 : Ubuntu 16.04 📝 Analysis > · do_chat 의미 있는 코드는 이 함수에서 시작한다. 여기서 포인트는 __fastcall 어쩌고저쩌고 되어 있는 줄이다. 포인트인 이유는 __fastcall 부분은 어셈으로 봤을 때 특정 부분을 call rax 이런 식으로 부르니 win 함수를 부를 수 있게 하는 가장 쉬운 부분이기 때문이다. 그렇기 때문에 힙 청크의 구조를 잘 살펴보고 익스해보자. · invite_reznor do_chat 함수에서 v0 변수에 값이 없을 때 초기화해주는 함수다. malloc으로 0x20 크기의 청크를 할당한다. 데이터는 [strdup 리턴 청크 주소] [answer_me 주소]의 구조를 가진다. 위의 do_chat 코드를 다시 보면 [answer_..