해킹/시스템해킹 13

[시스템해킹 도전기 13편] Format String Bug(2)

안녕하세요! 오늘은 Format String Bug 두번째 시간입니다! 오늘은 공격시도와 마무리까지 해보겠습니다! 1. Format String 공격 준비 1) %x를 이용하여 buf의 위치를 구하기 buf의 위치는 공격시 원하는 주소에 값을 넣기 위해 사용되는 위치 buf의 위치는 공격시 원하는 주소에 값을 넣기 위해 사용되는 중요한 위치입니다. 2) %임의장소c + %n을 이용하여 원하는 주소에 원하는 값 삽입 100자리를 다음 4바이트 값을 주소로 참고하여 해당 주소에 100을 입력한다. 3) .dtors 주소 구하기 .dtors의 위치는 8049530가 됩니다. 시작은 fffffffff 끝은 00000000 으로 구성입니다. 시작과 끝 사이에 위치한 값이 종료시 실행될 함수입니다. 따라서 .dto..

[시스템해킹 도전기 11편] 메모리 보호 기법

안녕하세요! 오늘은 메모리 보호 기법에 대해서 알아보겠습니다. 우선 '메모리 보호'의 정의를 알아봅시다. 메모리 보호란 허가되지 않은 메모리 접근으로 인한 영향을 미리 예방하는 것입니다. 그가운데 우리는 DEP + ASCII ARMOR를 우회 하는 방법에 대해서 알아보겠습니다. 이번 과정은 Fedora20 Linux 버전에서 진행하였습니다. 먼저 DEP + ASCII ARMOR를 우회하는 공격과 그 의미에 대해 먼저 알아보겠습니다. 먼저 앞서서 설명 하였던 ASLR, DEP 두가지의 공격은 RTL 공격으로 뚫을 수 있습니다. 이러한 취약점을 보완하는 메모리 보호 기법이 Ascii Armor 기법입니다. Ascii Armor 기법은 공유 라이브러리 영역의 상위 주소에 0x00을 포함시켜 라이브러리를 텍스트..

[시스템해킹 도전기 10편] RTL(3)

안녕하세요! 오늘은 RTL 공격 마지막 시간입니다. 이전시간에 RTL 공격을 성공하였지만 한가지 문제점이 있었습니다. 그 문제점은 ASLR 보호 기법으로 인해 환경변수 주소로 인자를 구성할 수 없게되는 문제입니다. 따라서 이 방법을 우회할 수 있는 방법과 공격을 해볼 수 있도록 하겠습니다. 먼저 우회 방법은 DATA 영역에 있는 기계어 값에 실행에 필요한 내용을 넣고 그 주소를 이용하는 방법을 이용해서 DEP+ASLR 보호 기법을 우회해보려고 합니다. 위 data 영역에는 실행 권한이 있습니다. 환경 변수의 주소가 랜덤으로 변경이 된다고 하면 이용을 할 수 없기 때문에 /tmp/sh를 주소가 변하지 않는 data 영역의 항상 있을만한 값인 \x01 의 기계어를 파일명으로 사용하게 됩니다. 즉 aslr 적..

[시스템해킹 도전기 9편] RTL(2)

안녕하세요! 오늘은 지난 시간에 이어서 RTL 공격에 대해 알아보고자 합니다. 오늘은 일반 사용자가 쉘을 획득하고 root 권한까지 획득하는 방법을 알아 볼 수 있도록 하겠습니다. 먼저 권한을 획득할 수 있는 C파일을 만들겠습니다. 일반 사용자가 sh 파일을 만드는 이유는 RTL 공격시 execl의 인자로 사용할 /tmp/sh 문자열을 환경 변수에 넣어 주기 때문에 위 파일을 만들었습니다. execl 함수는 처음 인자 경로에 있는 파일을 실행하는 함수입니다. 함수의 원형 : int execl(char const *path, char const *arg0, ...); 사용 예시 : execl(“/bin/sh”,“argv”,NULL) execl의 주소를 확인하고 tmp/sh파일을 실행 시킬 수 있는 방법을 ..

[시스템해킹 도전기 8편] RTL (1)

안녕하세요! 오늘은 메모리 보호 기법에 대해서 알아보도록 하겠습니다. 메모리 보호란 무엇인지 알아보겠습니다. 메모리 보호란 컴퓨터 메모리의 사용을 제어하는 방법입니다. 다른 말로 허가되지 않은 메모리 접근으로 인한 영향을 미리 예방하는 것입니다. 메모리 보호 기법 4가지에 대해 소개를 잠깐 해드리겠습니다. 1) DEF(Data Execution Prevention) - heap과 stack과 같이 buffer overflow 공격에 이용되는 메모리 공간에 있는 코드를 실행시키지 않는 기법 2) ASLR(address Space Layout Randomization) - 실행할 때 마다 heap,stack,libc 등의 주소를 프로세스 주소 공간에 무작위로 배치하는 기법 3) ASCII Armor - 라이..

