목차
개요
TryHackMe에서 연습문제를 보다가 Python 로고가 눈에 띄어 도전하게되었다. 호기롭게 풀다가 결국엔 다른 Writeup을 보게되었다. 중간에 잘못된 방향에 허우적대느라 문제 풀이 사고가 엉켜버려 당황한 문제이기도 하다. 중간에 새롭게 알게된 키워드도 있으니 잘 기록해두려한다.
Scanning
TryHackMe를 통해서 문제를 풀이할 때는 Nmap부터 시작하는 건 이제 나름대로의 규칙이 되버린 것 같다. 다음은 Nmap으로 포트 스캔을 한 결과이다.
╰─$ sudo nmap -sC -sV 10.10.189.199
Password:
Starting Nmap 7.94 ( https://nmap.org ) at 2023-09-28 00:28 KST
Nmap scan report for 10.10.189.199
Host is up (0.30s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 78:c4:40:84:f4:42:13:8e:79:f8:6b:e4:6d:bf:d4:46 (RSA)
| 256 25:9d:f3:29:a2:62:4b:24:f2:83:36:cf:a7:75:bb:66 (ECDSA)
|_ 256 e7:a0:07:b0:b9:cb:74:e9:d6:16:7d:7a:67:fe:c1:1d (ED25519)
10000/tcp open snet-sensor-mgmt?
| fingerprint-strings:
| GenericLines:
| Private 0days
| Please enther number of exploits to send??: Traceback (most recent call last):
| File "./exploit.py", line 6, in <module>
| num_exploits = int(input(' Please enther number of exploits to send??: '))
| File "<string>", line 0
| SyntaxError: unexpected EOF while parsing
| GetRequest:
| Private 0days
| Please enther number of exploits to send??: Traceback (most recent call last):
| File "./exploit.py", line 6, in <module>
| num_exploits = int(input(' Please enther number of exploits to send??: '))
| File "<string>", line 1, in <module>
| NameError: name 'GET' is not defined
| HTTPOptions, RTSPRequest:
| Private 0days
| Please enther number of exploits to send??: Traceback (most recent call last):
| File "./exploit.py", line 6, in <module>
| num_exploits = int(input(' Please enther number of exploits to send??: '))
| File "<string>", line 1, in <module>
| NameError: name 'OPTIONS' is not defined
| NULL:
| Private 0days
|_ Please enther number of exploits to send??:
...
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 145.11 seconds
22 ssh, 10000 snet-sensor-mgmt 외에는 다른 포트는 보이지 않는다 10000은 처음 보는 포트인데 기존에 Http를 통해서 접근하던 문제들과는 다른 방식을 취해야한다.
Ganing Access
10000 포트는 http를 이용할 수 없으니 nc를 이용해 연결요청을 시도해보자.
$ nc TARGET_IP 10000
다음과 같은 CLI가 표출된다.
╰─$ nc 10.10.189.199 10000
Private 0days
Please enther number of exploits to send??: 999999
Exploit started, attacking target (tryhackme.com)...
Exploiting tryhackme internal network: beacons_seq=1 ttl=1337 time=0.035 ms
Exploiting tryhackme internal network: beacons_seq=2 ttl=1337 time=0.020 ms
Exploiting tryhackme internal network: beacons_seq=3 ttl=1337 time=0.043 ms
Exploiting tryhackme internal network: beacons_seq=4 ttl=1337 time=0.011 ms
Exploiting tryhackme internal network: beacons_seq=5 ttl=1337 time=0.059 ms
숫자를 입력하니 그만큼 Ping을 날리는 것처럼 보인다. Command Injection이 가능할것이라 특정할 수는 없으나 공격 페이로드를 사용해 system command 를 실행시킬 수 있는지 테스트해보자.
공격 페이로드를 통해 "ls"명령을 실행하자 파일 목록이 표출된다. 해당 목록에는 user.txt가 있었으니 이를 읽으면 user.txt 플래그를 얻을 수 있다.
더 나아가서 로컬에서 포트를 하나 열어놓고 reverse shell 페이로드를 삽입하면 reverse shell을 획득할 수 있다.
Privilige Escalate
Stabilized Shell
python으로 shell을 얻어오자.
╰─$ nc -l 4242 130 ↵
id
uid=1000(king) gid=1000(king) groups=1000(king),4(adm),24(cdrom),30(dip),46(plugdev),114(lpadmin),115(sambashare)
python -c "import pty;pty.spawn('/bin/bash')"
king@ubuntu:~$
Enumeration
Root 권한을 얻기 위해 System Enumeration 도구를 사용하기 전에 crontab을 일단 살펴보자.
king@ubuntu:~$ cat /etc/crontab
cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
* * * * * king cd /home/king/ && bash run.sh
* * * * * root cd /home/king/ && bash root.sh
* * * * * root cd /root/company && bash run.sh
root 권한으로 실행하는 shell script 파일 2개가 보인다. root.sh 와 run.sh 이다. "/home/king"로 이동한 다음 root.sh를 root 권한으로 실행하니 이 파일에 reverse shell을 일으키는 코드를 심어주면 될 것 같다.
root.sh의 소유권한을 보아하니 root이다. root.sh의 내용을 변경하거나 수정할 수 있으면 좋겠지만 그러지 못한다. 하지만 삭제는 가능하다. 다음과 같이 root.sh 를 삭제한 이후 reverse shell을 심어주자.
root 권한까지 얻었다.
기타
Npiet?
이 문제에서 새롭게 알게 된 부분은 king의 home 디렉토리에 존재하는 credentials.png라는 파일을 통해서이다. 이 파일을 열어보면 다음과 같은 이미지가 나온다
이 이미지를 보고 binwalke, foremost, zsteg, stegsolver, zlib-plate 까지 다 돌려봤는데 정체를 알아낼 수 없었다. 이 파일의 정체는 npiet 라는 형식의 파일이다. 그래픽 이미지를 코드로 사용하는 개념을 기반으로 한 프로그래밍 언어라고 한다.
https://www.bertnase.de/npiet/npiet-execute.php 에서 해당 이미지를 디코딩 할 수 있다고 하는데 어떤 방법을 통해거 가능한지는 조사하지 못했다.
안녕하세요 jako입니다.
해당 글을 통해 유용한 정보를 얻으셨길 바랍니다.
경험과 지식의 공유를 통해 조금 더 양질의 정보를 생성하기위한 뉴스레터를 만들었습니다.
블로그에는 기재되지 않을 유용한 정보 또한 뉴스레터에 담아 발행하고자합니다.
이 링크를 클릭하여 뉴스레터를 구독해주세요.
양질의 정보와 함께 찾아뵙겠습니다.
'Pentest > TryHackMe' 카테고리의 다른 글
[TryHackMe] Valley (0) | 2023.08.30 |
---|---|
[TryHackMe] Pickle Rick (0) | 2023.08.19 |
[TryHackMe] Easy Peasy (0) | 2023.07.23 |
[TryHackMe] OverPass2 (0) | 2023.07.15 |
[TryHackMe] Ninja Skills (0) | 2023.03.18 |