SSRF正则绕过1+SSRF文件读取

文章讲述了在两个网络安全挑战中,如何通过SSRF漏洞利用正则表达式绕过限制并读取文件,包括使用Dirsearch工具、CURL操作以及在Docker环境下的环境部署。参与者需要理解并实施payload来获取flag。

[题目信息]:

题目名称题目难度
SSRF正则绕过11

[题目考点]:

SSRF正则绕过1

[Flag格式]:

SangFor{5IbCdntb9LqcbhdQZszyr8wnZ2Uhdj6i}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

docker-compose up -d

[题目writeup]:

1、实验主页

2、使用dirsearch扫描网站目录

python dirsearch.py -u http://分配IP -e php

3、扫描到文件flag.php,访问flag.php文件

4、提示仅可以本地访问

5、代码中要求http格式为

host中以Sang开头
结尾为for

6、因此利用@、.符号和?号绕过正则匹配。

7、至此获得flag,实验结束。





[题目信息]:

题目名称题目难度
SSRF文件读取1

[题目考点]:

SSRF文件读取

[Flag格式]:

SangFor{Ux5uIUUb5un08PWtsabg5mqF2oTCY8kg}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

docker-compose up -d

[题目writeup]:

1、题目主页

2、点击提交查询

3、题目源码

<?php 
if(!$_GET['site']){ 
	$str = <<<EOD
<html> 
<body> 
look source code: 
<form action='' method='GET'> 
<input type='submit' name='submit' /> 
<input type='text' name='site' style="width:1000px" value="https://www.baidu.com"/> 
</form>
</body>
</html>
EOD;

echo $str;
die();
}

$url = $_GET[‘site’];
$url_schema = parse_url($url);
$host = $url_schema[‘host’];
$request_url = $url."/";

if ($host !== ‘www.baidu.com’){
die(“wrong site”);
}

$ci = curl_init();
curl_setopt($ci, CURLOPT_URL, $request_url);
curl_setopt($ci, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ci);
curl_close($ci);

if($res){
echo "<h1>Source Code:</h1>";
echo $request_url;
echo "<hr />";
echo htmlentities($res);
}else{
echo "get source failed";
}

?>

4、利用file协议读取/etc/passwd文件

  • 用file协议读取本地文件
  • 绕过逻辑中对host的检查, curl是支持file://host/path, file://path这两种形式, 但是即使有host, curl仍然会访问到本地的文件
  • 截断url后面拼接的/, GET请求, 用?#都可以

5、Payload:

file://www.baidu.com/etc/passwd?

6、成功访问passwd文件,至此实验结束。

passwd读取成功,思考如何读取flag文件!

<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>--- ### 如何绕过相对路径进行SSRFSSRF(服务器端请求伪造)是一种攻击技术,攻击者诱导服务器向非公开的内部资源发起请求。绕过相对路径限制是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、付费专栏及课程。

余额充值