본문 바로가기

Wargame/Exploit Exercises Nebula

Exploit Exercises Nebula Level02

https://exploit-exercises.com/nebula/level02/


level02 문제이다. 해당 링크에서 문제를 확인해보자.



임의의 코드를 실행할 수 있는 프로그램이 존재한다고 한다. 찾을 수 있나?

ID : level02 P/W : level02 로 접속하여 flag02로 권한을 상승시켜야한다.

실행 파일은 /home/flag02/flag02 에 존재한다.

라는 문구와 함께 소스코드가 제공되었다.


level2.c

#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <stdio.h>

int main(int argc, char **argv, char **envp)
{
  char *buffer;

  gid_t gid;
  uid_t uid;

  gid = getegid();
  uid = geteuid();

  setresgid(gid, gid, gid);
  setresuid(uid, uid, uid);

  buffer = NULL;

  asprintf(&buffer, "/bin/echo %s is cool", getenv("USER"));
  printf("about to call system(\"%s\")\n", buffer);
  
  system(buffer);
}


문제 소스코드는 위와 같다.


※ uid와 gid를 flag02로 권한을 상승시킨 다음 asprintf 함수를 통해서 

   buffer 변수에 "/bin/echo %s is cool" 이라는 문장을 쓰고

   %s 에는 USER라는 환경 변수의 값을 사용한다.


※ 마지막에는 system 함수를 통해서 문자열을 실행시킨다.


※ 이 문제를 해결할 방법은 USER 라는 환경 변수에 사용하고 싶은 명령어를 전달해서

   해결할 수 있다.


※ 소스코드에 나와있는 echo 명령어를 종료시킨 후 다음 명령어를 실행시키면 된다.


※ echo 명령어를 종료시키기 위해 세미 콜론(;) 을 사용하여 하나의 명령어 라인에서

   여러개의 명령을 실행하면 된다.


먼저 env 명령어를 통해 USER 환경 변수에 어떤 값이 들어가있는지 확인해보자.



USER 환경 변수에는 level02라는 값이 들어가있다.



파일을 실행하니 USER 환경 변수 값인 level02를 참조하여 소스코드 내용대로 실행이 되었다.


export 명령어를 통해서 USER 환경 변수의 값을 바꿔주자.



값을 "MalHyuk;/bin/sh;"로 변경 후에 실행을 하면

id가 flag02로 바뀐 것을 확인할 수 있다.

'Wargame > Exploit Exercises Nebula' 카테고리의 다른 글

Exploit Exercises Nebula Level04  (0) 2017.04.03
Exploit Exercises Nebula Level03  (0) 2017.04.01
Exploit Exercises Nebula Level01  (0) 2017.02.08
Exploit Exercises Nebula Level00  (0) 2016.12.29