LOB darkknight Write-Up
LOB darkknight 풀어보자.

이전 문제들과는 달리 첫 번째 인자의 48번째 값이 "\xbf"이면 프로그램을 종료시킨다. 아래에서 확인하겠지만 첫 번째 인자의 48번재 값은 ret 주소이다. 즉, ret를 변조할 값으로 0xbf로 시작하는 값을 쓸 수 없다는 것이다.

위와 같이 0xbf로 시작하면 프로그램이 종료된다. 이 경우에 RTL 기법을 이용해야 하는데 system 함수를 이용할 것이다. 다음 링크를 참고하면 된다.
참고 링크: https://jade9reen.tistory.com/73
RTL / Return To Library
시스템 해킹에서 shellcode는 스택에 적재되어 실행되는데, 스택에서 shellcode를 실행할 수 없는 경우 RTL 기법을 사용할 수 있다. RTL 기법은 공유 라이브러리 내의 함수를 이용하는 것인데, 공유 라이브러리는..
jade9reen.tistory.com

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

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

위와 같이 ret를 공유 라이브러리 내의 함수인 system 함수 주소로 변조하고 그에 필요한 인자인 "/bin/sh" 문자열의 주소를 입력해주면 된다. system 함수와 "/bin/sh" 문자열 주소를 찾는 것은 다음 링크를 참고하면 된다.
참고 링크: https://jade9reen.tistory.com/72
리눅스 환경에서 공유 라이브러리 내의 함수 주소와 필요한 인자 주소 알아내기
bof 문제를 풀다보면 RTL을 사용하기 위해 공유 라이브러리 내의 함수를 이용할 때가 있다. 여기선 system 함수와 필요한 인자인 "/bin/sh" 문자열을 예로 든다. 먼저 system 함수의 주소를 알아내는 방법은 두..
jade9reen.tistory.com

위와 같이 임의의 값 "\x90"* 44bytes로 ebp까지 변조하고, system 함수의 주소로 ret를 변조한다. 그리고 dummy 4bytes(system 함수의 ret)를 입력하고 "/bin/sh" 문자열의 주소를 입력하면 다음 계정인 bugbeard의 password를 확인할 수 있다.
'Wargame > LOB' 카테고리의 다른 글
| LOB giant Write-Up (0) | 2019.08.01 |
|---|---|
| LOB bugbear Write-Up (0) | 2019.08.01 |
| LOB golem Write-Up (0) | 2019.08.01 |
| LOB skeleton Write-Up (0) | 2019.08.01 |
| LOB vampire Write-Up (0) | 2019.07.31 |