본문 바로가기

반응형

공부/보안

(14)
[dreamhack] System Exploitation 3강 3강 Memory Corruption - C (2) 3.1 포맷 스트링 버그(Format String Bug) 초기화되지 않은 메모리 : printf나 sprintf와 같이 포맷 스트링을 사용하는 함수에서 발생하는 취약점으로, %x나 %s와 같이 프로그래머가 지정한 문자열이 아닌 사용자의 입력이 포맷 스트링으로 전달될 때 발생하는 취약점 1 2 3 4 5 6 7 8 // fsb-1.c #include int main(void) { char buf[100] = {0, }; read(0, buf, 100); printf(buf); } cs 위 코드는 char형 배열 buf에 100 바이트를 입력받고 printf 함수를 통해 입력받은 버퍼를 출력하는 예제이다. 만일 "%x"와 같은 포맷 스트링을 문자열로 입력..
나 보려고 정리해두는 gdb 명령어 gdb 명령어 info functions : 함수의 이름과 주소 출력 disassemble(disass) main : main 함수의 디스어셈블리 출력 break(bp) : 주소에 breakpoint 설정 info breakpoints(bl) : breakpoint 정보 출력 run(r) : 프로그램을 처음부터 실행 display : 매 실행 시 인자로 전달된 값 출력 continue(c) : 다음 브레이크 포인트까지 실행 si : step instruction으로 명령어 1개 실행 finish : 현재 함수 모두 실행 info register : 레지스터 정보 출력 x/ : 지정된 메모리 영역을 특정 단위로 표현 p : print, 인자로 전달된 값 출력 delete(d) [break number] :..
[dreamhack] System Exploitation 2강 2강 Memory Corruption - C (1) 2.1 버퍼오버플로우란? 버퍼 : 지정된 크기의 메모리 공간 버퍼오버플로우 : 버퍼가 허용할 수 있는 양의 데이터보다 더 많은 값이 저장돼 버퍼가 넘치는 취약점 분류(발생위치) - 스택 버퍼오버플로우 : 지역 변수가 할당되는 스택 메모리에서 오버플로우가 발생 ex) 8 바이트의 버퍼 A, B가 메모리에 순차적으로 할당되었다. 만약에 버퍼 A에 16바이트 데이터를 복사하면 데이터는 버퍼 A를 넘어 뒤의 데이터 영역인 B에 쓰여진다. 이는 프로그램의 정의되지 않은 동작(Undefined Behavior)을 이끌어낸다. 이를 악용한다면 기계어 코드를 삽입한 후 함수 포인터를 공격자의 코드 주소로 덮어 코드를 실행할 수 있다. 스택 오버플로우 예제 1) 1 2..
[dreamhack] System Exploitation 1강 1강 시스템 해킹이란? 1.1 해킹 : 컴퓨터의 하드웨어, 소프트웨어, 네트워크, 웹사이트 등 각종 정보 체계서 주어진 권한 이상을 얻거나 의도치 않은 동작을 일으키는 행위를 의미 (컴퓨터 보안) - 엄연히 논리와 규칙을 따르며, 그 원리를 살펴본다면 이해 가능 - 단순히 규칙을 창조적으로 활용해 의도치 않은 결과를 얻어내는 일련의 행위 분류 - 웹 사이트를 공격하는 웹 해킹 - 컴퓨터와 컴퓨터가 연결되는 네트워크를 공격하는 네트워크 해킹 - 프로그램의 약점을 공격하는 시스템 해킹 등 1.2 소프트웨어 버그 :프로그램이 잘못된 결과를 내거나, 오류를 발생하는 등 의도치 않은 동작을 수행하게 되는 문제 - 프로그래머가 의도하지 않은 동작을 수행하는 소프트웨어 버그(Bug)가 가장 상위 - 보안에 영향을 미..
[pwnable.kr] - collision 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include #include unsigned long hashcode = 0x21DD09EC; unsigned long check_password(const char* p){ int* ip = (int*)p; int i; int res=0; for(i=0; i
[pwnable.kr] fd [!] hint read 함수의 파일 디스크립터 [*] 원격 접속의 종류 중 하나로 SSH는 멀리 떨어진 다른 컴퓨터에 접속하여 명령을 실행할 수 있도록 해주는 응용 프로그램 또는 그 프로토콜을 말한다. SSH는 호스트 주소(IP 또는 도메인)와 사용자 정보(Credential)가 있어야 한다. ssh [user name]@[host name] [-p : 원격 호스트에 연결할 포트를 지정] 를 해주고 pw에 "guest"를 입력하면, 아래와 같이 출력된다. 서버에 연결이 되었고, ls 명령어를 통해 fd, fd.c, flag 파일이 있다는 것을 확인했다. ls : 디렉토리 파일 표시 (도스의 dir 명령과 흡사) ls -al : hidden 속성의 파일을 표시해주는 a 옵션과 파일 종류, 사용권한 등 자..

반응형