문제에서 주어지는 소스코드이다.. 우선 이문제 제작자의 엄청난 실수가 들어있다.
중요한 소스코드를 내용은 아래와같다
1. argv[1] = 읽을파일, argv[2] = 소켓을연결할주소 --> 기본적으로 18211 포트로 연결한다.
2. 소켓이 연결되면 argv[1] 에 입력한 파일을 읽으면서 접속한 주소로 보내고, 그 결과를 저장한다.
#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);
}
}
또한, level10 계정으로 들어와보면 x 파일이 한개있는데 이놈을 보면 UUID 같이생긴 문제열이 한개나온다.
(몰랐지.. 이떄까진...이것이 제작자의 실수로인한... 정답노출인것을....)
또한 flag10 계정으로 들어가보면 소스코드가 컴파일된 setuid 파일고 token 파일이 있다. 이 token 값은 읽을 수 있는 권한이 없다.
소스코드상에서는 기본적으로 18211 포트로 연결하기때문에 level10 계정의 쉘을 한개 더 열고 nc 로 리스닝해보았다.
그리고 다른 쉘에서 테스트파일을 만들고 flag 바이너리를 실행해보면 정상적으로 테스트파일이 읽혀서 전송되게되고
nc 로 리슨하고있는 쉘에 붙었다. 근데 이게 진짜 소스코드이 전부이다.
고민좀하다가 생각이안나서, level10 에 접속했을떄 존재했던 x 파일의 값이 정답이 아닐까 생각이들어 flag10 로 접속하고 passwd 로 입력했더니 정답이랜다..
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
'SystemHacking > Nebula' 카테고리의 다른 글
level13 (2) | 2023.02.05 |
---|---|
level12 (1) | 2023.02.05 |
level09 (0) | 2023.01.30 |
[Nebula] Level08 (0) | 2022.02.06 |
[Nebula] Level07 (0) | 2022.02.05 |