LOB zombie_assassin Write-Up

2019. 8. 1. 10:37
728x90
728x90
728x90

LOB zombie_assassin 풀어보자.

 

[사진 1]
[사진 2]

주어진 코드를 보면 함수가 많다. hint를 참고하면 함수를 계속 호출하라고 한다. ret로 함수를 호출하면 ret+4 지점이 호출된 함수의 ret 값이 된다. 즉, 연달아서 함수 주소를 입력하면 함수가 종료되고 새로운 함수가 실행될 것이다.

마지막으로 실행되는 MO 함수에 인자를 전달하면 system 함수의 인자로 사용되므로 문자열 "/bin/sh" 값을 마지막에 넣어주면 된다.

 

 

[사진 3]
[사진 4]

먼저 main 함수의 어셈블리어 코드를 보면 strcpy 함수를 호출하기 전에 ebp-0x28 주소를 eax 레지스터에 저장한다. 즉, 이 곳이 buffer 변수의 시작점이다.

 

 

[사진 5]

따라서 스택은 위와 같이 형성될 것이고, buffer 변수부터 40bytes 값을 입력하면 ebp까지 변조할 수 있다.

 

 

[사진 6[

그리고 위와 같이 스택 값을 조작하면 함수가 연속적으로 실행될 것이다.

 

 

[사진 7]

각 함수의 주소는 nm 명령어로 확인할 수 있다.

 

 

[사진 8]

위와 같이 연속적으로 함수의 주소를 입력하면 MO 함수까지 실행되는 것을 확인할 수 있다.

 

 

[사진 9]

다음으로 MO 함수에 문자열 "/bin/sh" 값을 전달하면 되는데, 마찬가지로 MO 함수가 호출되고 +4bytes 지점은 MO 함수의 ret가 된다. 그리고 +8bytes 지점은 문자열 "/bin/sh" 값의 주소를 저장하면 되는데 buffer 변수, 환경변수, 공유 라이브러리를 사용할 수 없기 때문에 argv[1] 인자에 직접 입력해야 한다.

 

 

[사진 10]

세그멘테이션 오류가 발생하기 때문에 gdb로 정확한 주소를 확인해야 한다. 위와 같이 다른 이름(kuccubus)으로 복사해주고 생성된 core 파일을 확인하면 문자열 "/bin/sh" 값의 실제 주소는 0xbffffab8임을 확인할 수 있다.

 

[사진 11]

위와 같이 문자열 "/bin/sh" 값의 주소를 정확하게 수정해주면 succubus 계정의 password를 확인할 수 있다.

728x90
728x90

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

LOB nightmare Write-Up  (0) 2019.08.01
LOB succubus Write-Up  (0) 2019.08.01
LOB assassin Write-Up  (0) 2019.08.01
LOB giant Write-Up  (0) 2019.08.01
LOB bugbear Write-Up  (0) 2019.08.01

+ Recent posts