이번 제 22회 순천향대학교 YISF에서 필자는 pwnable easy 와 misc hard 를 출제했다. pwnable easy 는 간단하게 VM 에서 사칙연산으로 bof 내서 rao 하는 문제여서 간단하게 풀 수 있도록 만들었다. pwnable 문제보다 misc 문제를 더 열심히 만들었는데 SAS2024 에서 출제된 것을 재밌게 푼 기억이 있어서 문제 수와 시간을 생각해서 좀 더 쉽게 만들었다. 문제는 드림핵에 u know Turing? 이라는 이름으로 올려두었다. https://dreamhack.io/wargame/challenges/1379 u know Turing?해당 문제는 제22회 청소년 정보보호 페스티벌 예선에 출제된 문제입니다. 플래그 형식은 YISF{…}입니다. 튜링머신 아시나요? 아..
분류 전체보기
.Intro이번 BoB 13기 취약점 분석 트랙에 합격하게 되어 서류는 어떤 식으로 작성했는지, 면접은 어떤 식으로 봤는지, 교육 시작한 지 한 달이 지난 지금 어떤지 후기를 작성하기 위해 오랜만에 글을 작성한다. 참고로, 과제 도중에 숨 돌릴 겸 작성하는 거라 두서없이 생각나는 대로 작성하겠다. 서류본래 BoB는 생각이 있었지만 하고 있던 프로젝트도 있었고, 다음에 할 프로젝트도 구상하고 있었던 터라 다음에 지원하려고 했었으나 모집기간이 연장되었다는 소식을 듣고 경험 삼아 지원이라도 해볼까 해서 급하게 서류를 작성해서 제출하였다.거의 2시간 정도만에 작성해서 제출했던 것 같다.따라서, 이 글을 읽고 BoB지원에 도움을 얻고자 하는 사람들에게는 도움이 안 될 수 있다. 서류에 제출한 항목에는 동아리, 발..
what is environ main 함수의 인자는 사실 3가지가 있다. int main(int argc, char **argv, char **envp); argc – 명령행 인자 개수 argv – 명령행 인자 벡터 envp – 환경 변수 목록 인데 C 언어에서는 envnviron 이라는 전역변수가 미리 만들어져 있다. #include extern char ** environ; int main(){ int i = 0; printf("environ list\n"); for(i = 0; environ[i]; i++){ printf(": %s\n", i, environ[i]); } return 0; } 그래서 아래처럼 extern 으로 environ 을 불러와서 출력해보면 이렇게 환경변수들이 모두 출력되는 것..
What is Stack Pivoting 특정 중심점을 기준으로 스택이 아니었던 공간을 스택 영역인 것 처럼 사용하는 기법. 이 기법을 통해 익스플로잇을 하기 위한 공간이 부족할 때 새로운 스택 영역을 확보할 수 있다. 기존의 스택을 리얼 스택이라고 하고 새롭게 확보된 영역을 페이크 스택이라 한다. 여러 gadget을 이용해서 쓰기 가능한 공간에 Fake Stack을 구성해놓고 chaining 하는 기법 fake stack을 위한 공간으로는 보통 bss + 0x300 영역을 사용하고 체이닝할 때마다 0x100 씩 더해서 새로운 공간을 만들어 준다. 가젯은 RSP 레지스터의 값을 변조할 수 있는 가젯을 사용한다. 여러 가젯들이 있는데 이중 보통 leave; ret; 가젯을 사용한다. pop rsp gadg..
보호되어 있는 글입니다.
// 이름 : uaf_overwrite.c // 컴파일: gcc -o uaf_overwrite uaf_overwrite.c #include #include #include #include 구조체 인간 { 문자 이름[16]; 정수 무게; 나이가 많다; }; 로봇 구조체 { 문자 이름[16]; 정수 무게; 무효 (*fptr)(); }; 구조체 인간 *인간; 구조체 로봇 *robot; char *맞춤[10]; int c_idx; void print_name() { printf("이름: %s\n", 로봇->이름); } 무효 메뉴() { printf("1. 인간\n"); printf("2. 로봇\n"); printf("3. 사용자 정의\n"); printf("> "); } 무효 human_func() { int ..
Intro 최근 보안에 대한 관심이 많아 지면서 보안성을 고려한 개발 등을 다룬 책들이 많이 나오고 있다. 애플리케이션 보안을 다루는 책들은 애플리케이션에서 취약점이 발생하지 않게 하는 테크닉에 중점을 둔다. 이런 책들은 애플리케이션 개발에 대한 방어의 근간을 만드는 데 도움이 되지만, 취약점의 본질은 거의 다루고 있지 않는다. 제한된 시간과 예산을 고려해야 하기 때문에 모든 개발이 기본부터 보안 애플리케이션을 고려할 수 있는 것이 아니다. 반면 보안 코딩의 목표는 “조금이라도 취약점이 발생할 수 있는 방법은 사용하지 말라!” 이다. 맞는 말이지만 너무 비용이 많이 들거나 시간을 많이 소모함으로써 비합리적인 경우도 종종 발생하기 때문에 침투 테스트나 윤리적 해킹에 관심을 돌린다. 이런 주제는 시중에서 다..
/* * context_switch - 새 MM 및 새 스레드의 등록 상태로 * 전환합니다. */ static inline void context_switch(struct rq *rq, struct task_struct *prev, struct task_struct *next) { struct mm_struct *mm, *oldmm; prepare_task_switch(rq, 이전, 다음); mm = 다음->mm; oldmm = 이전->active_mm; /* * paravirt의 경우 이는 스위치_to의 종료와 결합되어 * 페이지 테이블 다시 로드와 스위치 백엔드를 * 하나의 하이퍼콜로 결합합니다. */arch_start_context_switch(이전); if (!mm) { next->active_m..