본문 바로가기

System24

Fedora Core5의 bof공격 Fedora Core 5 환경에서 bof를 해보자. 취약 소스는 아래와 같다. #include #include int main(int argc, char *argv[]) { char buf[256]; if(argc!=2) exit(1); strcpy(buf, argv[1]); printf("%s \n", buf); return 0; } gdb로 디스어셈한 코드를 가져온 것이다. 0x080483e4 : lea 0x4(%esp),%ecx 0x080483e8 : and $0xfffffff0,%esp 0x080483eb : pushl 0xfffffffc(%ecx) 0x080483ee : push %ebp 0x080483ef : mov %esp,%ebp 0x080483f1 : push %ecx 0x080483f2.. 2012. 8. 27.
remote BOF1 - [xinetd 데몬으로 작동하는 프로그램] 먼저 local bof만 하다가 remote bof가 무엇인지 모르는 분들을 위해서 간략하게 설명하자면 local bof의 경우에는 해당 서버의 계정이 있을때 서버에 접속하여 root권한 아니면 자신보다 더 높은 권한을 얻을 수 있게됩니다. 그런데 해당 서버에 계정이 없을 때는 지금 말하는 remote attack을 하면 됩니다. remote bof는 서버에서 제공하는 취약한 서비스 프로그램을 exploit하여 해당 서비스를 실행하는 데몬의 실행권한(쉘)을 가져올 수 있게 됩니다. 그럼 xinetd로 작동하는 프로그램에 대해서 remote bof를 해보도록 하겠습니다. 실습 환경은 Red Hat Linux release 8.0 입니다. 시작하기 전에 먼저 데몬의 2가지 실행 모드에 대해서 조금 알아보면 .. 2012. 7. 24.
FSB(Format String Bug)로 GOT Overwrite 해보기 이번에는 FSB(Format String Bug)로 .dtors가 아닌 GOT영역을 덮어서 공격해보도록 하겠습니다. PLT(Procedure Linkage Table), GOT(Global Offset Table) 포맷 스트링 버그 - FSB (Format String Bug) 기본 연습하기 GOT나 포맷 스트링 버그에 대해서 잘 모른다면 먼저 위의 글을 읽어 보면 좋을 것 같습니다 ~ 그럼 GOT와 포맷 스트링 버그에 대해서 안다고 생각 하고 GOT Overwrite를 해보겠습니다. 실습 환경은 RedHat 8.0 입니다. 위의 공격 프로그램 attackme는 setuid가 걸려 있으며 printf(buf)에 의해 포맷스트링 버그가 존재합니다. 공격 방식은 printf(buf)를 이용해 printf의 .. 2012. 5. 22.
ctors, dtors 영역 포맷스트링 버그에 이용하는 .dtors 영역에 대해서 알아 보겠습니다. GNU Compiler(gcc)는 컴파일 할 때 .ctors, .dtors 두 segment를 생성합니다. (gcc의 속성) ( ctors - constructor, dtors - destructor ) 이 두 영역의 특징은 .ctors 속성의 함수는 main() 전에 실행되고 .dtors 속성의 함수는 main() 종료 후에 실행 된다는 것입니다. 그러므로 main() 종료 후에 .dtors 속성의 함수가 실행되는 것을 이용해서 그 부분을 쉘 코드가 있는 주소 값으로 덮음으로써 쉘 코드가 실행되게 할 수 있다는 것입니다. 포맷 스트링 버그 - FSB (Format String Bug) 기본 연습하기 main() -> test_dto.. 2012. 5. 10.