DawgCTF 2021의 Two Truths and a Fib 문제다. "fibber를 잡을 수 있겠나?"라고 적혀 있다. 문제 이름을 직역한다면 2개의 진실과 한 fib(피보나치 수를 의미한다)다. 주어진 서버로 접속하면 위 사진과 같은 문구들이 출력된다. 해석해보면 3개의 정수가 주어지는데, 이 수들 중 피보나치 수를 찾아서 입력하는 것이다. 예제로 12, 8, 4가 주어졌는데, 실전에 주어지는 수들을 보면 길이가 장난 아니다.... 게다가 시간 제한까지 있어서 확실한건 손으로는 절대 못풀것 같다. 따라서 pwntools를 이용해서 자동화해 피보나치를 구별하고 입력을 준다면 flag를 얻을 수 있을 것이다.(취약점을 이용한 exploit이 아닌 이상..) 자동화 과정은 다음과 같다. 1. [, , ]..
분류 전체보기
보호되어 있는 글입니다.
보호되어 있는 글입니다.
최근에 format string bug 취약점을 공부하면서 c언어 코드를 작성해 %n, %hn에 관한 실험을 많이 해봤는데, 이상하게 같은 코드라도 gcc에서는 빌드가 되지만 visual studio(2017)에서는 빌드가 안되는 현상을 발견했다. 위 코드는 "Hello World!"의 길이 값을 int형 변수 a에 넣어준 후 a 값을 출력하는 간단한 c언어 코드다. %n 서식 지정자가 길이 값을 넣어주는 역할을 하는데, 저대로 실행한다면 아래와 같은 오류가 뜬다. %hn을 써봐도 똑같은 오류가 뜨는 것을 볼 수 있다. 해결 방법은 간단하다. _set_printf_count_output(1); 이 코드를 main 함수 맨 위에 작성해주면 된다. _set_printf_count_output(1);를 써주니..
이번에 풀이할 문제는 미루고 미뤘던 Format String Bug 취약점 관련 문제다. 예전부터 계속 fsb 취약점을 공부하려 시도했지만 뇌정지가 오거나 이해가 안되는 부분이 많아, 여러 번 실패했었다. 맘 잡고 몇 시간 정도를 fsb 취약점만 공부한 끝에 결국 fsb 취약점을 이해해버렸다. (취약점 관련 포스팅도 조만간 할 계획이다.) format string bug 취약점 공부에 참고한 사이트 d4m0n.tistory.com/28 dreamhack.io/learn/3#t194 (dreamhack은 전설이다..) 따라서 이번에는 fsb 취약점을 몰라 풀지 못한 HackCTF의 Basic_FSB 문제를 풀이해보겠다. 문제 파일은 elf 파일 basic_fsb가 주어져 있다. 먼저 보호기법을 확인해보겠다..
이번에 풀이할 문제는 HackCTF의 x64 Simple_size_BOF다. 문제 이름으로도 알 수 있듯이 x64 환경에서의 Buffet oveflow 공격을 수행해야한다. 이번에는 ida가 아닌 ghidra로 분석을 해봤다. 디컴파일 창을 보면 알 수 있듯이 27952 크기의 char형 배열을 생성하고 이 배열의 주소를 출력한 후 bof 공격에 취약한 gets 함수를 통해 입력을 받는다. 현재 생각할 수 있는 공격은 두 가지다. 1. gets 함수로 bof를 일으켜 쉘을 따게 해주는 함수의 주소로 RET 변조. 2. gets 함수를 통해 쉘 코드 삽입 + bof를 일으켜 쉘 코드의 주소로 RET 변조 일단 공격 코드를 짜기전 프로그램을 실행해보고 gdb, checksec을 통해 좀더 정밀하게 분석을 해..
이번에 참여한 TamuCTF 2021은 PlaidCTF에 비해 난이도가 낮아서 풀기 수월했던 것 같다. 3문제를 풀긴 했지만 비교적 난이도도 낮고 솔버도 많은 문제들이라 다음에는 솔버 수가 적은 문제들도 풀 수 있도록 노력해야겠다는 생각이 든다. 처음에는 문제 서버가 특이해 삽질도 많이 했지만 공지 사항에 이미 적혀있던 것을 보고 대회 시작전 공지 사항을 정독해야겠다는 것을 깨달았다. 안 풀리면 write up을 볼 수 있는 wargame과는 달리 CTF는 대회 진행중에는 write up, 해답을 알 수 없으니 계속해서 풀어볼 수 밖에 없는데, 분석 끝에 exploit을 성공해 flag를 얻었을 때의 기분은 wargame을 풀었을 때의 기분과는 차원이 달랐다. 이번에는 pwn 문제만 집중적으로 풀었지만 ..
이번에 풀이할 문제는 TamuCTF의 TicTacToe 문제다. 문제 문구를 보니 tic tac toe 게임에서 이기면 flag를 주겠다는 것 같다. 이 문제 역시 tictactoe 파일 하나만 주어진다. 다른 문제들과 마찬가지로 실행을 시켜보려했지만 실행이 안된다는 문구가 나왔다. 이상하게 여겨져 hxd로 16진수 값들을 확인해보니 elf 파일이 아닌 python 코드 파일이라는 것을 알 수 있었다. #!/usr/bin/python from itertools import product from random import randint import sys from hashlib import sha256 import pickle import base64 def check_winner(board): posit..
이번에 풀이할 문제는 TamuCTF의 Pancake 문제다. 문제 파일은 pancake만 주어져 있다. 문제를 실행해보면 위와 같은 결과가 나온다. 지금껏 풀었던 wargame을 기반으로 추측해보자면 stack overflow를 통한 변수 값이나 ret 변조, 쉘코드 삽입이 아닐까 생각이든다. checksec 명령어로 보호기법을 확인해보니 NX만 걸려있는 것을 볼 수 있다. canary는 존재하지 않는 것을 봐서 stack overflow를 통한 ret, 변수 값 변조가 맞는 것 같다. ida를 통해 main 코드를 확인해보니 fgets로 80byte만큼 입력 값을 받아 char형 배열 s에 저장하는데, 이 후 int형 변수 v13의 값이 138438280이라면 flag를 읽어준다. stack overf..