////
Search
🚩

Complaint

문제
nc 로 접속하여 푸는 문제이다. /dev/null 로 리다이렉션 된다는 내용도 있다.
문제 파악 과정
접속 시, WHAT IS BOTHERING YOU??? 라는 문구가 출력된다. 대충 뭐가 당신을 귀찮게 하느냐 라는 뜻인거 같다.
우선 앞서 문제 설명에서 /dev/null 로 리다이렉션된다고 하였다. /dev/null 는 리눅스에서 명령어의 결과를 출력하고 싶지 않을 때 사용한다.
따라서 이 문제는 "명령어를 사용하는 문제지만, 명령어의 출력 결과를 확인할 수 없다" 라고 생각하면 될 것 같다.
ls -al 명령어를 입력하였지만, YOUR COMPLAINT HAS BEEN RECORDED 라는 문구만 출력되었고, 이 문구도 해석하면 "불만사항이 접수되었습니다." 라는 뜻이다.
문구는 특별하게 의미는 없지만, 실제로 /dev/null 사용하는 것 같아 명령어의 결과를 확인할 수 없었다.
풀이
/dev/null 은 아래와 같이 사용되기 때문에, ; 를 사용하여 /dev/null 로 전송하는 부분이 동작하지 않도록 해야 한다.
# /dev/null 예시 -> 결과가 출력되지 않음 ls -al > /dev/null # ; 를 이용하여 > /dev/null 부분이 동작하지 않도록 설정 ls -al; > /dev/null
Bash
ls -al; 명령어를 입력한 결과, 명령어의 결과가 아닌 ls -al 이라는 문자가 그대로 출력되었다.
즉, nc로 명령어가 전송되었을 때 아래와 같은 명령어가 동작하는 것을 확인할 수 있다.
그렇다면 명령어의 결과echo 를 이용하여 출력하도록 입력 값을 설정하면 될 것 같다.
echo [입력 값] > /dev/null
Bash
echo 에서 명령어 결과를 출력하기 위해서는 $(command) 형태의 변수를 이용하면 된다.
# ls의 명령어의 결과가 echo로 출력 됨 echo $(ls)
Bash
$(ls -al); 로 입력하면, /dev/null 리다이렉션을 무시하고 결과 값을 확인할 수 있다.
하지만 echo 명령어로 단순히 출력만 해서 그런지 지저분하게 출력되었다.
ls 명령어의 결과를 확인하니 flag.txt 라는 파일을 확인할 수 있었다.
이후 cat 명령어로 확인을 시도했으나, cat 명령어가 존재하지 않는다고 출력되었다.
cat 명령어처럼 필터링 되는 명령어가 존재하기 때문에, 우선 어떤 명령어를 사용할 수 있는지 확인하는게 중요할 것 같았다. ls /bin/ 명령어를 사용하여 확인하였다.
bash bunzip2 bzcat bzcmp bzdiff bzegrep bzexe bzfgrep bzgrep bzip2 bzip2recover bzless bzmore chgrp chmod chown cp dash date dd df dir dmesg dnsdomainname domainname echo egrep false fgrep findmnt gunzip gzexe gzip hostname ln login ls lsblk mkdir mknod mktemp mount mountpoint mv nano nisdomainname pidof pwd rbash readlink rm rmdir rnano run-parts sh sleep stty su sync tar tempfile touch true umount uname uncompress vdir wdctl which ypdomainname zcat zcmp zdiff zegrep zfgrep zforce zgrep zless zmore znew
Plain Text
여러 방법이 있겠지만, 개인적으로 먼저 눈에 들어온것은 echobzdiff 였다.
echo 명령어를 사용하는법은 찾아보았지만, cat 명령어가 필요한것 같아 진행하지 못하였다.
그래서 bzdiff 명령어를 이용하여 풀이를 진행하였다.
bzdiff 명령어는 두 파일의 다른 부분을 비교할 때 사용하는 명령어이다.
bzdiff file1 file2
Bash
따라서 아래와 같은 순서로 명령어가 진행되도록 만들었다.
1.
flag.txt 가 존재하는 / 위치는 일반 권한으로 파일 작성이 되지 않기 때문에 파일 작성 권한이 있는 /tmp 로 이동
2.
빈 파일 생성
3.
flag.txt 와 생성한 빈 파일 비교
PAYLOAD
$(cd /tmp;touch ./test.txt;bzdiff /flag.txt /tmp/test.txt);
Plain Text
PAYLOAD 전송 시, 아래와 같은 명령어가 실행되며 Flag가 출력된다.
echo $(cd /tmp;touch ./test.txt;bzdiff /flag.txt /tmp/test.txt); > /dev/null
Bash
Flag
번외