前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ssrf漏洞

ssrf漏洞

作者头像
h3110_w0r1d
发布2024-02-19 20:18:46
2020
发布2024-02-19 20:18:46
举报

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应用程序中的所有外部请求进行仔细的检查和过滤

原理

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

利用条件 (1)web服务器存在SSRF漏洞; (2)web服务器有访问本地或远程服务器的权限; 存在位置 一般是web服务器提供了从其他服务器获取数据的功能。 (1)通过URL分享网页内容 (2)在线翻译 (3)通过url对图片的加载和下载 (4)转码服务 利用实验,开启方法

ctfshow351

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

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

代码语言:javascript
复制
3.   即可出现flag

### ctfshow352

### parse_url函数的作用

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

具体而言,`parse_url()` 函数的格式为:

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

代码语言:javascript
复制
其中,`$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);

代码语言:javascript
复制
输出结果为:

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

代码语言:javascript
复制
### 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变量的过滤后结果,如果
  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

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

代码语言:javascript
复制
3.   匹配的是以http://ctf.开头,以show结尾的

4.   ```url
     http://ctf.@127.0.0.1/flag.php?show

使用@作为分隔符,用于指示用户名和域名之间的分界。用于url的基本身份验证,指定用户名和密码来访问资源,例如:http://username:password@example.com

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

``` 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 # 登录并执行远程命令

代码语言:javascript
复制
8.   使用@来分隔username和hostname

### web359

1.   工具下载地址https://github.com/tarunkant/Gopherus

2.   ```
     python gopherus.py --exploit mysql

然后传到check.php中post:returl=xxx,不要忘记把下划线后面的内容url编码一次

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

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ssrf漏洞
    • 自己总结的绕过方法
      • ssrf漏洞是什么
        • ctfshow351
        • web335
        • web356
        • web357
        • web358
    相关产品与服务
    弹性公网 IP
    弹性公网 IP(Elastic IP,EIP)是可以独立购买和持有,且在某个地域下固定不变的公网 IP 地址,可以与 CVM、NAT 网关、弹性网卡和高可用虚拟 IP 等云资源绑定,提供访问公网和被公网访问能力;还可与云资源的生命周期解耦合,单独进行操作;同时提供多种计费模式,您可以根据业务特点灵活选择,以降低公网成本。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com