시스템해킹 공부 사이트 시스템 해킹 공부에 도움되는 사이트 [공부 순서] 공부 가이드라인 포너블 공부 순서 그 외 도움되는 사이트 해킹 설명 리눅스 기초명령어 & vim 명령어 사용법 [기초 공부] 달고나 문서 Hackerz on the ship [문제] 해커스쿨 FTZ - trainer 10 + 리눅스 기초 10 + bof 10 LOB - 포너블 사이트 pwnable.kr pwnable.tw Exploit Exercises OverTheWire 시스템 해킹 2021.02.14
[LOB] gate → gremlin id/pw : gate/gate로 접속 gremlin.c 파일을 열어보았다. strcpy 함수는 복사하는 문자열의 길이를 검증하지 않아 취약점이 발생한다. 먼저 \xff를 \x00으로 인식하는 오류를 피하기 위해 bash2를 사용했다. 권한 문제로 gremlin을 복사한 gremlin2를 gdb로 확인해보자. *main+62에서 buffer가 ebp-256에 있는 것을 알 수 있다. 버퍼의 크기가 256이기 때문에 dummy값은 없는 것 같다. buffer(256) - sfp(4) - ret(4) buffer의 주소를 알기 위해 *main+59에 breakpoint를 설정할 것이다. 그리고 A를 256개 입력해준다. b*main+59 r `python -c 'print "A"*256'` x/100x $e.. 시스템 해킹/LOB 2021.02.09
[dream hack] Linux Exploitation & Mitigation Part 1 - 1. ELF 동적 분석 강의 링크 ELF 동적 분석 Intro 바이너리를 분석할 때, 바이너리가 실행되며 변화하는 상태를 관찰하기 위해 동적 디버깅이 필요한 경우가 있다. 리눅스의 실행 파일인 ELF파일을 동적으로 디버깅하는 방법에 대해 알아보자. 도구 gdb, strade, Itrade, IDA 등이 있다. gdb의 디스어셈블리 문법에는 AT&T와 intel 두 종류가 있다. 널리 쓰이는 디스어셈블리 문법은 intel이다. gdb 기본 설정에서의 디스어셈블리 문법은 AT&T이기 때문에 intel로 바꿔줘야 한다. .gdbinit는 gdb를 시작할 때 자동적으로 실행할 gdb 명령어들을 저장하고 있는 파일이다. .gdbinit에 gdb의 디스어셈블리 문법을 intel로 바꿔주는 명령어인 set disassembly-flavor.. 시스템 해킹/dream hack 2021.02.08
[dreamhack] Memory Corruption - C (I) 스택 버퍼 오버플로우 강의링크 1. 버퍼 오버플로우 버퍼 오버플로우란? C언어에서 버퍼란 지정된 크기의 메모리 공간이라는 뜻이다. 버퍼 오버플로우는 버퍼가 허용할 수 있는 양의 데이터보다 더 많은 값이 저장되어 버퍼가 넘치는 취약점이다. 발생하는 위치에 따라 스택 버퍼 오버플로우, 힙 오버플로우로 나뉜다. 그 이유는 인접한 메모리를 오염시키는 취약점이기 때문에 어떤 메모리를 오염시킬 수 있는지에 따라 공격 방법이 달라지기 때문이다. 스택 버퍼 오버플로우 스택 버퍼 오버플로우는 지역 변수가 할당되는 스택 메모리에서 오버플로우가 발생하는 경우다. 8 바이트의 버퍼 A와 8바이트 데이터 버퍼 B가 메모리에 선형적으로 할당되었다고 생각해보라. 버퍼 A에 16바이트의 데이터를 복사한다면 이 데이터의 뒷부분은 버퍼 A를 넘어 뒤에 있는.. 시스템 해킹/dream hack 2021.02.08
[시스템] Buffer overflow 공격 54~84p - 달고나 해커 지망자들이 알아야 할 Buffer Overflow Attack의 기초 Buffer overflow 공격 Buffer overflow 공격 실제 공격 방법을 시험해 보기 위해 vul.c 프로그램을 살펴보자. 실행 시 주어지는 첫 번째 인자를 buffer라는 char형 배열에 복사한다. bound check를 하지 않는 strcpy()함수를 이용하고 있다. 1024바이트의 버퍼공간에 쉘 코드와 NCP로 채우고 4바이트는 main함수의 base pointer이므로 NCP로 채우고 다음 만나는 4바이트가 return address이므로 이곳에 쉘 코드가 있는 곳의 address를 넣어주면 쉘 코드를 실행시킬 수 있다. 컴파일 후 setuid bit를 걸어준다. 고전적인 방법 쉘 코드가 있는 곳의 addre.. 시스템 해킹 2021.02.04
[시스템] buffer overflow의 이해 12~53p - 달고나 해커 지망자들이 알아야 할 Buffer Overflow Attack의 기초 4. 프로그램 구동 시 Segment에서는 어떤 일이? (p.12) simple.c void function(int a, int b, int c){ char buffer1[15]; char buffer2[10]; } void main(){ function(1, 2, 3); } 위는 스택을 이해하기 위해 만든 간단한 프로그램이다. $gcc -S -o simple.asm simple.c 로 컴파일 컴파일러의 버전에 따라 다르게 생성된다는 것을 알고 있어야 한다. 더보기 이 프로그램이 컴파일 되어 실제 메모리 상에 어느 위치에 존재하게 될지 알아보기 위해 컴파일을 한 다음 gdb를 이용해 어셈블리 코드와 메모리에 적재될 logical .. 시스템 해킹 2021.02.02
8086 Memory Architecture, 8086 CPU 레지스터 구조 (by. 달고나) 해커 지망자들이 알아야 할 Buffer Overflow Attack의 기초 8086 Memory Architecture 시스템이 초기화 되기 시작하면 시스템은 커널을 메모리에 적재시키고 가용 메모리 영역을 확인하게 된다. 시스템은 운영에 필요한 기본적인 명령어 집합을 커널에서 찾기 때문에 커널 영역은 반드시 저 위치에 있어야 한다. 하나의 프로그램이 실행되기 위한 메모리 구조를 알아보자. 운영체제는 하나의 프로세스를 실행시키면 이 프로세스를 segment라는 단위로 묶어서 가용 메모리 영역에 저장시킨다. 멀티태스킹 - 메모리에는 여러 개의 프로세스가 저장되어 병렬적으로 작업을 수행한다. 하나의 segment는 그림의 오른쪽과 같은 구조를 갖고 있다. code segment에는 시스템이 알아들을 수 있는 .. 시스템 해킹 2021.01.17