목록전체 글 (111)
Sechack
말로만 듣던 코드게이트에 처음으로 참여해보았습니다. 포너블이 엄청 어려울줄 알고 예선 시작 1주일 전부터 Line CTF 2021, Hayyim CTF 2022에 출제되었던 포너블 문제들을 몇개 풀어봤는데 제 예상보다 훨씬 쉽게 나와서 빠른 시간안에 올클이 가능했습니다. 덕분에 대회 시작하고 얼마 안가서 2등까지 치고 올라갔었는데 저의 주요 분야인 Pwnable, Web을 올클하고나니까 풀게 없어졌습니다. Misc에 간단한 이진탐색 문제 있어서 그거까지 풀고 더이상은 못했습니다. 여러 분야를 두루두루 공부해놔야 할 필요성을 느꼈습니다. 리버싱도 하나 솔버 많던데 결국 풀진 못했습니다. 알고보니 루틴만 찾으면 z3날먹 문제였는데;;;;;; 본선때까지 리버싱 열심히 공부해서 Pwnable, Web, Revr..
#include #include #include #include "seccomp-bpf.h" void activate_seccomp() { struct sock_filter filter[] = { VALIDATE_ARCHITECTURE, EXAMINE_SYSCALL, ALLOW_SYSCALL(mprotect), ALLOW_SYSCALL(mmap), ALLOW_SYSCALL(munmap), ALLOW_SYSCALL(exit_group), ALLOW_SYSCALL(read), ALLOW_SYSCALL(write), ALLOW_SYSCALL(open), ALLOW_SYSCALL(close), ALLOW_SYSCALL(openat), ALLOW_SYSCALL(fstat), ALLOW_SYSCALL(brk), A..
지난 시간에는 Return to Shellcode기법을 실습해보았습니다. 하지만 일반적인 환경에서는 다양한 보호기법들로 인해서 Return to Shellcode와 같은 단순한 공격은 거의 먹히지 않습니다. 이번 시간에는 우리의 exploit을 방해하는 보호기법들이 무엇이 있는지 알아보도록 하겠습니다. NX bit NX bit는 code영역을 제외한 다른 메모리 영역에서 실행권한을 빼버리는 보호기법입니다. 조금만 생각해보면 스택, 힙과 같은 데이터 저장을 위해서 존재하는 메모리 공간에 굳이 실행권한이 존재할 이유가 없습니다. 따라서 실제 실행되는 opcode가 들어가있는 code영역을 제외하고 나머지 메모리 공간에서는 실행권한을 빼버리더라도 프로그램 실행에는 지장이 없습니다. 먼저 NX bit가 걸려있지..
이번 시간에는 시스템 해킹의 기초이자 매우 중요한 취약점인 Stack Buffer Overflow에 대해서 알아보겠습니다. Buffer Overflow는 할당된 메모리 공간을 넘어서 다른 메모리에까지 데이터를 입력할 수 있는 취약점입니다. 줄여서 BOF라고 많이 부릅니다. BOF에는 크게 두가지 종류가 있습니다. 첫번째는 Stack영역에서 발생하는 Stack Buffer Overflow이고 두번째는 Heap영역에서 발생하는 Heap Overflow입니다. BOF가 발생하는 원인은 다양합니다. gets, scanf와 같은 입력 길이 검증이 없는 안전하지 않은 함수를 사용해서 발생하기도 하고 size체크를 하는 안전한 함수를 사용하지만 integer overflow와 같은 로직상의 버그로 안해서 발생되기도 ..
이번 시간에는 시스템 해킹을 하는데 매우 강력한 python모듈인 pwntools에 대해서 알아보겠습니다. pwntools는 현재 Wargame이나 CTF에서 pwnable분야의 ELF exploit 문제를 풀이할때 거의 필수적으로 사용되는 모듈입니다. 다른 사람의 풀이를 보더라도 대부분 pwntools를 이용해서 exploit을 작성한다는 것을 알 수 있습니다. 따라서 해킹 대회를 준비하거나 Wargame으로 시스템 해킹 실력을 늘리고 싶은 분들께서는 pwntools사용법은 필수적으로 알아야 합니다. 이 강의에서도 앞으로 쭉 exploit은 pwntools를 이용해 작성할 것이므로 이번 시간에 pwntools의 기본적인 사용법을 알아가시기 바랍니다. pwntools의 본질은 자동화 입니다. 시스템 해킹..
이번 시간에는 Shellcode가 무엇인지 이해하고 직접 Shellcode를 만들어보는 실습을 할 것입니다. Shellcode는 메모리에 올리면 바로 실행을 할 수 있는 기계어 조각입니다. 시스템 해킹에서도 프로그램의 흐름을 변조할 수 있을때 메모리에 Shellcode를 올리고 Shellcode가 있는 메모리 주소로 프로그램의 흐름을 바꿔서 원하는 Shellcode를 실행시키는 방식의 공격이 상황에 따라서 유용하게 쓰입니다. 그러면 이러한 Shellcode는 어떻게 만들어질까요? 지금부터 그 과정을 함께 실습해보도록 합시다. 실습하기 전에 지난시간에 만들어두었던 ubuntu 20.04를 부팅시켜주세요. cd ~ mkdir pwnable cd pwnable sudo apt install nasm Shell..
시스템 해킹, pwnable이라고 많이들 부릅니다. 시스템 해킹은 소프트웨어를 분석해서 취약점을 찾고 셸을 따거나 root권한을 휙득하는 등 소프트웨어의 취약점을 이용해서 시스템을 장악해버리는 행위를 말합니다. 바이너리를 분석해서 취약점을 찾는것이기 때문에 Pseudocode의 형태인 C언어와 기계어와 1대1로 매칭되는 어셈블리 언어는 필수적으로 선행되어야 원활하게 시스템 해킹을 학습하실 수 있습니다. 그러면 일단 시스템 해킹을 공부하기 위한 ubuntu환경부터 구축해보겠습니다. Heap exploit을 공부하기 전까지의 모든 실습은 ubuntu 20.04에서 진행할 것이므로 다른 버전을 설치하시면 실습에 지장이 생길 수 있습니다. VMware, VirtualBox, wsl2, Docker등등 windo..
아직 2021년이 완전히 끝나진 않았지만 어차피 방학하기 전까지는 대충 학교갔다와서 유튭보고 게임좀 하다가 워게임 끌리는거 있으면 대충 풀고 중간중간 CTF하는 휴식기를 가질거라서 지금 쓰나 2021년이 완전히 끝나고 쓰나 바뀌는건 딱히 없을것같아서 그냥 지금 씁니다. 2021년은 내 가치관과 자아가 형성된 시기인것 같다. 2020년 12월 말쯤에 오픈채팅방에서 다소 귀찮을법한 질문을 많이 하면서 혼자서 공부하던 저에게 팀장님께서 TeamH4C에 들어오걸 제안하셔서 팀에 들어가게 되었다. 팀에 들어가서 열심히 공부해서 처음으로 CTF에서 성과를 내고 스터디 그룹에서 공식그룹으로 승급(?)되었던 경험은 아직도 생생하다. TeamH4C에서 팀원으로 있으면서 해킹 실력도 늘어났지만 무엇보다 여러 보안계 사람들..
처음 pwnable을 공부하시는 분들이면 대부분 vmware를 이용해서 우분투 환경을 세팅할것이다. 하지만 vmware특성상 무겁기도 하고 단순한 실습을 넘어서 CTF를 하실 분들이라면 pwnable특성상 ubuntu버전에 따라서 exploit방법이 달라지기 때문에(heap exploit의 경우는 glibc버전 차이가 매우 심함) vmware에 자주 사용되는 ubuntu환경들을 전부 구축해둬야 하고 새로운 환경이 나오면 또 그걸 구축하는데도 매우 오래걸린다. vmware에 ubuntu라는 OS만 설치하는데도 몇십분 이상이 걸리고 설치하고 pwnable환경을 세팅해주는데도 몇십분 이상이 걸린다. 또한 용량도 많이 차지한다. 저도 처음에는 컴퓨터가 windows 8.1이라서 Docker Desktop도 안깔..
mic check 디스코드 채널에 가면 플래그가 있습니다. Pocketmon 메뉴를 보면 평범한 힙 문제이다. 할당받을때 chunk를 2개 할당한다. 핵심 취약점은 free할때 터지는데 인덱스가 16일때는 NOOOOOOOOOOOOOOOOOOOOOO를 출력하고 끝낸다. 0으로 초기화해주지 않아서 16번 인덱스에서 uaf가 터진다. 우리는 free된 chunk에 맘대로 접근할 수 있으므로 fd를 맘대로 바꿀 수 있고 결과적으로 aaw를 할 수 있다. libc leak은 여기 남아있는 주소를 이용해서 0x7f를 size로 놓고 chunk할당하면 된다. 프로그램에서 0x30크기와 0x70크기의 chunk를 사용하고있는데 딱 맞다. 그리고 calloc이어도 0x7f가 size로 들어가게 되면 IS_MMAPPED비..