분류 전체보기

    제 19회 순천향대 정보보호페스티벌 후기(YISF)

    이번에 나는 순천향대 예선 11위를 하여 본선에 진출하였다. 순천향대가 물론 멀었지만 좋은 경험이 될 것 같아서 가 봤다. 먼저 일요일 10시에 대회 시작이라서 9시까지 입실을 완료해야 했다. 한 8시 50분쯤 도착하여 lan선을 연결하고 yisf대회 홈페이지로 가서 포렌식, 리버싱 파일(용량 높은 파일들)을 미리 다운로드하였다. 책상 위에는 참가증 목걸이, 물, 먹을 것 이런 식으로 있었다. 그리고 전체적으로 보면 ㄷ자 모양으로 책상이 놓여 있었다. 한 30분간 랜선 환경같이 준비를 하고, 대회 주최하시는 분(?) 연설을 듣고 사진을 찍고 대회를 시작하였다. 그리고 점심쯤에 도시락을 주었는데, 초반에는 안 먹다가 1시간 30분 정도 지나서 먹었다. 난 이번 대회에서 forensic 문제를 노렸다. 포렌..

    RaRCTF - Archer

    RaRCTF - Archer

    이번에는 archer 문제를 풀어볼 것이다. 먼저 프로그램을 실행해 보자. 프로그램을 실행했을 때는 취약점 찾기가 어렵다. 그러면 먼저 main을 decompile 해보자.(ida use) int __cdecl main(int argc, const char **argv, const char **envp) { char s[5]; // [rsp+Bh] [rbp-5h] BYREF puts("It's battle day archer! Have you got what it takes?"); printf("Answer [yes/no]: "); fflush(_bss_start); fgets(s, 5, stdin); if ( strstr(s, "no") ) { puts("Battle isn't for everyone...

    RaRCTF - ret2winrars

    RaRCTF - ret2winrars

    오늘은 ret2winrars 문제를 풀어볼 것이다. 먼저 ida로 decompile해보자.(main function) int __cdecl main(int argc, const char **argv, const char **envp) { setvbuf(_bss_start, 0LL, 2, 0LL); puts("Hello, welcome to the WinRaRs!"); printf("Please enter your WinRaR license key to get access: "); get_license(); puts("Thanks for the license :)"); return 0; } 일단은 딱히 취약점이 보이지는 않는다. 그러면 get_license를 확인해보자. __int64 get_license..

    Dreamhack - out_of_bound(writeup)

    Dreamhack - out_of_bound(writeup)

    오늘은 out of bound 문제를 풀어볼 것이다. out of boundary 강의에는 생각보다 간단히 적혀있었다. 그래서 어려운 문제면 어떡하지 라는 생각을 했는데, 생각보다 간단했다. 먼저 c코드를 살펴보자. #include #include #include #include #include char name[16]; char *command[10] = { "cat", "ls", "id", "ps", "file ./oob" }; void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM..

    rtl ctf - ciphers galore!

    rtl ctf - ciphers galore!

    이번에는 cipher galore 문제를 풀어보자. $&Es6a@I+v5;|`h_$)q?2Kq75w=p|%tK+)8K)K}d!b_l 위의 문자열이 encrypted cipher이다. 3가지의 crypto가 생각난다. 1. Base91 2. Ascii85 3. ROT 47 그러면 base91부터 순서대로 해보자. base91을 돌리면 아래와 같다. 어... 누가봐도 이상하게 나온것 같다. 그러면 다음으로 ascii85 decoding을 해보자. ascii 85도 아닌것 같다. 그러면 마지막으로 rot 47 decoding 해보자. 오!!! base64 encoding 문자열이 나왔다. 그러면 계속해서 base64로 디코딩 해보자. 오 이런식으로 caesar decoding 된 것 같은 문자열이 나온다. 그..

    RTL ctf - Wait, What?

    RTL ctf - Wait, What?

    오늘은 rtl ctf의 암호 문제인 wait what을 풀어 볼것이다. 먼저 encrypt string을 보자. NBY{9x175777156k5608n3x889n5nx9215n2} 위의 문자열은 vigenere cipher 또는 caesar cipher 같다. 그러면 먼저 vigenere tool 을 이용해서 decode해보자. key값을 정해야하는데 대회이름 처럼 rtl을 넣었다. 그러자 아래처럼 나왔다. 위처럼 WIN이라는 단어가 나왔다. 그래서 다시 WIN으로 vigenere decoding 했다. 위처럼 flag를 확인할 수 있다. flag : RTL{9b175777156c5608a3b889f5ab9215f2}

    Dreamhack - ssp_001

    Dreamhack - ssp_001

    오늘은 저번에 이어서 ssp_001을 풀어볼 것이다. 먼저 c코드를 확인해보자. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } void print_box(unsigned char *box, int idx) { printf("Element of index %d is : %02x\n", idx,..

    Dreamhack - ssp_000

    Dreamhack - ssp_000

    오늘은 내가 ssp를 배운 기념으로 드림핵의 ssp문제를 풀어볼 것이다. 그러면 바로 코드를 살펴보겠다. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void get_shell() { system("/bin/sh"); } int main(int argc, char *argv[]) { long addr; long value; char buf[0x40] = {};..