-
[LOB] Succubus -> Nightmare Write-up표튜터와 함께하는 Pwnable/The Lord Of the BOF Write-up 2019. 3. 19. 19:53
혹시나 이상하거나 잘못된 것이 있다면 댓글 부탁드립니다.
이번문제는 Succubus에서 Nightmare로 갈 수 있는 문제이다~
생각보다 쉬운문제였다. 우선 코드를 보자
코드를 보면 PLT를 이용하라는 듯한 힌트를 주고있다.
또한 strcpy의 주소값을 ret에 덮지않으면 조건이 성립되지않아서 다음 코드로
진행할 수 없다는 것을 알 수 있다. 그러므로 우리가 구해야할 것은 일단
strcpy의 주소를 알아야한다는 것을 알 수 있다.
또한 우리는 결과적으로 쉘을 따야하기 때문에 system함수와 그 인자로 "/bin/sh"을 사용할 것이다.
이 3가지를 어떻게 사용할 수 있을까를 고민해보고 다음과 같은 Payload를 생각해냈다.
Payload = system주소 + dummy(4) + "/bin/sh"주소 + dummy(32) + strcpy주소 + dummy(4) + (ret+4)의 주소 + buffer 주소
위와 같은 Payload가 진행되면 ret로 strcpy와 실행되면서 인자로 ret+4의 주소, buffer주소를
넘겨주게된다. 그렇게되면 strcpy(&ret+4, &buffer)가 되므로
ret+4에 system("/bin/sh")이 넘어가게되고 strcpy가 끝난 뒤
system함수가 실행되면서 쉘이 따질 것이다!!
이제 필요한 것들을 구해보도록 하자~
System함수주소와 "/bin/sh"의 주소를 구하는 법은 지겹도록 해봤으니 생략하도록 하겠다.
Sytem함수의 주소 : 0x40058AE0
"/bin/sh"의 주소 : 0x400FBFF9
이번에는 strcpy의 주소를 구해보도록 하겠다.
지금까지 구한 것들을 토대로 Payload를 구성해보았다.
ret+4의 주소와 buffer의 주소는 일시적으로 0xffffffff으로 진행하였고
당연히 Segmentation fault가 일어났다. 그래서 dump된 core파일을 확인해보았다.
메모리를 보니 우리가 넣어준 system함수의 주소가 보인다.
그러므로 buffer의 시작주소는 0xbffffa80이라는 것을 알 수 있었다.
또한 nightmare.c의 코드를 봤을 때 마지막에 있던 memset에 의해
"AAAA"가 ret+4에 들어가 있다는것을 알고 있으므로
0xbffffab0가 ret + 4의 주소라는 것도 알 수 있었다.
그러므로 Payload에 0xffffffff으로 채워넣었던 부분을 위에서 구한 주소들로 바꾸어 진행했다.
쉘이 따졌다~~
원본에서도 진행하였고 역시 쉘이 따졌다~~
다음 단계로~
반응형'표튜터와 함께하는 Pwnable > The Lord Of the BOF Write-up' 카테고리의 다른 글
[LOB] Xavius -> Death_knight Write-up (0) 2019.03.24 [LOB] Nightmare -> Xavius Write-up (0) 2019.03.19 [LOB] Zombie_Assassin -> Succbus Write-up (0) 2019.03.14 [LOB] Assassin -> Zombie_Assassin Write-up (0) 2019.03.05 [LOB] Giant -> Assassin Write-up (0) 2019.03.04 댓글