绕过Referer和Host检查

前端数据接口抓取,后端代理解决检查问题
博客指出前端抓取其他网站数据接口时,部分接口会检查请求头中的Host和Referer,前端无法绕过。可通过后端代理解决,还以vue - cli环境下的qq音乐为例,介绍了伪造请求头的操作,如打开webpack.dev.conf.js配置文件,安装express、axios并引入。

1、我们在尝试抓取其他网站的数据接口时,某些接口需要经过请求头中的Host和Referer的检查,不是指定的host或referer将不予返回数据,且前端无法绕过这种检查

此时通过后端代理解决

在vue-cli 环境下,以qq音乐为例伪造请求头:

 

  1.1 打开配置文件webpack.dev.conf,js,安装express,axios

并在文件开头const portfinder = require('portfinder')后进行引入

const axios = require('axios')
const express = require('express')

let app = express()
let apiRoutes = express.Router()
app.use('/api', apiRoutes)

  1.2 找到devServer节点,在其中配置新增before函数调用,在函数体内使用axios代为发送请求,前端的请求将请求到这里
before(app) {
app.get('/api/getDiscList', (req, res) => {
const url = "https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg"
axios.get(url, {
headers: {
referer: "https://y.qq.com/m/index.html",
host:'c.y.qq.com'
},
params: req.query//转发前端请求的参数
}).then((response) => {
res.json(response.data)//传回qq后台相应的请求至前端
}).catch((err) => {
console.log(err)
})

})
}

 

 
 1,.3 修改前端请求地址
export function getDiscList() {
  // 使用jsonp抓取数据
  const url = '/api/getDiscList'

  const data = Object.assign({}, commonParams, {
    _: '1557234847616',
    platform: 'yqq',
    hostUinL: 0,
    sin: 0,
    ein: 29,
    sortId: 5,
    needNewCode: 0,
    categoryId: 10000000,
    rnd: Math.random(),
    format: 'json'
  })

  return axios.get(url, {
    params: data
  }).then((res) => {
    return Promise.resolve(res.data)
  })
}

 

 

转载于:https://www.cnblogs.com/Tanqurey/p/10828660.html

