level 19

2020. 9. 2. 21:38

gets로 입력을 받은 뒤 출력만 하는 소스코드네요.

아무래도 다른게 없고 이용할만한거라면 RET밖에 안떠오르죠?

자, 그럼 RET 부분에 쉘코드가 담겨있는 환경변수 주소를 담아보겠습니다.

 

먼저 쉘코드를 만들어야하는데요, attackme 파일은 누구의 소유일까요?

 

level20의 소유네요.

그러면 당연히 소스코드 상에는 level20으로 권한을 상승하는 부분이 없으니 쉘을 얻기 전에 권한 상승부터 해야겠죠?

setreuid() 함수를 쓸겁니다.

 

level20의 uid는 3100이네요.

이를 바탕으로 쉘코드를 만들어보겠습니다.

 

일단, 어셈블리어를 만듭니다.

setreuid(3100, 3100), execve("/bin//sh")가 포함되어있습니다.

 

이후 objdump를 이용해 기계어를 추출해냅시다.

※ 기계어에 NULL바이트(00)이 포함되어있으면 안됩니다.

 

FTZ 초반부터 요긴하게 썼고 직접 만든 간단한 파이썬 코드로 기계어를 추출해냅니다.

 

성공적으로 추출했습니다.

이제 환경변수에 저장하겠습니다.

 

당연히 이제 환경변수의 주소를 알아보아야겠죠?

 

0xbffffea5가 권한 상승과 쉘코드가 담긴 egg 환경변수의 주소라네요.

 

이제 gdb를 통해 RET까지의 거리를 계산해봅시다.

 

buf(20) + bufdummy(20) + SFP(4) + RET(4)

답이 나온것 같네요.

 

성공!

'[▒] 보안 > FTZ' 카테고리의 다른 글

level 20  (0) 2020.09.02
level 18  (0) 2020.09.01
level 17  (0) 2020.09.01
level 16  (0) 2020.09.01
level 15  (0) 2020.09.01

BELATED ARTICLES

more