FC3는 Redhat 9.0과 다르게 여러가지 보호기법들이 추가되었다.
1. Exec-Shieled : 스택에 있는 코드 실행 불가
2. ASLR : 랜덤 스택
3. Ascill Armor : 연속적인 함수 호출 불가
4. Stack Dummy : 스택 사이에 더미를 넣음
RTL 과 fake ebp를 이용해서 풀수있다.
RTL을 이용해 execl 함수로 쉘을 띄워보겠다.
execl (실행할 파일 , 인자1, 인자2, ..., NULL);
execl은 마지막 인자가 NULL이 와야한다. 이부분은 got를 이용할것이다.
objdump에 -h 옵션을 줘서 확인하도록 하겠다.
got의 주소는 0x8049618이다
gdb로 더 자세히 확인해보겠다.
첫번째 인자가 0x8049618이라 할때 첫번째인자가 0x804954c가되고 세번째 인자는 널이기때문에 사용할수있다.
그러므로 fake ebp는 0x8049618 - 8 = 0x8049610 이 된다.
정확한 파일명을 알아야하기때문에 0x804954c 에 무엇이들어있는지 보자
리틀 앤디언으로 읽으면 0x01 0x00 0x00 0x00 0x24 가 된다.
파일명은 \x01이 된다.
execl 을 호출하기 위한 shell.c 를 만든다.
이제 execl의 주소를 구해야한다.
이때 주의할점은 execl 의 주소를 구하는게아니라 execl+3의 주소를 구해야한다. 왜냐하면 fake ebp는 ebp를 조작하는 기법인데 execl함수의 프롤로그가 실행되면 조작한 ebp가 무용지물이 되기때문이다.
execl + 3의 주소는 0x007a5723 이다.
[gate@Fedora_1stFloor ~]$ ln -s shell `python -c 'print "\x01"'`
[gate@Fedora_1stFloor ~]$ ls
? iron_golem iron_golem.c shell shell.c
스택에 hex 로 108(10진수로 264) 만큼을 할당하므로 더미는 8개가 들어간다.
페이로드의 구성은 ./iron_golem ["A"*264][GOT address - 8][execl address + 3] 가 된다.
'Hacking > FC3(Fedora core)' 카테고리의 다른 글
FC3 클리어 (0) | 2015.11.09 |
---|---|
LOB 페도라 FC3 evil_wizard -> dark_stone (0) | 2015.11.09 |
LOB 페도라 FC3 hell_fire -> evil_wizard (0) | 2015.11.05 |
LOB 페도라 FC3 dark_eyes -> hell_fire (2) | 2015.10.29 |
LOB 페도라 FC3 iron_golem -> dark_eyes (0) | 2015.10.28 |