<think>嗯,用户问的是如何绕过相对路径进行SSRF,也就是服务器端请求伪造。首先,我得回忆一下SSRF的基本概念,攻击者利用服务器发起未经授权的请求,通常针对内部系统。相对路径绕过可能涉及到如何让服务器解析URL时访问非预期的资源。 首先,可能需要考虑URL解析的差异。不同的库或框架处理URL的方式可能不同,比如有的会处理路径标准化,或者处理特殊字符。比如,使用../这样的目录遍历可能会被某些解析器处理,从而访问上级目录或其他资源。例如,http://example.com/../../etc/passwd 这样的请求,如果服务器没有正确过滤,可能会访问到系统文件。 然后,想到可能用到的编码或特殊字符。比如对斜杠进行编码,比如%2e%2e%2f代表../,或者使用双重编码,比如%252e%252e%252f。有些服务器可能在解码后处理这些路径,导致绕过。 还有,可能利用协议处理的不同。比如,使用file://协议直接访问本地文件,但通常相对路径是相对于当前目录的。如果结合目录遍历,可能构造如file:///etc/passwd,但如何让服务器解析相对路径可能需要更多的技巧。 另外,想到一些Web服务器在处理URL重定向时的行为,比如如果应用允许用户提供重定向的URL,攻击者可能构造一个相对路径的重定向,导致服务器访问内部资源。例如,Location头中的相对路径可能会被服务器解析为内部地址。 还有,考虑使用@符号来绕过。比如http://example.com@internal/resource,但这种情况更多用于身份验证部分,可能相对路径绕过关系不大,但需要确认是否有其他利用方式。 再考虑一些特定的框架或库的漏洞,比如某些旧版本的库可能对URL的解析存在缺陷,允许通过特定的字符组合绕过路径检查。例如,使用反斜杠\代替正斜杠,或者混合使用大小写,但现代服务器通常会对这些进行标准化处理。 另外,可能需要结合其他漏洞,比如文件名注入或者路径拼接问题。如果应用将用户输入拼接到路径中,而没有正确清理,攻击者可以利用../跳出限制目录,访问其他路径。 比如,假设应用允许用户输入一个路径参数,如http://example.com/api?file=user/data.txt,攻击者可能修改为file=../../../../etc/passwd,从而读取系统文件。这种情况下,相对路径绕过是通过目录遍历实现的。 但问题是如何绕过相对路径的限制,可能用户指的是服务器本身限制了使用相对路径来访问某些资源,而攻击者需要找到方法绕过这种限制,让服务器发起对非预期地址的请求。 可能想到使用绝对URL来替代相对路径,但绝对URL可能被过滤。或者,利用URL解析器中的差异,比如将绝对URL编码或拆分,使得检查机制失效。 比如,使用http://attacker.com#@internal.resource 这样的构造,可能某些解析器会将其解释为访问internal.resource,而其他部分视为片段标识符。 或者,利用DNS重绑定技术,使得域名解析为内部IP,但这种方法可能属于另一种SSRF绕过方式,而非直接处理相对路径。 再想,是否有其他方法可以让服务器在处理相对路径时,解析到攻击者控制的地址。例如,通过控制Host头或Referer头,诱导服务器生成包含相对路径的URL,从而指向内部服务。 或者,结合某些API的参数,比如通过控制参数值,使得服务器在拼接URL时,生成指向内部资源的绝对路径,例如将参数值设置为@internal:8080,导致生成类似http://example.com/api/@internal:8080的请求,从而访问内部服务。 可能还需要考虑不同的协议处理,比如使用gopher://、dict://等协议,结合相对路径构造特定的请求,但这类协议通常需要绝对路径,所以相对路径可能不适用。 总结一下,可能的绕过方法包括: 1. 目录遍历(使用../或编码后的形式) 2. 利用URL解析差异(如特殊字符、编码) 3. 协议处理不当(如file://结合路径遍历) 4. 参数注入或拼接漏洞 5. 利用重定向或HTTP头控制 6. DNS重绑定(间接相关) 需要验证这些方法的可行性,并给出具体的例子。比如,构造一个包含编码后的../的URL,或者利用服务器拼接URL时的漏洞,将用户输入的部分作为路径的一部分,通过目录遍历跳出限制。 同时,防御措施方面,应该对用户输入的URL进行严格校验,禁止使用file://等危险协议,过滤或标准化路径中的特殊字符,使用白名单机制允许的域名协议,以及设置网络层防护,限制服务器访问内部服务。</think>--- ### 如何绕过相对路径进行SSRF? SSRF(服务器端请求伪造)是一种攻击技术,攻击者诱导服务器向非公开的内部资源发起请求。绕过相对路径限制是SSRF绕过的一种常见手段,以下是逐步分析及典型方法: --- #### **1. 理解相对路径解析机制** 相对路径(如`/api/../admin`)会被服务器解析为绝对路径(如`/admin`)。但若服务器未正确规范化路径,攻击者可构造特殊路径访问受限资源。 --- #### **2. 绕过方法及示例** ##### **方法1:目录遍历(Path Traversal)** - **原理**:利用`../`跳转至上级目录,绕过路径限制。 - **示例**: ```plaintext http://example.com/api?url=http://attacker.com/../../etc/passwd ``` 若服务器拼接路径时未过滤`../`,可能读取系统文件。 ##### **方法2:URL编码绕过** - **原理**:对特殊字符(如`/`、`.`)进行编码,绕过黑名单过滤。 - **示例**: ```plaintext http://example.com/api?url=http://attacker.com/%2e%2e%2f%2e%2e%2fetc/passwd ``` 解码后为`../../etc/passwd`。 ##### **方法3:协议结合路径遍历** - **原理**:利用`file://`协议直接访问本地文件,结合相对路径。 - **示例**: ```plaintext http://example.com/api?url=file:///var/www/../../etc/passwd ``` ##### **方法4:参数注入拼接** - **原理**:利用服务器拼接URL时的逻辑漏洞,注入路径。 - **示例**: ```plaintext http://example.com/api?path=@internal-host:8080/admin ``` 若服务器拼接为`http://user:@internal-host:8080/admin`,可能访问内网服务。 ##### **方法5:利用重定向** - **原理**:诱导服务器跟随重定向至内部地址。 - **示例**: ```plaintext http://example.com/api?url=http://attacker.com/redirect?target=http://127.0.0.1 ``` --- #### **3. 防御措施** 1. **输入校验**: - 禁止用户输入包含`file://`、`localhost`、`127.0.0.1`等敏感协议或地址。 - 使用正则表达式严格匹配白名单域名(如`^https?://example\.com/`)。 2. **路径规范化**: - 解析URL前,标准化路径(如移除`../`)。 3. **网络层防护**: - 限制服务器出站流量,禁止访问内部IP段。 4. **使用SSRF防护库**: - 如Python的`requests`库结合`urlparse`进行安全解析。 --- #### **总结** 绕过相对路径的核心是**利用路径解析差异****输入过滤缺陷**。防御需结合多层级校验、规范化处理及网络隔离。实际渗透测试中,需根据目标服务器的解析特性构造Payload。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值