본문 바로가기

System/Linux17

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.
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.