LOB 페도라 FC3  gate -> iron_golem
Hacking/FC3(Fedora core)

LOB 페도라 FC3 gate -> iron_golem

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

shell 파일에 아까 구한 \x01로 심볼릭 링크를 걸었다. 

스택에  hex 로 108(10진수로 264) 만큼을 할당하므로 더미는 8개가 들어간다.  

페이로드의 구성은  ./iron_golem ["A"*264][GOT address - 8][execl address + 3] 가 된다.




./iron_golem `python -c 'print "A"*264+"\x10\x96\x04\x08"+"\x23\x57\x7a\x00"'`

비밀번호는 blood on the fedora 이다.