CTF

· CTF
HSCTF의 seeded-randomizer 문제다. 자바 파일이 하나 주어져 있다. import java.util.Random; public class SeededRandomizer { public static void display(char[] arr) { for (char x: arr) System.out.print(x); System.out.println(); } public static void sample() { Random rand = new Random(79808677); char[] test = new char[12]; int[] b = {9, 3, 4, -1, 62, 26, -37, 75, 83, 11, 30, 3}; for (int i = 0; i < test.length; i++) ..
· CTF
ThcCTF 2021의 Living QR Code 문제다. gif 파일이 하나 주어져 있다. gif 파일을 열어본다면 위 사진과 같은 QR 코드가 나오는데, 문제는 gif 파일이다 보니 QR 코드 이미지가 바뀌어 가면서 보여진다. 일단 무엇을 하든 gif로 압축된 원본 사진 파일들이 필요할 것 같아서 jpg로 변환했다. (변환에 사용한 사이트다. https://ezgif.com/gif-to-apng) 위는 gif파일을 jpg로 변환한 모습이다. 확인해보니 각각 모양이 다른 QR code 이미지 41개가 존재했다. 처음에는 이 이미지들을 모두 겹쳐서 만들어진 QR code를 스캔해야지 flag를 얻을 수 있지 않을까 생각해 이미지 겹치기 관련해서 구글링을 했었다. 하지만 답은 생각보다 간단했었다. 단순히 ..
· CTF
ThcCTF 2021의 SQL for dummies 문제다. 웹 사이트 주소가 주어져 있는데, 해당 웹 사이트를 통해 flag를 얻는 것 같다. 문제 이름, 설명을 고려했을 때 sql injection을 통한 로그인 우회로 flag를 얻는 것 같다는 생각이 들었다. 주어진 주소에 접속하면 위 사진과 같은 화면이 뜬다. 예상대로 로그인 화면이다. 보통 username, password가 유효(올바른지)한지 검증하는 취약한 sql 쿼리문은 select from where = '' and = '';로 처리된다. 이 문제 역시 위와 같은 쿼리문으로 작성됐다 가정하고 쿼리문의 where(조건)절이 무조건 참이되도록 1' or '1' = '1' --를 입력 값으로 줘 보았다. (처음에는 admin으로 로그인해야지 ..
· CTF
ThcCTF 2021의 Welcome 문제다. 이 문제는 설명에 나와 있는 discord 서버에 들어가기만 해도 flag를 준다.
· CTF
이번에 풀이할 문제는 wtfCTF의 k3Y 문제다. 문제 파일과 nc 서버 주소가 주어져 있다. 문제 파일을 ida로 열어 main 코드를 확인해본 모습이다. v5에 rand 함수로 값을 넣은 후 사용자의 입력 값과 xor 연산을 해 -1393689906과 같으면 flag를 얻게 해주는데, 문제는 rand 함수를 쓰기전 srand 함수를 통해 seed 값을 넣어주지 않는다면 랜덤한 값이 나오지 않고, 항상 똑같은 값만 반환된다. 따라서 gdb를 통해 문제 파일을 열어 rand 함수에서 반환되는 값을 알아낸다면 입력 값으로 뭘 줘야 flag를 얻을 수 있는지 알 수 있다. rand로 생성되는 값이 0x6b8b4567인 것을 알 수 있다. 그렇다면 -1393689906 xor 0x6b8b4567한 값을 입력..
· CTF
이번에 풀이할 문제는 wtfCTF 2021의 MoM5m4g1c 문제다. c언어 소스 코드와 nc 서버가 주어져 있다. 일단 bof에 취약한 gets 함수가 보인다. int형 변수 water에 0을 넣은 후, gets 함수를 통해 125byte 크기의 char형 배열 bottle에 입력을 받는다. 그 다음 water의 값이 0인지 체크한 후 0이 아니라면 flag를 얻게 해준다. 간단한 stack buffer overflow 문제다. 200byte 정도의 더미 값을 넣어준다면 오버플로우를 통해 water의 값이 변조돼 flag를 얻을 수 있을 것 같다. from pwn import * p = remote("20.42.99.115", 3000) p.sendline('A'*30) p.interactive() ..
· CTF
이번에 작성할 문제는 Baby write-only password manager로 현재 참가하고 있는 Pwn2Win CTF의 pwn 카테고리에 있는 문제다. 한 문제라도 풀어보려고 노력했지만 대회 자체가 수준이 좀 높아.. 결국 풀지 못했다. 따라서 접근 방법이라도 정리해보려 한다. 일단 처음부터 실수를 했다. 솔브 수가 높은 다른 pwn 문제들은 nc 서버가 주어져 있지 않았는데(pwn 문제인데 web 서버가 등장했다..), 해당 문제는 nc 서버가 있어 너무 기쁜 나머지 문제 파일은 보지도 않고 무작정 서버에 접속해보며 삽질을 시작했다. 서버에 접속하면 "Hello there. Send me your ELF."라는 문구가 나온다. ELF 파일을 전송하라는 뜻이다. ELF 전송 방법에 대해서는 다음 줄..
· CTF
DawgCTF 2021의 Bofit 문제다. elf 파일인 bofit과 c언어 소스 코드인 bofit.c가 주어져있다. bofit 파일을 우분투에서 실행해보면 다음과 같은 문구가 나온다. 문구를 읽어보면 "BOF it!"이 출력될 시 'B'를 입력, "Pull it!"이 출력될 시 'P'를 입력, "Twist it!"이 출력될 시 'T'를 입력, 'Shout it!"이 출력될 시 최소 10글자를 입력하라고 한다. 보호기법을 확인해본 후 소스 코드를 보면서 취약점을 찾아보겠다. 보호기법은 Partial RELRO만 걸려있는 것을 볼 수 있다. #include #include #include #include #include #include void win_game(){ char buf[100]; FILE* ..
· CTF
DawgCTF 2021의 Two Truths and a Fib 문제다. "fibber를 잡을 수 있겠나?"라고 적혀 있다. 문제 이름을 직역한다면 2개의 진실과 한 fib(피보나치 수를 의미한다)다. 주어진 서버로 접속하면 위 사진과 같은 문구들이 출력된다. 해석해보면 3개의 정수가 주어지는데, 이 수들 중 피보나치 수를 찾아서 입력하는 것이다. 예제로 12, 8, 4가 주어졌는데, 실전에 주어지는 수들을 보면 길이가 장난 아니다.... 게다가 시간 제한까지 있어서 확실한건 손으로는 절대 못풀것 같다. 따라서 pwntools를 이용해서 자동화해 피보나치를 구별하고 입력을 준다면 flag를 얻을 수 있을 것이다.(취약점을 이용한 exploit이 아닌 이상..) 자동화 과정은 다음과 같다. 1. [, , ]..
· CTF
DawgCTF Discord 문제다. DawgCTF의 Discord 서버에 접속한 후 General - flag 채널에 간다면 flag를 얻을 수 있다.
dyp4r
'CTF' 카테고리의 글 목록 (2 Page)