본문 바로가기

Wargame/Leviathan

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

1. Leviathan4 목표

There is no information for this level, intentionally.

 

2. Leviathan4 구현

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

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

chmod 755 /home/leviathan4

# leviathan5 유저를 생성하여 준다.
useradd leviathan5 && echo -e "0dyxT7F4QD\n0dyxT7F4QD" | passwd leviathan5

mkdir -p /home/leviathan4/.trash

cat <<'EOF' > /tmp/bin.c
#include <stdio.h>
#include <stdlib.h>

int main() 
{
    FILE *file;
    char *filepath = "/etc/leviathan_pass/leviathan5";

    file = fopen(filepath, "r");

    if(file == NULL) 
    {
        return 255;
    }

    int c;

    while ((c = fgetc(file)) != EOF) 
    {
        for (int i = 7; i >= 0; i--) 
        {
            printf("%d", (c >> i) & 1);
        }
        printf(" ");
    }

    printf("\n");
    fclose(file);
    return 0;
}
EOF

gcc -o /home/leviathan4/.trash/bin /tmp/bin.c

chown root:leviathan4 /home/leviathan4/.trash

chmod 550 /home/leviathan4/.trash

chown leviathan5:leviathan4 /home/leviathan4/.trash/bin

chmod 4550 /home/leviathan4/.trash/bin

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

chown leviathan5:leviathan5 /etc/leviathan_pass/leviathan5

chmod 400 /etc/leviathan_pass/leviathan5

exit

 

3. Leviathan4 문제풀의

# 비밀번호 : WG1egElCvO
ssh leviathan4@localhost -p 2223

# 호출 라이브러리 확인
ltrace /home/leviathan4/.trash/bin

# 다음 문제 비밀번호를 확인
# perl -n : 표준출력의 각 줄에 반복적으로 실행
# perl -e : 스크립트에 저장하지 않고도 명령어에서 perl 명령어를 실행
# $_ : perl -n 옵션을 사용할떄 입력줄이 자동으로 $_에 저장됨
# B* : 저장된 이진 문자열을 아스키 코드로 변환함
# 0dyxT7F4QD
/home/leviathan4/.trash/bin | tr ' ' '\n' | perl -ne 'print pack("B*", $_)' | tr -d '\n' | sed '$s/$/\n/'