티스토리 뷰




FTZ level13

pw : it is like this


이번에도 NOP Sled로 풀까 했지만


해킹은 재밌는 방법이 많은걸요!


그래서 RTL기법을 이용해서 풀겠습니다.


먼저 hint를 보겠습니다.



코드를 보니 감이 오시나요?


여기에도 당연히 argv로 값을 받는데 검사를 하지 않으니 BOF가 일어나네요.


하지만 i라는 요상한 놈이 생겼습니다.


i의 값이 0x1234567이 아니면 kill함수를 실행하는군요..


저희는 bof로 ret을 조작해야하는데 bof를 하면 i값도 덮혀져서 저희의 목표를 이루지 못할 것 같습니다.


하지만 bof를 하면서 i의 값 부분을 0x1234567로 해주면 우회가 가능하겠죠?

저는 이렇게 i값도 같이 컨트롤해서 ret에 도달할 것 입니다.

하지만 기존 NOP sled방식말고 RTL이라는 기법을 이용할 거에요.

Return to Library 기법인데요, ret에 system함수의 주소를 넣어서 점프하고 인자값으로 /bin/sh을 넣을거에요.


attackme는 setuid가 걸려있기 때문에 쉘을 얻을 수 있겠죠?


먼저 분석을 하기위해 attackme를 ./tmp/attackme로 옮기겠습니다.


보기편한 intel로 설정했습니다.


어셈블리 코드입니다.


0x418만큼의 스택 프레임을 구성하고 있습니다.



0x418은 10진수로 1048입니다.


1048만큼의 스택프레임을 형성하고 있다는 거죠.


1048을 그냥 bof하면 안되죠?


왜냐하면 저희는 i의 값을 0x1234567로 만들어줘야해요




바로 이 부분이 if 비교하는 부분입니다.


ebp-12와 비교하네요.


i의 위치를 알았습니다. i는 ebp-12입니다.


그림을 한번 그려볼까요?


죄송합니다.. 잘 못그려서


아무튼 메모리구조는 이렇게 이루어집니다


공격시나리오를 구상해보겠습니다.


A를 1036개 넣고 i구간에서 \x67\x45\x23\x01을 넣고 다시 A를 12(sfp까지) 한뒤 RTL하도록 하겠습니다.

RTL은 RET 다음 4바이트가 또 RET인데 저는 안쓸거라 A 4개 넣겠습니다. 그리고 다음 4바이트에 인자 값인 /bin/sh의 주소를 넣겠습니다.


페이로드입니다.


./attackme `python -c 'print "A"*1036 + "\x67\x45\x23\x01" + "A"*12 + "\xc0\xf2\x03\x42"+"a"*4+"\xa4\x7e\x12\x42"'`


tmp파일에 공격해보겠습니다.


기분이 좋습니다.


실제 파일에 공격하겠습니다.



권한을 획득했습니다.



Level14 Password is "what that nigga want?".

'pwnable > FTZ' 카테고리의 다른 글

[Hackerschool FTZ] Level15 write-up  (0) 2018.01.15
[Hackerschool FTZ] Level14 write-up  (0) 2018.01.15
[Hackerschool FTZ] Level12 write-up  (0) 2018.01.15
[Hackerschool FTZ] Level11 write-up  (0) 2018.01.15
[Hackerschool FTZ] Level10 write-up  (0) 2018.01.14
Comments