ssrf漏洞

自己总结的绕过方法

  1. 进制绕过,127进行16进制编码
  2. 用特殊短地址进行绕过127.10.0.0.00.00可以代替127.0.0.1
  3. 正则表达式检验开头结尾的,用@进行分隔username和hostname
  4. 302跳转,在自己的服务器上写php Location代码

ssrf漏洞是什么

  1. SSRF漏洞(Server-Side Request Forgery)是一种Web应用程序漏洞,它允许攻击者在受攻击的服务器上执行未经授权的网络请求。具体而言,攻击者可以构造一个特制的请求,在请求中指定一个外部的URL地址,然后将该请求发送给目标服务器。目标服务器接收到请求后,会认为这个请求来自于内部网络的可信源,并向指定的URL地址发起请求。由于攻击者可以任意指定这个URL地址,因此可以利用该漏洞实现多种攻击,如获取敏感信息、执行任意命令等。

  2. SSRF漏洞通常出现在Web应用程序中,例如一个Web应用程序提供了针对用户输入URL的功能,但没有对用户输入的URL做足够的安全检查,导致攻击者可以通过构造恶意URL利用该漏洞。此外,攻击者也可以通过其他途径(如文件上传功能)来利用该漏洞。

  3. 为了防止SSRF漏洞的出现,开发人员需要对Web应用程序中的所有外部请求进行仔细的检查和过滤

  4. 原理

    1. 攻击者可以通过公网IP访问到某个web服务器
    2. 攻击者无法通过公网IP访问到内网的其他设备或者办公区域
    3. 这时候如果想要进行内网探测,web服务器同时存在ssrf漏洞,就能够以web服务器作为跳板,进而攻击其它服务器或者区域

    利用条件

    (1)web服务器存在SSRF漏洞;

    (2)web服务器有访问本地或远程服务器的权限;

    存在位置

    一般是web服务器提供了从其他服务器获取数据的功能。

    (1)通过URL分享网页内容

    (2)在线翻译

    (3)通过url对图片的加载和下载

    (4)转码服务

    利用实验,开启方法

