[페도라3의 환경]

 

 


스택 영역을 보면 실행권한이 없습니다.
페도라3 환경처럼 스택에 쉘코드를 올리고 실행시키는 공격은 통하지 않습니다.
그렇다면 음… rtl 나 하면되려나?

 

우선 리턴 주소가 어디인지 확인하겠습니다.



보시면 264bytes 만큼 버퍼 공간을 확보하였습니다.
이는 8bytes 더미가 껴있기 때문입니다.

 

 

대충 리턴주소의 위치를 알아냈습니다.

 

r `python –c 'print "A"*268 + [system함수 주소] + [더미4bytes] + [/bin/sh]


system함수의 주소를 구하겠습니다.

그 다음은 /bin/sh의 주소를 구하겠습니다.

 

r `python –c 'print "A"*268 + \xc0\x07\x75\x00+ "AAAA" + "\x03\x36\x83\x00"'`

음.. 리턴영역에는 00은 아예 쓰여지질 않네요. 즉, 3바이트(\xc0\x07\x75)쓰이고 1바이트는 \x41로 채워져서 다른공격을
생각해봐야겠습니다. 문제 힌트로 fake ebp인데 나와있는거 말고 다른거로 풀고싶은데..음

 

일단 내일 발표준비해야하니까… fake ebp로 풀어봐야겠습니다.

예전에 fake ebp 문제 풀었던 적이 있었는데 그때는 buffer주소로 ebp를 바꿔서 쉘코드를 실행하게 하는 문제였었는데
자꾸 그 문제에 대한 고정관념 때문에 결국 답 봤음..

 


대충 간단히 설명하자면, 함수가 호출될 때 호출 된 함수는 ebp를 기준으로 인자를 참조합니다. (ebp+8, ebp+c 이런식으로)
여기에다가 ret영역을 execl함수의 주소로 덮어씌우는데, 조건이 하나 있습니다..
어떤 조건인가 하면 지금 공격할 방법이 fake ebp이기 때문에 ebp가 변경되지 않는 선에서 ret영역을 덮어 씌워줘야합니다.
무슨 말인가 하면, 함수가 호출되면 프롤로그를 수행합니다.(push ebp, mov ebp esp)
이러한 프롤로그 동작들은 ebp값을 변경시키기 때문에 프롤로그가 끝나는 주소를 ret영역에 덮어씌워줘야 합니다.
그리고 sfp를 변경시켜줄 것인데, 현재 랜덤스택이기 때문에 고정된 값을 지닌 곳을 ebp로 변경시켜 주어야합니다.
그 부분은 got영역으로 할 것인데 한번 살펴보도록 하겠습니다.

 


0x08049618이 got 영역이다.

 

이 정도만 살펴보고 다음으로 execl함수에 대해 알아볼 것인데, 이 함수는
execl(실행파일, argv,…,NULL); 이런식으로 인자 마지막에 NULL이 와야함.
이 함수도 ebp+8로 첫번째 인자를 참조하고 ebp+c, ebp+10… 이런식으로 인자를 참조합니다.

그러면 sfp를 got영역의 임의의 주소로 변경하게 되면 위와 같은 방식에 의해 첫번째 인자는
ebp+8을 참조하게 됩니다. 그러면서 마지막 인자가 NULL이 오는 조건을 만족시키는 주소를 지정하게 된다면..
음.. 그림을 보면서 하도록 하겠습니다.


sfp를 0x08049610으로 덮어씌우면 함수가 종료될 때 leave명령어에 의해 ebp값이 0x08049610으로 이동한다.
그 후 ret영역에 execl+3주소로 점프를 하게 되고, execl함수는 인자를 참조하기위해 ebp+8,ebp+c….을 하게 된다.
그러면 첫번째 인자인 실행파일은 어떤 값이 있을지 살펴보도록 하겠습니다.

 


"\001"이라는 실행파일명이 되겠습니다. 그러면 execl함수에 의해 "\001"을 실행시켰을 때 

쉘이 따지면 되겠습니다.
그렇게 하려면 심볼릭 링크를 통해서 해결하면 되겠습니다.





아참 execl함수 주소는 gdb에서 print execl 하면 됩니다.
안될 경우는 bp걸고 실행 고고~~

blood on the fedora


끝!

자면서 써서 횡설수설합니다ㅋㅋ

'System Hacking > LOB_fedora' 카테고리의 다른 글

[Fedora4] dark_stone -> cruel  (0) 2015.11.28
[Fedora3] evil_wizard -> dark_stone  (0) 2015.11.25
[Fedora3] hell_fire -> evil_wizard  (0) 2015.11.23
[Fedora3] dark_eyes -> hell_fire  (0) 2015.11.22
[Fedora3] iron_golem -> dark_eyes  (0) 2015.11.20

+ Recent posts