
3월 26일에 있었던 LINE CTF에 Security Factorial의 이름으로 참가하였고 18등을 하였다! 나는 call-of-fake 한 문제를 SDJ 형이랑 같이 풀었다. 문제 분석 이 문제는 C++로 짜였고, C++ 하면 객체지향이다. 그런데, 이 문제에서 쓰이는 클래스들을 모두 분석하기에는 그 양이 방대해서, 동적 분석을 진행하고 필요한 것만 가져다가 IDA에 반영하는 식으로 우회 조건을 파악하면서 문제를 해결하였다. 먼저, main 함수는 decompile 된 코드를 보면, 좀 어지러울 수 있지만, 코드 구성은 대충 다음과 같다. objectManager *om; guardManager *gm; int main() { char read_buf[64]; char buf[0x400]; setv..

전형적인 Use-After-Free(UAF) 문제이다. 그러나, UAF가 커널에서 발생한다. 문제 분석 #!/bin/bash qemu-system-x86_64 \ -initrd rootfs.cpio -kernel bzImage \ -append 'console=ttyS0 root=/dev/ram oops=panic panic=1' \ -enable-kvm -monitor /dev/null -m 64M \ --nographic -smp cores=1,threads=1 -cpu kvm64,+smep qemu 스크립트(boot.sh)를 통해 사용되는 보호 기법을 확인해 보자. KASLR(Kernel Address Space Layout Randomization)이 없다. 즉, 매 실행마다 고정된 주소를 가지고..

V4bel님의 인프런 강의로 커널 해킹을 공부하고, 이 지식을 동아리에 퍼뜨리고 싶어서 커널 문제를 냈다. 문제 환경은 https://github.com/brwook/binary에서 다운로드할 수 있다. 문제 분석 Docker 환경을 구성한 뒤에, 해당 주소의 1800 포트로 접속하면, 위와 같은 출력이 나온다. 이는 xinetd를 통해서, 자동으로 실행되는 프로그램을 분석하면 되는데, 그것이 files/test.sh 파일이다. #!/bin/bash ... ROOTFS_NAME="$(mktemp -u XXXXXXXXXX)" /chall/download.py $ROOTFS_NAME if [ $? -ne 0 ] ; then exit; fi ... mktemp -u로 무작위 문자열을 받고, 이를 인자로 /ch..

보호 기법이 약하게 걸려 있다. PIE가 안 걸려 있고, canary도 없다. partial RELRO 상태이기 때문에, GOT overwrite도 할 수는 있다. 위 바이너리는 https://github.com/brwook/binary에서 다운로드할 수 있다. 문제 분석 Dreamhack의 시스템 해킹 강의 중에서 Type Error 강의를 듣다가 만들어진 문제이다. malloc에는 size+1을 인자로 할당하고, read는 size만큼 입력을 할 수 있는 코드였는데, size의 자료형이 int였으면 아주 쉽게 -1을 입력하면, 버퍼 오버플로우가 발생할 것을 예측할 수 있었을 것이다. 그러나, size가 unsigned int였기 때문에, -1을 입력할 수 있을 거란 생각이 전혀 들지 않았다. 그리고,..

Security Factorial 동아리에서 진행한 내부 CTF 2022.2.5 00:00 ~ 2022.2.7 00:00 ( 48h ) 가능한 모든 문제를 도전하다 보니까, 문제를 되는대로 푼 것이 꽤 많은 것 같다. 출제자 입장에서는, "어? 이 XX, 이거 왜 이렇게 풀었지?" 하는 게 있을 수 있는데, intended write up을 짧게라도 작성해서 올려주면 큰 도움이 될 것 같다..~ Pwn - Happy new year! 0x20 크기의 버퍼에 0x200을 총 3번 쓸 수 있는 문제이다. 또한, gift라는 좋은 함수도 존재했기 때문에, 왜 이런 문제를 내나 싶었는데... 보호 기법을 확인해보니, Canary에 PIE까지 걸려 있었다. 즉, 첫 번째의 read 함수에서 canary를 leak..