ctfshow351

  1. 源码中接收了一个post传递的url参数,用hackbar去构造攻击payload

  2. ```php
    url=http://127.0.0.1/flag.php

    
    3.   即可出现flag
    
    ### ctfshow352
    
    ### parse_url函数的作用
    
    `parse_url()` 是 PHP 语言中的一个函数,它用于解析 URL 地址并以关联数组的形式返回各个组成部分。在解析过程中,会将 URL 字符串拆分成协议名、主机名、端口号、路径、查询字符串和片段标识等多个组成部分,并分别保存到返回的关联数组中。这个函数不会对 URL 解码,所以可以被用来解析包含特殊字符的 URL。
    
    具体而言,`parse_url()` 函数的格式为:
    

    phpCopy Codearray parse_url ( string $url [, int $component = -1 ] )

    
    其中,`$url` 参数是要解析的 URL 地址字符串,`$component` 参数可选,表示要返回的 URL 组件,取值范围为 `PHP_URL_SCHEME`、`PHP_URL_HOST`、`PHP_URL_PORT`、`PHP_URL_USER`、`PHP_URL_PASS`、`PHP_URL_PATH`、`PHP_URL_QUERY` 或 `PHP_URL_FRAGMENT`。如果不指定 `$component` 参数,则函数将返回包含所有 URL 组件的关联数组。
    
    例子:
    

    phpCopy Code$url = “https://www.example.com/test.php?id=123#section4";
    $parsed_url = parse_url($url);

print_r($parsed_url);


输出结果为:

Copy CodeArray
(
[scheme] => https
[host] => www.example.com
[path] => /test.php
[query] => id=123
[fragment] => section4
)


### scheme

scheme:协议

### curl

Curl(全称为 "Client Url Library")是一个被广泛应用于互联网通信的工具和库,它支持各种传输协议,比如FTP、HTTP、SMTP等。在PHP中,curl以扩展库的形式提供,开发者可以借助curl扩展实现各种基于网络协议的操作,例如下载文件、发送HTTP请求、获取API数据等等。

常见的curl函数有:

-   `curl_init()` - 初始化一个 curl 会话
-   `curl_setopt()` - 设置 curl 相关选项
-   `curl_exec()` - 执行 curl 会话
-   `curl_close()` - 关闭curl 会话

`curl_setopt()` 函数可以设置不同的选项来定制 curl 的行为。例如:

-   `CURLOPT_URL` 设置URL地址
-   `CURLOPT_RETURNTRANSFER` 返回结果而不是输出到页面
-   `CURLOPT_POST` 使用POST请求方式
-   `CURLOPT_POSTFIELDS` POST请求提交的数据
-   `CURLOPT_HEADER` 包含响应头信息
-   `CURLOPT_SSL_VERIFYPEER` 是否验证证书等等

以上只是 curl 的一些基本使用方法,通过查阅Curl文档[[1](https://curl.se/docs/manpage.html)],你还可以了解到使用curl库还能够支持更多的功能比如: 代理、cookie设置、安全认证、文件上传等。

在 PHP 中,我们可以通过 curl 扩展的一系列函数来实现 curl 功能,并且这些函数具备很高的灵活性和可扩展性,可以根据不同的需求和场景完成各种网络请求操作。

#### 题目

1.   将127.0.1替换为127.0.0,127.1等都可以
2.   之前写过一个golang后端的项目,用的0.0.0.0,既包含了localhost,也包含了127.0.0.1,这里可以绕过字符过滤
3.   ![](https://strongwillpro.oss-cn-beijing.aliyuncs.com/img/20230420142950.png)

### web353

1.   可以将127进行16进制编码,编码为0x7f

2.   也可以转换为其它进制

3.   127.0.0.1可以写为127.1也可以绕过

4.   ```
     url=http://0x7f.0.0.1/flag.php

web335

  1. 用127.1和0.0相同,都可以代替回环地址127.0.0.1

web356

  1. 用0也可以代替127.0.0.1或0.0

web357

  1. 这段代码使用PHP内置函数filter_var()$ip变量进行IP地址过滤和验证,其中FILTER_VALIDATE_IP用于验证是否为合法的IP地址,FILTER_FLAG_NO_PRIV_RANGE表示拒绝私有IP地址,FILTER_FLAG_NO_RES_RANGE表示拒绝保留IP地址。具体来说,这段代码会返回$ip变量的过滤后结果,如果$ip不是合法的公网IP地址,则返回false。

  2. 这个题利用302跳转

  3. 在服务器上放以下代码

  4. ```php

    5. 攻击payload 6. ``` url=http://www.ctfer.xyz/a.php
  5. 使用此url参数进行传参,可以通过访问www.ctfer.xyz下的a.php来跳转访问到内网127.0.0.1下的flag.php文件

web358

  1. ```
    /^http://ctf..*show$/i

    
    3.   匹配的是以http://ctf.开头,以show结尾的
    
    4.   ```url
         http://ctf.@127.0.0.1/flag.php?show
  2. 使用@作为分隔符,用于指示用户名和域名之间的分界。用于url的基本身份验证,指定用户名和密码来访问资源,例如:http://username:password@example.com

  3. 类似于ssh登录目标主机一样

  4. ```
    ssh [options] [username@]hostname command
    ssh -p 22 username@192.168.1.100 # 使用22端口连接到主机192.168.1.100
    ssh -i ~/.ssh/id_rsa user@example.com
    ssh user@example.com ls -al /home/user # 登录并执行远程命令

    
    8.   使用@来分隔username和hostname
    
    ### web359
    
    1.   工具下载地址https://github.com/tarunkant/Gopherus
    
    2.   ```
         python gopherus.py --exploit mysql
  5. 然后传到check.php中post:returl=xxx,不要忘记把下划线后面的内容url编码一次

  6. 涉及到一些文件上传的知识,最后要用蚁剑去连接