-
[L.O.B] Level 14 - bugbearWargame/L.O.B 2022. 11. 5. 07:26반응형
Level 14 - bugbear를 풀어보자.
소스 코드를 보면 다음 Level은 giant이고, RTL2라는 힌트가 있다.
앞의 Level과 마찬가지로 RTL 공격 기법을 이용해 문제를 풀 수 있는 것 같다.
소스 코드는 복잡해 보이지만, 의미들이 주석으로 설명이 되어 있다.
변수들을 선언하고, 프로그램 실행 시 입력할 인자 갯수에 대한 조건이 걸려 있다.
다음으로 execve 함수의 주소를 알아내는 명령어가 있다.
중요한 것은 libc 주소 + 함수 offset으로 라이브러리에 있는 함수의 주소를 알 수 있다는 것이다!!
그 다음, ret에 execve 함수의 주소를 넣어주어야 정상적으로 동작한다는 것을 나타낸다.
마지막으로 argv[1]을 buffer에 복사해 넣고, buffer를 출력하면서 프로그램이 종료된다.
<giant 소스 코드의 내용>
gdb를 이용해 dummy가 있는지만 간단하게 알아보도록 하자.
<main+3>을 보면 esp-60 이므로, dummy 값은 없다는 것을 알 수 있다.
<giant 파일 gdb 분석을 통한 dummy 값 확인>
문제를 풀기에 앞서, 이번에 필요한 정보는 총 5가지이다.
execve 함수의 주소, system 함수의 주소, exit 함수의 주소, /bin/sh의 주소, null의 주소가 필요하다.
페이로드를 어떻게 작성할 지 미리 설명을 해보도록 하자.
페이로드는 NOP*(buffer+sfp의 크기) + execve + system + exit + /bin/sh + null로 구성이 될 것이다.
이것은 execve 함수의 인자로 exit, /bin/sh, null이 들어간다.
execve는 exit가 실행되어 종료되고, system 함수에 /bin/sh가 들어가면서 쉘이 실행된다.
이제 필요한 정보를 알아보도록 하자.
gdb를 실행한 후, main 함수에 break를 걸고 동작시킨다.
print로 execve, system, exit 함수의 주소들을 출력한다.
(소스 코드의 내용을 경로를 바꿔준 후 실행해 execve 함수의 주소를 알아내도 되지만, 이게 편하다.)
<함수들의 주소 출력>
NULL의 주소는 함수가 동작하면서 입력되는 문자열을 보면서 스택 하단부의 빈 곳을 찾으면 된다.
(x 명령어의 s를 사용하면 된다. -> x/1000s $esp 등)
<NULL의 주소>
마지막으로, /bin/sh의 주소를 알기 위해 소스 코드를 작성하고, 컴파일하여 실행한다.
앞의 Level에서 했던 것이므로 설명은 생략하도록 하자.

</bin/sh의 주소>
필요한 정보들은 모두 알아냈다.
gdb에서 dummy는 없으므로 처음 NOP는 44 바이트만큼 넣어주도록 하자.
그 후 페이로드를 실행시키면 되는데..
사실 실행이 되지 않는다.
execve의 경로 상의 문제가 있다고 한다.
\x0a가 \n을 의미해, 공백을 나타내면서 \x00처럼 페이로드가 종료가 된다고 한다. (구글링)
해결 방법으로는 python 명령 전체를 큰 따옴표로 묶어 주는 것이다.
이렇게 하면, \n을 인자의 일부로 포함시켜 정상적으로 작동이 된다.
그렇게 페이로드를 작성하고 실행하면 giant의 권한으로 쉘이 실행된다.
my-pass를 입력하면 비밀번호가 나타난다.
<나타난 비밀번호>
[간략 풀이]
더보기이 문제의 페이로드는 사실 많이 생략할 수 있다.
우선 execve 함수의 마지막 인자인 NULL은 필요없다.
그리고 exit도 필요없다.
execve를 입력하고, system을 입력한 후 4 바이트를 NOP로 채우고 /bin/sh를 넣어도 페이로드는 작동한다.
이유는 앞의 Level에서 했던 함수의 호출과 인자에 대해 생각을 해보면 쉽게 알 수 있다.
반응형'Wargame > L.O.B' 카테고리의 다른 글
[L.O.B] Level 16 - assassin (0) 2022.11.06 [L.O.B] Level 15 - giant (0) 2022.11.06 [L.O.B] Level 13 - darkknight (0) 2022.11.04 [L.O.B] Level 12 - golem (1) 2022.11.02 [L.O.B] Level 11 - skeleton (2) 2022.11.01