촉촉한초코칩
[Dreamhack] whatsdifferent 본문
코드
// Name: chall.c
// Compile Option: gcc chall.c -o chall -fno-stack-protector
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#define FLAG_SIZE 0x45
void alarm_handler() {
puts("TIME OUT");
exit(-1);
}
void initialize() {
setvbuf(stdin, NULL, _IONBF, 0);
setvbuf(stdout, NULL, _IONBF, 0);
signal(SIGALRM, alarm_handler);
alarm(30);
}
int main(int argc, char *argv[]) {
char cmd[50];
char input[21];
char filter[] = {'&', ';', '|', '$', '`', '*','[', ']', '{', '}', '\\', '^', '~', '?', '#', '!'};
initialize();
system("ls -al");
printf("Input Command: \n");
scanf("%20[^\n]", input);
// filtering
for (int i = 0; i < strlen(input); i++){
for (int j = 0; j < sizeof(filter); j++){
if(input[i] == filter[j]){
printf("filtered.\n");
exit(0);
}
}
}
snprintf(cmd, 49, "(%s) > /dev/null", input);
system(cmd);
system("cat ./out");
printf("Terminated\n");
return 0;
}
필터링 값이 들어가지 않은 input을 받는데, input > /dev/null을 실행해서 그 결과를 출력한다..?
> /dev/null은 로그파일을 지우거나 출력 내용을 지우는데 사용된다고 한다.
그러면 input으로 입력된 게 저장되는 곳이 없는데..
공격
문제 서버로 들어간다.
nc host3.dreamhack.games 22727
명령어는 한번만 입력 가능한 것 같다.
우선 fs 파일을 복사해서 fs_1 파일을 만들어보았다.
cp fs fs_1
두 파일의 차이점을 알아본다. → diff, cmp 다 써봤는데 안 됨
fs_1 파일을 만들고 fs_1을 읽는 명령어를 써보려고 함 → 안됨
cp fs fs_1
cat fs_1
https://yenas0.tistory.com/122
마지막에 out파일을 출력하기 때문에 파일 두개를 비교하고 그 값을 out으로 보낸다.
전에 그렇게 했었는데..ㅎ 코드 보고 다시 생각하기......
'Study > MISC' 카테고리의 다른 글
[Dreamhack] Just read flag (0) | 2024.11.13 |
---|---|
[Dreamhack] 산타 할아버지도 힘들어요 (0) | 2024.10.29 |
[Dreamhack] file-special-bit (0) | 2024.09.29 |
[Dreamhack] Robot Only (1) | 2024.09.17 |
[Dreamhack] Snowing! (0) | 2024.09.17 |