본문 바로가기

System24

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.
메모리 보호 기법 DEP/NX DEP(Data Execution Protection)란 데이터 실행 방지로 스택이나 힙에서의 쉘 코드 실행을 막아주는 메모리 보호 기법이다. 종류 HardWare DEP : 가상 메모리 페이지 단위로 해당 메모리에서 코드를 실행할 수 없음을 나타낸다. SoftWare DEP : seh overwrite같이 특정 유형의 악의적인 코드 공격을 막아준다. (SafeSEH) Windows에 DEP정책 OptIn : default설정으로 필수적인 Windows 프로그램 및 서비스에만 사용(DEP가 set된 프로그램) OptOut : 사용자가 직접 선택한 항목을 제외한 모든 프로그램 및 서비스에 사용 AlwaysOn : 모든 프로세스에 항상 DEP 적용 AlwaysOff : DEP를 사용하지 않음 OptIn, O.. 2012. 9. 5.
메모리 보호 기법 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.