본문 바로가기

Wargame/Leviathan

[ Docker ] Leviathan Wargame 만들기 - 1번 문제 ( 3 / 8 )

1. Leviathan1 목표

There is no information for this level, intentionally.


2. Leviathan1 구현

# 비밀번호 root 입력 접속
ssh -oStrictHostKeyChecking=no root@localhost -p 2223

chown -R root:root /home/leviathan1/.[!.]*

chmod 755 /home/leviathan1

# leviathan2 유저를 생성하여 준다.
useradd leviathan2 && echo -e "NsN1HwFoyN\nNsN1HwFoyN" | passwd leviathan2

cat <<'EOF' > /tmp/check.c
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>

#define MAX_LENGTH 3

int main() 
{
    char input[MAX_LENGTH + 1];
    char ch;
    int i = 0;

    input[0] = '\n';
    input[1] = '\377';
    input[2] = '\377';
    input[3] = '\0';

    printf("password: ");

    while ((ch = getchar()) != '\n' && ch != EOF) 
    {
        if (i < MAX_LENGTH)
        {
            input[i++] = ch;
        }
    }

    if (strcmp(input, "sex") == 0) 
    {
        if (setreuid(geteuid(), geteuid()) == -1) 
        {
            perror("setreuid failed");
            return 1;
        }
   
        system("/bin/sh");
    } 
    else 
    {
        printf("Wrong password, Good Bye ...\n");
    }

    return 0;
}
EOF

gcc -o /home/leviathan1/check /tmp/check.c

chown leviathan2:leviathan1 /home/leviathan1/check

chmod 4550 /home/leviathan1/check

# 다음 패스워드가 담긴 파일을 생성한다.
echo 'NsN1HwFoyN' > /etc/leviathan_pass/leviathan2

chown leviathan2:leviathan2 /etc/leviathan_pass/leviathan2

chmod 400 /etc/leviathan_pass/leviathan2

exit

 

 

3. Leviathan1 문제풀의

# 비밀번호 : 3QJ3TgzHDq
ssh leviathan1@localhost -p 2223

# 문제 파일 비밀번호 확인
echo | ltrace /home/leviathan1/check 2>&1 | grep strcmp | awk -F "\"" '{print $4}'

# 문제 파일 비밀번호 입력 [ sex ]
/home/leviathan1/check

# 다음 문제 비밀번호를 확인
# NsN1HwFoyN
cat /etc/leviathan_pass/leviathan2