전체 글

· CTF
Misc - Welcome misc의 1pt 문제 Welcome이다. 단순히 디스코드에 접속하기만 해도 flag를 준다. flag{W3Lcom3_7o_CS4w_D1ScoRD} Pwn - Alien Math 리버싱이 조금 필요한 간단한 시스템 해킹 문제다. 실행해보면 퀴즈 같은걸 내고 사용자의 입력을 받은 후 점수를 출력해주는 것 같다. main 함수를 확인해보면 rand 함수를 통해 값을 생성하고, 그 값이 사용자가 입력한 값과 같으면, 그 다음 단계로 넘어가는 것 같다. 하지만 srand 함수로 시드를 설정해주지 않았기 때문에 rand 함수는 항상 같은 값을 생성하게 된다. gdb로 확인해보면 생성되는 값은 0x6b8b4567인 것을 알 수 있다. 구한 값을 입력해보면 다음 단계로 넘어가는 것을 볼 수..
· CTF
Web - Basic (10 points) RTLxHA CTF 2021의 웹 카테고리의 Basic 문제다. 링크만 주어져 있다. 해당 링크로 들어가면 위 사진처럼 로그인 창이 뜨는데, 시험 삼아 sql injection을 이용한 인증 우회 공격을 시도해봤다. id : 1' or '1' = '1' -- pw : 1234 (
HackCTF의 RTC 문제다. 문제 명처럼 return to csu 기법을 사용해야한다. 덕분에 rtc 공격을 복습할 수 있는 좋은 경험이 됐다. 문제 파일로는 바이너리 파일과 libc가 주어진다. 바이너리를 실행해보면 "Hey, ROP! What's Up?"이라는 ROP에게 안부를 물어보는 문구가 출력되고 그 다음 줄에 입력을 받는다. 보호기법을 확인해보면 NX bit만 걸려있는 것을 볼 수 있다. full relro가 아니라 partial이기 때문에 got overwrite 기법도 사용 가능할 것이다. 일단 ida로 열어보겠다. 코드는 굉장히 간단하다. write 함수로 문구를 출력해준 뒤 read 함수로 0x200byte만큼 입력을 받는다. 딱봐도 overflow가 발생한다. 쉘을 얻게해주는 함수..
-실습 1-1- 이 실습은 Lab01-01.exe와 Lab01-01.dll 파일을 사용한다. 파일에 관한 정보를 얻으려면 1장에서 사용한 기법과 도구를 사용하고 다음 질문에 대답해보자. -질문- 1. http://www.virustotal.com/에 파일을 업로드한 후 보고서를 보자. 기존 안티바이러스 시그니처에 일치하는 파일이 존재하는가? Yes, exe, dll 모두 많은 백신이 트로이목마 악성코드로 진단하고 있다. Lab01-01.exe를 virustotal에 올리면 49개의 백신에서 악성코드로 진단하는 것을 볼 수 있다. AhnLab V3 백신이 맨 위에 보인다. Lab01-01.dll을 virustotal에 올리면 40개의 백신에서 악성코드로 진단하는 것을 볼 수 있다. 2. 이 파일은 언제 컴..
Win32 DLL -Kernel32.dll- 메모리 관리, 파일, 하드웨어 접근, 입출력 명령, 프로세스와 스레드 생성 등의 기능을 하는 API가 들어있다. Win32 프로그램 동작을 수행하는데 핵심적인 api들이 많이 들어있어 자주 사용하는 dll이다. -Advapi32.dll- 서비스 관리자, 레지스트리 같은 추가적인 핵심 윈도우 컴포넌트에 접근할 수 있다. -User32.dll- 창, 메뉴 같은 윈도우 사용자 인터페이스의 표준 요소들을 생성하고 다룬다. 또한 gui를 구현할 수 있게 해주고, 사용자 행위 제어와 반응 컴포넌트 등 모든 사용자 인터페이스 컴포넌트를 담고 있다. -Gdi32.dll- 그래픽 장치 인터페이스(GDI) 함수들이 있다. 그래픽 조작 관련 api들이 들어있다 생각하면 될 것 같..
HackCTF의 Look at me 문제다. 문제를 푼 뒤 다른 사람의 write up들을 확인했을 때, 내 풀이와 차이가 많이 나서 당황했다. (나는 sysrop로 풀었지만 다른 사람들은 mprotect 함수를 이용해 쉘 코드가 존재하는 주소에 실행 권한을 준 뒤, 해당 주소로 ret를 변조해 풀었다.) 문제 파일로는 바이너리 하나만 주어져 있다. 바이너리 파일을 실행해보면 "Hellooo..."가 첫 줄에 출력되고 두 번째 줄에서 사용자 입력을 받음을 알 수 있다. 보호기법은 nx bit만 걸려 있는 것을 알 수 있다. 또한 32bit 바이너리인 것을 알 수 있다. ida로 바이너리를 열어보면 함수가 엄청 많이 존재하는 것을 볼 수 있다. 이는 이 바이너리가 static linking 방식으로 컴파일..
HackCTF의 암호학 문제 Great Binary다. 머리 좀 식힐겸 한 번 풀어봤다. 문제 파일의 압축을 풀어보면 hoooo.txt 파일이 나온다. 이 txt 파일 안의 내용을 해독한다면 flag를 얻을 수 있을 것 같다. 이미지 안에는 딱봐도 2진수처럼 보이는 값들이 들어있다. 낮은 점수의 문제라는 점과 솔버(solver)수가 많은 것을 고려했을 때, 그냥 2진수를 10진수로 변환한 뒤 해당 10진수 값에 해당하는 아스키 문자를 구한다면 flag가 나오지 않을까 생각이 든다. with open('./hoooo.txt', 'r') as f: array = f.read().split(' ') for i in array: print(chr(int(i,2)), end='') print() 위와 같은 코드를..
이번에 풀이할 문제는 HackCTF의 SysROP문제다. 이름처럼 Syscall을 활용한 ROP 공격을 수행해야될 것 같다. 문제 파일로는 binary와 libc 파일이 주어져 있다. 바이너리 파일을 실행해보면 사용자의 입력만 받고 종료되는 것을 볼 수 있다. 보호기법은 NX bit만 걸려있다. main함수를 ida로 확인해보면 read 함수로 0x78byte만큼 buf에 입력을 받는데, 이 과정에서 overflow가 발생하는 것을 알 수 있다. nx bit가 걸려있기 때문에 rop 공격을 하는 식으로 가야겠지만, 문제는 출력해주는 함수가 없다. system 함수를 통해 쉘을 얻든, 원샷 가젯을 쓰든 libc base를 구해야지 가능한 것인데 leak를 위한 출력함수가 없기에 현재의 내 지식으로는 일반적..
HackCTF의 ROP 문제다. x86 ROP 공격을 복습할겸 풀어봤다. 바이너리와 libc가 주어져 있다. 바이너리를 실행해보면 입력을 받은 후 그 다음 줄에 "Hello, World!"를 출력해준다. 보호기법을 확인해보면 nx bit만 걸려있다. 문제명 그대로 x86 rop 공격을 해야할 것 같다. main 함수를 ida로 확인해보면 이름부터 취약한 vulnerable_function() 함수를 호출하고 write 함수로 "Hello World"를 출력해준다. 입력은 vulnerable_function에서 받는 것 같다. vulnerable_function을 보면 read 함수를 통해 buf에 0x100만큼 입력을 받는 것을 볼 수 있다. buf의 크기가 0x88인데 0x100만큼 입력을 받으므로 오..
-Virus(바이러스) 정상적인 파일이나 부트 섹터를 감염시켜 악의적인 행동을 하는 것. 주로 저장 매체를 통해 감염된다고 한다. 예를들어 프로그램에 흔히 사용되는 dll 파일을 감염시키거나 운영체제 process 등의 파일을 수정해 복제해버릴 수도 있다. 감염시키기 위해서는 감염시킬 파일들을 수정해야 하므로 파일을 읽고 쓰는 api들이 많이 사용될 것 같다. -Warm(웜) 그 유명한 모리스 웜 악성코드가 해당되는 악성코드 유형이다. 바이러스와 비슷하게 자기 자신을 복제를 하지만 그 대상이 다른 컴퓨터라는 점의 차이가 있다. 이메일, p2p 사이트 등 인터넷이나 네트워크를 통해 확산을하며, 사용자가 이메일이나 p2p에서 해당 악성 파일을 다운 받는다면, 시스템에 해당 악성코드가 설치되고 이 악성코드는 ..
이번에 풀이할 문제는 HackCTF의 RTL_Core 문제다. 문제 파일로는 바이너리와 libc가 주어져 있다. 문제 파일을 실행해보면 Passcode를 입력 받는다. 입력 값을 검증해서 성공, 실패 여부를 결정하는 것 같다. 보호 기법은 nx bit만 걸려 있는 것을 알 수 있다. ida로 main 함수를 확인해보면 입력 값을 bof에 취약한 함수 gets로 받고, 입력 값을 check_passcode 함수의 인자로 전달한 후 리턴 값과 hashcode라는 값과 비교한다. ida에서는 한글이 깨져서 이상하게 나와 있지만, 어쨌든 hashcode와 일치한다면 무언가를 출력해준 뒤, core 함수를 호출해준다. 일치하지 않을 경우 위에서 봤던 "실패!" 문구를 출력해주는 것 같다. 잠만 깨진 문구가 이상하..
HackCTF의 Random Key 문제다. 전에 참여했던 ctf에서 비슷한 유형의 문제를 풀어봤기(삽질했기) 때문에 굉장히 쉽게 풀 수 있었다. 문제 바이너리를 실행해보면 다음과 같이 인증 프로그램이라는 문구가 출력되고 input key 입력을 받는다. 그 후 어떠한 로직을 통해 입력한 키 값이 올바른지 검증 후 결과를 출력해주는 것 같다. 코드는 간단하다. 문구들을 출력하고 scanf로 입력을 받는데(%d로 입력 받는다. 취약점 없다 ㅋㅋ), 입력 받은 값이 rand 함수를 통해 랜덤으로 생성한 값과 일치하다면 flag를 준다. 참고로 이 srand(time(NULL));를 써줬기 때문에 매번 생성되는 값은 랜덤하다. 겉보기에는 취약해보이지 않지만, 들으면 아!하고 무릎을 탁 칠만큼 기발한 공격 방법..
dyp4r
dyp4r's Study Blog