본문 바로가기

전체 글

(53)
Offset 이번 문제는 Offset이라는 문제이다. 바로 ida를 통해 분석해 보면 puts로 문자열 하나 띄워준다음 gets로 입력을 받는다. 그다음 입력받은 문자열을 인자로 select_func라는 함수를 호출하는데 해당 함수를 보면. v3 함수 포인터 변수가 'two'라는 함수를 가리키고 있고, strncpy 함수로 dest 라는 변수에 인자로 보내진 src를 0x1f 만큼 복사를 한다. 그리고 dest가 one이라는 문자렬이면 v3은 one을 가리키게 되고, 이후 if 문을 벗어나 v3을 호출한다. 여기서 나온 one과 two 함수를 살펴보면, one이라는 함수는 다음과 같이 생겼고, two 함수는 다음과 같이 생겼다. 그리고 하나 더 'print_flag'라는 함수가 있는데, flag.txt 파일을 출력해..
Simple_Overflow_ver_2 문제는 다음과 같당 바이너리를 함 다운 받아 실행 시켜 보면 "Data : " 이후로 입력을 받을 수 있고 만약 'AAAA"로 입력을 주면 "0xfffd2240: A A A A" 이렇게 출력이 된다. 그리고 다시 입력을 받을꺼면 'y' 프로그램을 종료 할꺼면 'n'을 누르라고 나온다. 만약 'y'를 누르면 다시 한 번 입력을 받을 수 있고 'n'을 누르면 프로그램이 종료된다. 바이너리를 ida로 보면, 프로그램을 실행했을때 봤듯이 입력을 받고 버퍼 주소와 입력 받은 문자열이 16자당 한줄씩 출력되고, 'y' 혹은 'Y'를 입력하면 프로그램이 계속 돌아가는 것을 확인 할 수 있다. 또한 checksec로 보면 32bit 바이너리에 따른 메모리 보호 기법이 안걸려 있음을 알 수 있다. 즉 처음 입력을 아무거..
x64 Simple_size_BOF 이번 문제도 왠지 지난번 문제랑 비슷한 거 같다. 다운로드하고 실행시켜 보면, "삐빅 - 자살방지 문제입니다."와 버퍼 주소를 출력하고 입력을 한 줄 받은 다음 그냥 종료되는 거 같다. ida로 까 보면, 그냥 간단하당 puts로 "삐빅 - 자살방지 문제입니다." 출력해주고 buf 주소 출력해준다. 그리고 입력을 한 줄 받는 구조이다. 해당 바이너리에서 main 함수 이외에 따른 함수는 없으므로 저 버퍼 주소에 대가 쉘 코드 넣어주고 ret 주소를 쉘 코드를 넣은 버퍼 주소로 변조해 주면 될 거 같다. 아 참고로, NX 기법 안 걸려 있어서 쉘 코드 넣어도 되고, 64bit 바이너리 이므로 RET, SFP 8 bit로 해 주어야 한다. 익스 코드는 다음과 같다. 1 2 3 4 5 6 7 8 9 10 11..
x64 Buffer Overflow 이번 문제 당 바이너리를 다운 받아 실행해 보면 한 줄 입력을 받는 것을 확인 할 수 있고 입력을 받은 뒤 "Hello ( 입력받은 문자열 )" 이 출력됨을 확인할 수 있다. 근데 왠지 제목부터 64bit 바이너리 인 게 느껴지는데 checksec로 확인해 보면 64bit 바이너리임을 알 수 있다. ida 로 main 함수를 보면 scanf로 입력을 받고 v5 변수에다가 해당 문자열의 길이를 넣은 다음 printf로 처음 실행했을시의 문자열을 출력하는 것을 볼 수 있다. 해당 바이러리에는 main 함수 말고 다른 함수가 하나 더 있는데 바로 callMeMaybe 라는 함수가 있음을 확인할 수 있다. 해당 함수를 보면 쉘을 얻을 수 있는 함수임을 알 수 있다. 익스는 그냥 64bit인 것을 감안하면서 쉽게..
내 버퍼가 흘러넘친다!!! 우선 바이너리를 다운로드하고 gdb로 까 보면, printf로 한번 출력해주고 read로 한번 입력 받은 다음 printf 로 또다시 한번 출력해주고 마지막으로 gets 함수로 입력을 받는 것을 확인할 수 있다. 해당 바이너리를 ida hex-ray로 까 보면 다음과 같다. 그냥 쉘 코드를 활용해서 문제를 풀면 될 거 같다. 처음 read 함수가 입력받는 name 변수가 어디 있는지 보니깐 전역 변수 영역에 있음을 확인할 수 있다. 그다음 read 함수로 입력을 받으니깐 처음 name 전역 변수에 쉘 코드를 넣어 두고 gets로 입력을 받을 때 ret 영역을 name 변수 주소로 덮으면 될 거 같다. 익스는 다음과 같이 짰다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1..
Basic_BOF #2 이번에는 Basic_BOF #2라는 문제이다. 바이너리를 다운로드하여 실행시켜 보면, 입력을 한 줄 받을 수 있고, 입력 받은 뒤 " 하아아아아아아아아앙 " 이라는 문자열이 출력됨을 확인 할 수 있다. ida로 바로 main 함수 부터 분석을 해보면, v5 함수 포인터 변수가 sup 라는 함수를 가리키고 있고 fgets로 입력을 받은 다음 v5를 호출 함을 알 수 있다. 해당 바이너리 에서의 함수 목록들을 보면, sup 이랑 shell 이라는 함수가 있음을 확인 할 수 있다. sup 함수는 간단하게 puts 함수를 통해 문자열을 출력 함을 확인 할 수 있다. 아마 바이너리를 실행 시키고 입력 한 후에 나오는 문자열도 프로그램 흐름상 v5 (sup) 함수를 통해서 출력이 되는거 같다. 다음은 shell 함..
Basic_BOF #1 HACK CTF 문제들도 슬슬 라업을 적어 볼까 한다. 우선 Basis_BOF #1라는 문제이다. 요기서 bof_basic이라는 바이너리를 다운로드한 후 실행시켜 보면, 다음과 같이 입력을 한 줄 받음을 확인할 수 있고 "adsfasdf"라는 문자를 입력해보면 자기가 입력한 문자랑 [check] : 16 진수 값 으로 출력됨을 확인 할 수 있다. ida로 분석을 해보면, 0x34 만큼 버퍼가 할당돼 있음을 알 수 있고, 만약 v5라는 변수가 0xDEADBEEF 값이면 system 함수의 "/bin/bash" 가 실행됨을 알 수 있다. 그러나 현재 저 v5는 0xDEADBEEF 가 아니므로 fgets 함수에서의 입력을 통해 v5를 덮으면 될 것이다. 전체 버퍼의 크기가 0x34이고 v5 변수의 위치는 eb..
CODE_GATE_2020 [ LOL ] 이번 문제는 LOL 이라는 문제이다. 우선 저 링크에 들어 가 보면 요런 사진을 다운 받을 수 있다. 대충 파일 시그니처 분석해 보면 안에 flag 파일이 있을 거 같은데 HxD 사용할 거 없이 그냥 binwalk 도구를 사용해서 한번에 내부에 어떤 파일들이 들어 있는지 분석해 보면, 이렇게 여러 JPEG 파일 시그니처 파일들을 확인 할 수 있었다. 그런 다음 바로 foremost 도구로 전부 까보면 다양한 jpg 파일들을 확인 할 수 있는데 그중에서 사진 하나 하나 보다 보면 요렇게 flag가 나옴을 확인 할 수 있당 FLAG : CODEGATE2020{J!n*_L00s3_C@^^0^}