검색결과 리스트
글
iat에 대한 좋은 자료
http://yokang90.tistory.com/26
'SYSTEM' 카테고리의 다른 글
(FSB)두가지 방법의 FSB (0) | 2014.07.27 |
---|---|
FSB(포맷 스트링 버그) (0) | 2014.07.27 |
설정
트랙백
댓글
글
(FSB)두가지 방법의 FSB
FSB기법에는 여러가지 방법이 있는데, .dtor의 주소를 사용해서 함수의 RET를 바꿔주는 방법과 GOT주소를 이용하는 방법을 알아볼것이다.
일단 .dtors를 이용한 fsb에 대해 먼저 보자.
.dtors GNU 컴파일러는 컴파일시에 .ctors, .dtors 두 세그먼트를 생성하는데, .ctors속성의 함수는 main() 전에 실행되고, .dtors 속성의 함수는 main() 종료 후에 실행된다 그러므로 main 함수가 종료된 다음 .dtors 속성의 함수가 실행되는 것을 이용해 .dtors 속성의 함수 내용을 얻어내면 해당 영역에서 호출되는 함수들의 주소값을 알아낼 수 있는것이다. |
즉, .dtors성격을 가진 함수의 ret값을 가져와서 해당 ret 주소에 쉘코드가 담긴 환경변수의 주소값을 넣어주는 것이다.
이 방법은 해당 함수가 종료된 후에 쉘이 실행되도록 하는 방법이다.
그다음은 GOT주소를 이용한 fsb를 볼것인데, 일단 GOT주소가 무엇인고
PLT(Procedure Linkage Table) PLT는 일종의 실제 호출 코드를 담고 있는 테이블로써 이 내용 참조를 통해 _dl_runtime_resolve가 수행되고, 실제 시스템 라이브러리 호출이 이루어지게 된다 GOT(Global Offset Table) GOT는 PLT가 참조하는 테이블로써 프로시져들의 주소를 가지고 있는데, PLT가 어떤 외부 프로시져를 호출할 때 이 GOT를 참조해서 해당 주소로 점프하게 된다. 함수를 맨 처음 호출할때는 PLT로 이동해서 GOT를 참조, 다시 PLT로 이동해서 dl_runtime_resolve 를 수행해 GOT를 저장한후 실제 함수 주소로 점프하는데, 같은 함수를 다시 호출할 때는 이미 GOT에 실제 함수의 주소가 저장되어 있으므로 함수를 호출한 다음 PLT에서 바로 GOT를 참조하여 함수로 점프할 수 있게 된다. |
즉, got주소를 이용한 fsb는 함수의 ret주소를 변조하는것이 아닌, 함수가 실행될 주소를 변조하는 방법이라고 할 수 있다.
이방법을 사용하기 위해서는 일단 프로그램 내에서 같은 함수가 두번 이상 호출되어야 한다. 그래야만 GOT에 실제 함수의 주소가 들어있어 PLT에서 GOT를 바로 참조할 수 있기 때문. 두번이상 호출되지 않은 함수를 사용한다면 함수로의 점프가 곧바로 이루어 지지 않아 원하는 결과를 얻을 수 없을것이다.
fsb를 할떄는 이 두번이상 호출된 함수의 GOT주소값을 불러와 해당 주소에 쉘코드가 담긴 환경변수의 주소값을 넣어준다.
이 방법은 해당 함수가 실행될때에 이동하는 주소를 바꿔서 함수대신 쉘코드가 실행되게 하는 방법이다. 해당 함수가 시작할때에 쉘이 실행된다.
'SYSTEM' 카테고리의 다른 글
iat에 대한 좋은 자료 (0) | 2014.08.16 |
---|---|
FSB(포맷 스트링 버그) (0) | 2014.07.27 |
설정
트랙백
댓글
글
FSB(포맷 스트링 버그)
Format String Bug - 포맷 스트링 버그
printf() 함수를 사용할때, 함수에 원형에 따른 사용 방법은 ("변수이름",서식문자) 이지만 사실 변수 이름만 사용해도 별 문제는 없다. 그러나 변수의 내용안에 서식문자가 들어가게 되면 문제가 발생한다. printf함수가 실행되는 와중에 서식문자를 만나고, 만난 서식문자를 문자열로 보지 않고 서식 문자로 인식해버려 현재 메모리 스택의 다음 4바이트를 참조해 서식문자에 맞는 값을 출력해버린다. 이때의 변수는 printf함수의 인자값 형태로 들어갈텐데, esp가 계속 올라가면서 메모리를 참조하다보면 printf()함수의 ret 위치까지 참조를 해버린다. 이때 발생하는게 포멧 스트링 버그다.
단순히 참조만 한다면 에러가 나지 않겠지만, %n서식문자를 사용하면 에러가 발생한다. %n서식문자는 %n이 나오기전 출력된 자릿수를 계산하여 다음 참조될 메모리 4바이트를 주소값으로 인식, 해당 주소 위치에 4바이트 만큼의 숫자를 입력해버린다. 이때문에 원래 정상적인 값이 들어가야만 하는 위치에 전혀 다른값이 들어가게 할 수 있다.
또한, 문자열의 길이를 계산하는 %n 서식문자의 특성상 %c서식문자를 통해 특정 길이의 문자를 출력하여 원하는만큼의 숫자를 %n서식문자가 출력하게 만들 수 있다. (%’숫자’c 형태로 사용)
%hn 이라는 서식문자는 %n과 같은 기능을 하지만, 4바이트 값이 아닌 2바이트 값을 입력하는 기능을 한다.
'SYSTEM' 카테고리의 다른 글
iat에 대한 좋은 자료 (0) | 2014.08.16 |
---|---|
(FSB)두가지 방법의 FSB (0) | 2014.07.27 |
RECENT COMMENT