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

이전 문제와 다른 점은 마지막에 buffer 변수를 0으로 초기화 한다. 하지만 이전 문제와 동일하게 풀면 이미 ret가 shellcode의 주소로 변조되기 때문에 이전 문제와 동일하게 풀면 된다.

위와 같이 전달 인자의 48번째 값을 "\xbf"로 주면 바로 종료되지는 않는다.


wolfman 파일을 다른 이름(kolfman)으로 복사하고 main 함수의 어셈블리어 코드를 보면 main+135 ~ main+146 구간이 argv[1][47]이 "\xbf"인지를 확인하는 곳이다. 그리고 main+189의 strcpy 함수를 호출하기 전에 ebp-0x28 주소를 eax 레지스터에 저장하고 있다. 즉, 이 곳이 buffer 변수의 시작점이다.

따라서 스택은 위와 같이 형성될 것이고 argv 인자를 통해 44bytes를 입력하면 ebp까지 변조할 수 있다.

gdb를 통해 [사진 3]에서 확인했던 main+146에 브레이크 포인트를 설정하고 인자로 임의의 값 "\x90" 47bytes와 "\xbf", shellcode 용도의 50bytes를 입력하였다. 그리고 edx 레지스터를 확인하면 0xbffffc59에 "\xbf" 값이 들어가고 이후엔 shellcode 용도로 입력한 "\x90" 값이 들어가 있다.
그리고 그 주소는 0xbffffc5a이다.

따라서 위와 같이 임의의 값 "\x90" 44bytes로 ebp까지 변조하고 ret는 [사진 6]에서 확인한 shellcode 주소인 0xbffffc5a + @로 변조하자. 그리고 shellcode를 추가로 입력해주면 변조된 ret는 shellcode를 실행할 것이다.
그러면 wolfman 계정의 password를 확인할 수 있다.
'Wargame > LOB' 카테고리의 다른 글
| LOB darkelf Write-UP (0) | 2019.07.30 |
|---|---|
| LOB wolfman Write-Up (0) | 2019.07.30 |
| LOB goblin Write-Up (0) | 2019.07.30 |
| LOB cobolt Write-Up (0) | 2019.07.30 |
| LOB gremlin Write-Up (0) | 2019.07.30 |