본문 바로가기

Let's Study

5. Format String Attack (FSB) Shayete 입니다. 5번째 강의는 포맷스트링 버그에 대해 알아보도록 하겠습니다. 포맷스트링버그는 개발자가 printf()함수 구현 시, 해킹 공격을 고려하지 않고 개발하여 생긴 보안 취약점입니다. printf()를 "printf(buf)" 와 같은 형태로 사용했을 때 출력할 buf의 값이 포맷스트링이라면 buf 값을 문자로 취급하는게 아닌, 서식문자로 취급하여 취약점이 일어날 수 있습니다. 위의 그림에서 보이듯이 fgets() 로 buf에 서식문자를 집어넣고 그걸 printf() 로 출력했을 때 출력될 buf 배열에 서식문자가 있을 경우, buf배열을 가리키는 주소의 다음 4바이트 위치를 참조하여 그 서식문자의 기능대로 출력합니다. 이게 무슨말일까요. printf나 scanf에 쓰이는 서식문자는 위와.. 더보기
최신 우분투 환경에서 환경변수를 이용한 쉘코드 테스팅 시스템해킹 수업 중 해커스쿨 ftz나 lob를 접하신 분들이 환경변수를 이용해 쉘을 얻고싶으시다는 질문을 하여 글을 쓰게 됬습니다. 제가 포스팅할 환경은 Ubuntu 14.04 3 32bit와 64bit 입니다. 32비트와 64비트는 비슷하지만 64비트 주소값이 8바이트가 들어간다는 점에서 약간 접근이 힘들 수도 있습니다. 기본적인 Stack Corruption을 일으켜 환경변수를 이용한 쉘 획득을 해보겠습니다. 1. 32bit Test 테스트할 코드는 아주 간단합니다. 버퍼를 20만큼 채워서 sfp 4바이트 넣고 return address 4바이트를 채우면 우리가 원하는 eip를 제어할 수 있습니다. gcc -fno-stack-protector -mpreferred-stack-boundary=2 -o .. 더보기
4. Return to Library (RTL) Shayete입니다. 4번째 시간에는 최신환경의 우분투에서 Return to library 기법을 학습하겠습니다. Return to Libc 기법은 말 그대로, 라이브러리의 함수로 리턴해서 그 함수를 실행할 수 있습니다. 가령, 우리들이 임의로 짠 바이너리에 system() 함수가 없어도 라이브러리의 system()을 호출해서 그 바이너리에서 쓸 수 있지요. 이 기법을 알기 전에 리눅스의 plt, got가 어떤건지 이해하시면 좋습니다. 1. PLT & GOT plt는 procedure linkage table이라고, 외부라이브러리에서 함수를 가져다 쓸 때에 이 프로시져 테이블에서 함수의 실제주소( got ) 를 참조합니다. plt는 어떤 프로시져들(함수들)이 있는지 나열되어있는 테이블이라고 생각하시면 편.. 더보기
3. 핸드레이 & 기본 어셈블리 명령어 Shayete입니다. 3번째 강의는 어셈블리 핸드레이에 대해 포스팅하도록 하겠습니다. 어셈블리 핸드레이는 어셈블리어를 C언어로 복원시키는 걸 의미합니다. C에서 어셈블리어로도 복원시킬 수 있다면 베리 나이스구요. C에서 어셈으로 복원하는 건 우선 바이너리를 많이 뜯어보고 어셈이 눈에 익은 다음에 시도하도록 합니다. 핸드레이를 하려면 기본적인 어셈블리어 명령어를 알아야 합니다. 1. Basic Assembly Instruction # cmp a ,b 부분의 assembly가 at&t형식일 때에 위처럼 zf, cf가 셋팅됩니다. intel 형식일 때는 반대로 봐주세요. 혹시 flag 확인이 헷갈리시다면 info reg 에서 eflags 부분을 계산기에 넣고 이진수로 바꾸신 다음 cf 와 zf 부분이 맞게 세.. 더보기
2. Stack Corruption & gdb 명령어 Shayete입니다. 오늘은 기본적인 Stack Corruption 및 gdb명령어 사용법에 대해 배워보도록 하겠습니다. Stack Corruption은 Buffer Overflow의 현대적 용어로 의미는 같습니다. Buffer Overflow가 스택에 할당된 버퍼의 메모리를 흘러넘치게 해서 메모리를 오염시키는 것처럼 Stack Corruption의 의미는 메모리 오염입니다. 오늘 공부할 Stack Corruption을 이해하려면 기본적인 메모리, 레지스터, 스택 지식이 필요한데, 가령 메모리 구조는 이렇게 생겼습니다. 유저가 침입할 수 없는 Kernel 공간, 유저영역의 스택, 라이브러리, 힙, 초기화된 & 되지않은 전역변수 데이터, 코드영역 등 메모리는 크게 커널과 그 외로 나뉩니다. 메모리는 필요에.. 더보기
1. 시스템 해킹이란? (linux 기초명령어 & vim 명령어 사용법) 안녕하세요. Shayete입니다. 시스템해킹 공부를 하고 싶은데 어떻게 시작해야할지, 어느 책을 보고 공부해야할지 잘 모르시는 분들을 위해 포스팅을 시작했습니다. 시스템해킹은 리버싱과 다르게 특별하게 정리가 잘 된 서적(예를 들어 리버싱 핵심원리 랄지, 리버싱엔지니어링 비밀을 파헤치다 등)이 없기 때문에 공부할 때 불편함을 겪는 분들이 많으실 거라 봅니다. 저도 해킹 공부를 하면서 책을 본 기억이 없습니다. 결론은 인터넷에서 그때그때 자료를 찾아보면서 공부하는 방법밖에 없는데, 막연하게 인터넷에서 어떤 것부터 검색해야할지 모르는 분들이 많으실거라 생각합니다. 그런 분들을 위해 Basic System Hacking Technique 카테고리를 만들어 포스팅을 시작했습니다. 제가 지금부터 포스팅하는 공부환경.. 더보기
[2015 Plaid CTF] pwnable_EBP 160p 대학원 준비하느라 많이 바쁜 관계로 가볍게 한문제 풀고 포스팅합니다. 2015. 4. 18일 오전 3시인가 0시부터 시작했던 ppp팀 주관의 2015 plaid ctf , pwnable 문제 ebp 입니다. 전형적인 포맷스트링 버그 문제입니다. 바이너리는 매우 단순합니다. 제가 문제풀면서 적당히 정리한 text 라 지금 response와 buf 배열이 함수 내에 존재하는데원래 바이너리에 buf[1024]와 response[1024]는 전역변수로 선언되어 있습니다. 이 바이너리를 간단하게 요약하면 #include char buf[1024];char response[1024]; void main(){while(1){fgets(buf, sizeof(buf), stdin);echo();}} void echo().. 더보기
[Linux] Oh-my-Zsh! - agnoster theme 설정 Oh-my-Zsh! 의 agnoster 테마입니다. 간단하게 설정하는 방법을 알려드리겠습니다. 저 테마를 쓰려면 zsh 쉘이 있어야 합니다. Oh-my-Zsh! 는 Github에서 받거나 apt로 받을 수 있는데 sudo apt-get install zsh 로 설치해줍니다. 그 후, cd ~/.dotfiles/zsh/themes; git clone https://gist.github.com/3712874.git 로 테마폴더에 agnoster 를 받아줍니다. (혹여나 저 .dotfiles에 zsh가 존재하지 않는다면 find 명령어로 find / -name "*zsh*" -print 2>/dev/null 찾아서 그 폴더로 갑니다.) #이렇게 찾아도 안보이면 그냥 git에서 zsh 다운받아 설치하고 ~/.o.. 더보기
[2014 Christmas CTF] The Magic Picture Book write up이 풀려있기 때문에 슬슬 소스, 바이너리, 플래그파일을 뿌립니다. http://gon.kaist.ac.kr/?cat=1 여기 링크는 카이스트 곤 동아리 분들이 푼 write up 사이트입니다. 제가 아직 지식이 부족해서 바이너리를 복잡하게 꼬았어요. 미안합니다 ㅠ 다음엔 더 질좋고 공부하기에도 좋은 문제를 만들도록 하겠습니다.열심히 공부할게요. 문제는 이런식으로 생겼고 Weights and Measures 와 같이 exploit 코드는 공개하지 않겠습니다. signal()을 쓰면 fork()로 연결된 child 프로세스가 종료될 때 종료되지 않고 남아있는 걸 해결할 수 있다네요. 바이너리 사용법은 간단합니다. ./The_Magic_Picture_Book 4940 이런식으로 바이너리 옆에 사.. 더보기
[2014 Christmas CTF] Weights and Measures write up도 다들 올리시고들 하니, 이번에 냈던 2014년 크리스마스 ctf 알고리즘 문제 Weights and Measures 바이너리파일, C코드, 플래그 파일 올립니다. ..... 카이스트 곤 분들이 제 문제를 첫번째, 두번째 순서로 올려놔주셨네요. 감사합니다 ㅠ http://gon.kaist.ac.kr/?cat=1 여기 링크로 가시면 카이스트 곤 크리스마스 ctf 문제풀이를 보실 수 있습니다. 제가 임의로 짠 exploit 코드는 공개하지 않겠습니다. 제가 예상하지도 못한 방법으로 풀었던 우수한 write up들이 많기 때문이지요. 문제를 만들면서 많이 배웠습니다. 앞으로 더 재밌는 문제 준비할게요. 감사합니다. 사용법은 간단합니다../turtle 4940 같이 바이너리 옆에 사용할 포트를 .. 더보기