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
'Wargame > Leviathan' 카테고리의 다른 글
[ Docker ] Leviathan Wargame 만들기 - 4번 문제 ( 6 / 8 ) (0) | 2024.09.10 |
---|---|
[ Docker ] Leviathan Wargame 만들기 - 3번 문제 ( 5 / 8 ) (0) | 2024.09.10 |
[ Docker ] Leviathan Wargame 만들기 - 2번 문제 ( 4 / 8 ) (0) | 2024.09.10 |
[ Docker ] Leviathan Wargame 만들기 - 0번 문제 ( 2 / 8 ) (1) | 2024.09.10 |
[ Docker ] Leviathan Wargame 만들기 ( 1 / 8 ) (1) | 2024.09.10 |