본문 바로가기

System/Linux17

GOT overwrite - GOT를 PLT로 덮는다?? GOT, PLT에 대한 설명 - PLT(Procedure Linkage Table), GOT(Global Offset Table) - 그럼 본론으로 .... 보통 GOT overwite를 하면 got주소를 plt주소로 덮어서 공격한다. ex) printf의 got를 system의 plt로 덮는다! 예전에 GOT overwirte를 할 때도 생각했었는데 got를 got로 덮거나 plt를 got나 plt로 덮어도 되나 생각해봤었다. ... 생각만 해보고 실습은 해보지 않았었다. 그래서 오늘 실습해본 내용을 적어보려고 한다. () 이게 실습하면서 은근히 헷갈렸다. 그래서 아래 2가지를 확실히 기억하면 좀 더 이해하기 쉬워진다. GOT에는 주소가 저장되어 있다. (plt+6의 주소 or 실제 함수의 주소) PL.. 2012. 9. 24.
메모리 보호 기법 SSP(Stack Smashing Protector) Stack Smashing Protector은 gcc 4.1버전 부터 있는 stack overflow를 방지하기 위한 컴파일러 옵션이다. gcc 4.6.1버전에서 컴파일 후 overflow가 발생하는 프로그램을 실행시켜 보니 다음과 같이 stack smashing detected가 뜨는 것을 확인 할 수 있다. SSP 끄기 : -fno-stack-protector SSP를 모든 함수에 설치 : -fstack-protector-all (원래는 일정 크기의 char배열이 있는 함수에만 적용됨) SSP의 기능을 살펴보자 1. 로컬 변수 재배치 2. 로컬 변수전에 포인터 배치 3. canary 삽입 1. 로컬 변수 재배치 #include #include #include void main(int argc, cha.. 2012. 8. 28.
[BOF] Fedora Core 3,4,5의 기법 요약 Fedora Core3 : 인자 참조를 ebp로 하기 때문에 fake ebp(leave)를 이용한 공격 | buf | 인자로 사용할 부분-8을 ebp로 조작(주로 GOT이용)| &execl+3 | ? | ? | ? | ? | .... Fedora Core4 : 인자 참조가 esp로 바껴서 고정된 인자값까지 ret sleding을 넣어 공격 | buf | ebp | ret | &ret | &ret | &ret | &ret | &ret | &ret | &execl | ? | 고정된 인자값 | ... NULL | Fedora Core5 : 함수 프롤로그, 에필로그 부분에서 ecx를 이용해 ret주소를 알아내므로 ecx 조작을 이용해 공격 | buf | ecx | ebp | ret | .... | ret | e.. 2012. 8. 27.
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.