본문 바로가기

ctf

[exploit-exercise] heap3 보호되어 있는 글입니다. 더보기
[pwnable.kr] fsb 보호되어 있는 글입니다. 더보기
[pwnable.kr] simple_login 보호되어 있는 글입니다. 더보기
[Plaid CTF 2013] pork # file pork-8c2fdf93e211c7358e0192a24bc951843da672b1 pork-8c2fdf93e211c7358e0192a24bc951843da672b1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, BuildID[sha1]=e163925191d2ce2e331746946dec30fddcfad4ba, not stripped 어떠한 방어 기법도 적용되어 있지 않은 32bit 바이너리이다. 취약점이 터지는 부분이다. buf는 우리가 main 함수에서 url 에 해당하는 부분인데 2048byte 만큼 입력받는 부분이다. s.. 더보기
[DEFCON 2015 CTF] r0pbaby # file r0pbaby r0pbaby: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, stripped 64비트 바이너리로 PIE 기법과 NX 기법이 걸려있다. 딱히 분석하는데 어려움은 없이 간단한 프로그램이다. 프로그램을 실행했을 때, 라이브러리 주소와 내가 원하는 주소를 바로 얻을 수 있다. 취약점은 위 그림에서 터지는데.. 프로그램에서 사용자가 원하는만큼 입력을 받고 그 크기가 1023 보다 작다면 memcpy 함수를 이용해 &savedregs 영역에 입력받은 내용을 복사한다. 이 때 &savedregs 는 $rbp 에 해당하는 부분으로.. 더보기
[CodeGate 2016 CTF] BugBug fsb 취약점을 가진 32bit 바이너리로 기능은 엄청 간단한다. 가장 먼저 /dev/urandom 에서 난수를 생성한다. 그리고 사용자로부터 100byte 만큼 입력을 먼저 받고 해당 내용을 출력해준다. 그리고 lotto 번호를 입력받는데 해당 번호를 맞출 경우 "Congratulation" 문자와 함께 fsb 취약점이 존재하는 루틴으로 넘어간다. 우리는 100byte를 이용해 seed 값을 릭 해올 수 있으며, 이 seed 값을 바탕으로 lotto 번호 또한 알 수 있다. 여기까지 진행한다면 fsb 취약점을 이용해 라이브러리 주소를 릭하고, offset 계산을 통해 system 주소까지 알 수 있다. 결과적으로 printf(&buf) 부분의 print@got 에 system 주소를 덮어쓰고 &buf .. 더보기
[CodeGate 2016 CTF] Fl0ppy # file fl0ppy floppy: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0181e2acbb1c70657d46c26eac0f75b29d82472d, stripped NX 와 PIE 방어 기법이 걸린 32bit 바이너리이다. 전체적으로 watermelone 문제와 취약점이 터지는 방법이 비슷하다. 처음 디스크 할당 과정에서 description 10byte 를 입력받으나 modify 하면서 37byte 를 입력받게 된다. 이 때 ret 까지 덮어 쓸 수 있다. (fl0ppy1 에서 덮어쓰기 가능하다... 더보기
[HolyShield 2016 CTF] pwnit # file pwnit: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=aeee07e7fd534a03861c10e4f7c9b008c8c56486, stripped 32bit 바이너리로 방어 기법으로는 PIE 기법만 걸려있는 것을 확인했다. 해당 바이너리는 Hint() 함수를 통해 Memory Leak 을 할 수 있다. 그리고 exploit() 함수에서 공격 코드를 입력받는다. exploit() 함수에서 코드를 입력받는데 여기서 ret 주소를 덮어 쓸 수 있게된다. 그리고 Hint() 함수에서 Memory Lea.. 더보기
[CodeGate 2016 CTF] Watermelon watermelon: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=155b637b98c19cff6d3fce40c52dfe301ef746b0, stripped 32bit 에서 돌아가는 바이너리이다. 해당 바이너리에는 NX, Stack Canary 가 존재한다. 위 바이너리는 간단한 음악 playlist 관리하는 프로그램이다. ebp-113C 위치에서부터 number, music name, artist name 이 쭉 들어간다. add_playlist() 함수 부분이다. music name 과 artist name을 .. 더보기
[SECCON 2016 CTF] cheer_msg # file cheer_msg: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=ed63cb3a04480eeb344d7d567c893805a1119f2f, not stripped 해당 바이너리는 실행했을 때 message 의 길이와 해당 길이만큼의 message, name 을 입력을 받고, name 과 message를 출력하는 프로그램이다. getint 에서는 우리가 입력한 message_len 값을 받아온다. 그리고 어떤 연산을 거친 후 그 결과값만큼 스택에 공간을 할당한다. 이 연산에 message_len 값을 이.. 더보기