전체 글
[2023 JBU CTF] call_func write-up
분야 : Pwnable 💡 2023 JBU CTF에서 출제한 문제에 대한 write-up이다. 😭 이 문제도 Csu Gadget을 이용하는 것이 목적인데, 해당 함수에서 검증 로직 이후 fopen을 해서, 해당 주소로 RET해주면 풀리게 된다... fopen을 앞에 해주고 인자 검증을 했어야 했는데.. ㅎㅎ 🧐 문제 문제명 : call_func RTC 기법을 이해하고, 각 레지스터 값을 설정하고 함수를 호출하여 플래그를 얻는 문제이다. 위 구성이 문제파일로 제공된다. 로컬에서 도커 컨테이너를 올려 익스플로잇을 진행하고, 동일한 페이로드를 서버에 전송하면 플래그를 획득할 수 있다. 🧐 분석 보호 기법은 위와 같다. 문제 바이너리를 분석해보자. main함수이다. scanf에서 bof가 발생한다. win함수 ..
[2023 JBU CTF] format64 write-up
분야 : Pwnable 💡 2023 JBU CTF에서 출제한 문제에 대한 write-up이다. 🧐 문제 문제명 : format64 64bit 환경에서 format string bug로 포인터를 overwrite하여 셸을 획득하는 문제이다. 위 구성이 문제파일로 제공된다. 로컬에서 도커 컨테이너를 올려 익스플로잇을 진행하고, 동일한 페이로드를 서버에 전송하면 셸을 획득할 수 있다. 🧐 분석 보호 기법은 위와 같다. 문제 바이너리를 분석해보자. main함수이다. buf에 값을 256byte 입력받고, 이를 출력할 때 format string bug가 발생한다. check전역변수의 값이 0x87654321ABCD이면 win함수를 호출한다. win함수로 들어오면 exit(0);가 실행되면서 프로그램이 종료된다...
[2023 JBU CTF] format32 write-up
분야 : Pwnable 💡 2023 JBU CTF에서 출제한 문제에 대한 write-up이다. 🧐 문제 문제명 : format32 32bit 환경에서 format string bug로 포인터를 overwrite하여 get_shell함수를 호출하는 문제이다. 위 구성이 문제파일로 제공된다. 로컬에서 도커 컨테이너를 올려 익스플로잇을 진행하고, 동일한 페이로드를 서버에 전송하면 셸을 획득할 수 있다. 🧐 분석 보호 기법은 위와 같다. 문제 바이너리를 분석해보자. main함수이다. buf에 값을 256byte 입력받고, 이를 출력할 때 format string bug가 발생한다. funcPtr포인터에 win함수 주소를 저장하고, check전역변수의 값이 0xdeadbeef이면 funcPtr에 들어간 함수를 호..
[2023 JBU CTF] double canary write-up
분야 : Pwnable 💡 2023 JBU CTF에서 내가 출제한 문제에 대한 write-up이다. 😭 v6에 r_rum 값을 왜 넣어줬지..? 그래서 그냥 Canary Leak 문제가 되어 버렸다 ㅎ.ㅎ 😭 더 웃기고 슬픈건, 나는 인지하지 못한 채로 라업을 작성했다... 그럴 수 있지 없다. 🧐 문제 문제명 : double canary Canary 보호기법이 걸려있어서 Canary 값을 우회하여 익스플로잇하는 문제이다. bof가 발생하고, printf함수 주소를 출력해주므로, LibcBase를 얻어서 원하는 함수를 호출하여 system함수를 호출하여 셸을 얻는 문제이다. 위 구성이 문제파일로 제공된다. 로컬에서 도커 컨테이너를 올려 익스플로잇을 진행하고, 동일한 페이로드를 서버에 전송하면 셸을 획득할..
[2023 JBU CTF] babybof write-up
분야 : Pwnable 💡 2023 JBU CTF에서 출제한 문제에 대한 Write up 이다! 🧐 문제 문제명 : babybof bof가 발생함을 인지하고, xor 연산 값에 맞춰 페이로드를 구성하여 익스플로잇하는 문제이다. 위 구성이 문제파일로 제공된다. 로컬에서 도커 컨테이너를 올려 익스플로잇을 진행하고, 동일한 페이로드를 서버에 전송하면 실제 문제 플래그를 획득할 수 있다. 🧐 분석 babybof 바이너리를 분석해보자. 먼저, 메모리 보호기법은 NX bit가 걸려있고, Canary와 PIE가 걸려있지 않다. 바이너리를 디컴파일하여 코드를 분석한다. 먼저, get_flag함수가 있다. 해당 함수를 호출하면 /home/RET/flag를 읽어서 출력해주기 때문에 flag를 획득할 수 있다. main함수..
[Codeup] 1157-1159 특별한 공 던지기 - Python 풀이
Code up 1157 - 특별한 공 던지기 1 특별한 공 던지기 1 50이상 60이하이면 win을 출력, 그 외에는 lose를 출력하시오. codeup.kr 문제 슬기가 던진 공의 위치를 입력받는다. (실수) → 입력(input)함수와 float 함수 사용 입력받은 위치가 50이상 60이하이면, win을 출력한다. → 조건문(if)과 논리 연산자(and), 출력(print)함수 사용 그렇지 않다면 lose를 출력한다. → 조건문(else)과 출력(print)함수 사용 💡 and 연산자로 50이상 60이하의 범위에 들어오는 수인지 확인한다. 문제 해결 코드 n = float(input()) if (n >= 50 and n = 30 and n = 60 and n = 50 and n
[Baekjoon] 2908 문제(상수) - C 풀이
백준 2908 - 상수 2908번: 상수 상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 www.acmicpc.net 문제 먼저, 같지 않은 세 자리 수 두개를 입력받는다. 이후, 입력받은 숫자를 반대로 돌린 후, 더 큰 값을 출력하는 문제이다. 문제에서 세 자리 수만 입력받는다고 했으므로, 수의 길이를 확인할 필요 없이 세 자리 수 경우만을 생각하면 되기 때문에 쉽게 해결할 수 있다. 숫자를 돌리는 식 C언어의 경우에는 / 연산자는 몫만 구하고, % 연산자는 나머지만 구한다. 따라서, 위 그림과 같은 식을 통해 숫자를 돌릴 수 있다. 문제 해결 코드 #include..