본문 바로가기

System24

PLT(Procedure Linkage Table), GOT(Global Offset Table) PLT(Procedure Linkage Table) PLT는 일종의 실제 호출 코드를 담고 있는 테이블로써 이 내용 참조를 통해 _dl_runtime_resolve가 수행되고, 실제 시스템 라이브러리 호출이 이루어지게 됩니다.. GOT(Global Offset Table) GOT는 PLT가 참조하는 테이블로써 프로시져들의 주소를 가지고 있습니다. PLT가 어떤 외부 프로시져를 호출할 때 이 GOT를 참조해서 해당 주소로 점프하게 됩니다. - printf 함수 호출이 처음일 때 [printf 함수 호출]--->[PLT로 이동]--->[GOT 참조]--->[다시PLT로 이동]--->[_dl_runtime_resolve]--->[GOT 저장 후, 실제 함수 주소로 점프] - printf 함수 호출이 처음이 아.. 2012. 5. 7.
포맷 스트링 버그 - FSB (Format String Bug) 기본 연습하기 포맷 스트링 버그 해커 스쿨의 ftz level20 포맷 스트링 버그 문제를 풀면서 연습을 해보겠습니다. 먼저 포맷 스트링 버그의 원리에 대해서는 아래 블로그를 참고하세요. http://geundi.tistory.com/133 그럼 ftz의 level20문제를 풀어보겠습니다. 일단 문제를 출력해보면 printf에서 포맷 스트링 버그가 있다는 것을 알 수 있습니다. 그럼 포맷 스트링 공격을 시도해봅시다. 1. 먼저 shellcode를 환경 변수에 넣어 줍니다. export CODE=`perl -e 'print "\x90"x100, "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x.. 2012. 5. 2.
windows bof [basic stack overflow] windows bof [쉘 코드 만들기]에서 만든 쉘 코드를 이용해서 간단한 stack bof를 해보겠습니다. 실습환경은 이전처럼 Windows XP(Service Pack 2), Visual 6.0입니다. 먼저 bof에 취약한 프로그램을 만듭니다. #include #include int main(int argc, char* argv[]) { char buf[100]; if( argc < 2) { printf("%s string\n", argv[0]); exit(1); } printf("\nbuf : 0x%x\n", buf); sprintf(buf, argv[1]); printf("%s\n", buf); return 0; } sprintf로 인해서 bof취약점이 존재하게 만들었습니다. 그리고 나중에 리턴.. 2012. 4. 8.
windows bof [쉘 코드 만들기] 리눅스 bof를 하다가 처음으로 windows bof를 해보게 되었습니다. 둘다 sfp나 ret을 조작해서 공격자가 원하는 shellcode를 실행시키는 원리는 같습니다. 그런데 리눅스에서는 SUID로 인해 계정 권한 상승을 하는데 windows에서는 무엇을 할까요? 일반적으로 exploit하는 쉘 코드는 다음과 같습니다. Backdoor port open shellcode Reverse Telnet shellcode Download & Exec shellcode 여기서는 가장 기본적으로 cmd.exe를 실행하는 쉘 코드를 만들고 bof를 시도해 보겠습니다. 실습 환경은 아래와 같습니다. - Windows XP(Service Pack 2) - Visual 6.0 먼저 cmd를 띄우는 쉘 코드를 만들어보겠.. 2012. 4. 8.