[시스템해킹 도전기 7편] Stack Buffer OverFlow(2)

안녕하세요! 오늘은 지난 시간에 이어서 버퍼오버플로우 공격에 대해 알아보도록 하겠습니다! 오늘은 직접 공격코드를 구현하고 실행하는 부분으로 마무리 지어보도록 하겠습니다. 먼저 오늘 공격에 사용될 코드를 작성해보겠습니다. 위 코드를 작성한 후 컴파일하여 실행할 수 있는 setuid 비트까지 걸어 줄 수 있도록 하겠습니다. 이제 bof 파일을 gdb로 분석해보겠습니다. 이해하기 어려우실수도 있을거같아서 위 부분을 구조로 나타내기위해 간단한 그림을 그려보았습니다! 위 그림과 같이 우리는 RET에 도달을 해야 하기 때문에 EBP-520부터 EBP+4 까지 도달하기 위해서는 524개의 인자가 필요함을 먼저 알 수 있습니다. 이 부분을 아래의 그림으로 한 번 더 설명드리겠습니다. 이제 어떻게 공격을 해야할지 위치를..

[시스템해킹 도전기 6편] Stack Buffer OverFlow(1)

안녕하세요! 오늘은 Stack Buffer OverFlow 에 대해 알아보겠습니다! 먼저 이 취약점에 대해 알아보기이전에 메모리 구조에 대해 먼저 알아보고 갈 수 있도록 하겠습니다! 1) 메모리 구조 커널 영역 커널 공간은 할당된 메모리 공간 안에 있지만 프로세스에서 직접 접근할 수 없는 공간 Off Limit 영역(구간간 경계선) 커널 영역에 접근하지 못하도록 할당 해둔 공간. 유저 영역 유저가 실제 사용하는 영역이다. 스택, 힙, 코드 영역이 포함되어있음. Null Pointer 할당 영역(에러 보고를 위한 공간) 모두 0이고 변경 불가능한 영역, 시스템 보호 차원에서 만든 영역. 메모리 구조에서 윈도우는 커널 영역이 2GB, 유저 영역이 2GB, 리눅스는 커널 영역이 1GB, 유저 영역이 3GB 위..

[시스템해킹 도전기 5편] 쉘코드 - 심화

안녕하세요! 이번에는 쉘코드를 통해서 직접 쉘을 발생시키는 코드를 작성해보도록 하겠습니다. 작성 방법은 쉘코드 제작 방법과 동일하므로 참고하시면 되겠습니다! 1) 쉘코드 제작 – C언어 이번에 shell을 실행시킬 C언어 코드입니다 이후 컴파일 하여 잘 실행 되는지 확인해보겠습니다. 잘 실행 되는 것을 확인 하였고 이제 gdb를 통해서 어떻게 되어있는지 확인해보겠습니다. 우리가 C언어에 주었던 값과 gdb로 나온 값이 어떻게 나왔는지 표로 정리 해보겠습니다. execve i2sec[0] i2sec &i2sec[1] EAX EBX ECX EDX 0xb 0x808ef88 0xbfffe6a0 0xbfff6a4 이제 어셈블리어로 제작하여 코드를 제작해보겠습니다(이번에는 NULL 까지 제거하여 작성해보겠습니다!)..

[시스템해킹 도전기 4편] 쉘코드(2)

안녕하세요! 이전에 했었던 쉘코드를 이어서 진행 해보도록 하겠습니다! (이번편을 보시기 전에 이전편을 보시고 와주세요!) https://kamro17.tistory.com/entry [시스템해킹 도전기 3편] 쉘코드(1) 안녕하세요~ 오랜만에 글을 씁니다 ㅎ.. 매일 매일 글을 쓰도록 노력해보겠습니다! 오늘은 쉘코드에 대해서 알아보고자 합니다! 쉘코드(shellcode) 1) 쉘코드의 의미 ◦ 시스템의 특정 명령을 실행 kamro17.tistory.com 4)쉘코드 제작 – 어셈블리 (1) 어셈블리 코드 제작 C언어 코드를 토대로 어셈블리를 제작 해보겠습니다. 어셈블리 코드의 내용은 message 내용의 “i2sec”을 출력한다는 의미입니다. 이후 어셈블리 언어로 컴파일을 하겠습니다. 무한루프가 발생하는..