(29,2024年最新2024物联网嵌入式开发架构面试指南

32 阅读6分钟

4.2、绕过:

方法一:使用特殊格式绕过

方法二:IP地址转为进制及IP地址省略绕过

方法三:域名的配置

五、SSRF漏洞点:

5.1、功能分析:

5.2、关键字分析:

5.3、(可能存在)漏洞函数:

5.3.1、file_get_contents()

5.3.2、curl_exec()

5.3.3、fsockopen()

六、file_get_contents()和curl_exec()区别:

七、漏洞的验证:

7.1、方法一:对URL地址进行分析

7.2、方法二:对数据包进行分析

八、举例(利用过程):

8.1、pikachu(SSRF-curl)

8.1.1、第一步:分析是否可能存在SSRF

8.1.2、第二步:测试是哪种函数引起的SSRF漏洞

8.2、pikachu(SSRF-file_get_contents)

8.2.1、第一步:判断是否存在SSRF漏洞

8.2.2、第二步:利用漏洞


一、简介:

全称Server-Side Request Forgery:服务器端请求伪造

顾名思义,攻击者伪造成服务器发起的请求,ssrf的目标是从外网,通过服务器漏洞,访问到原本无法访问到的内部网络



二、产生原因:

因为用户功能的需要,需要服务端A提供从其他服务器B获取数据的功能,但是由于没有对目标地址没有很好的过滤和限制,导致攻击者可以伪造成服务端A,然后向用户发出伪造请求,从而达到访问内部网络的目的。



三、危害与利用:

3.1、端口扫描

对外网、服务器所在内网、本地进行端口扫描

eg:example.com/ssrf.php?ur…

通过应用响应时间、返回的错误信息,未开放端口会显示空白或者报错,开放端口会显示服务的banner信息

3.2、攻击内网、本地漏洞服务

攻击运行在内网或本地的应用程序(溢出、弱口令等)

利用Gopher协议拓展攻击面

3.3、内网Web应用指纹识别、攻击漏洞应用

访问默认文件,对内网web应用进行指纹识别(框架,平台,模块以及CMS等 )

攻击内外网的web应用,主要是使用get参数就可以实现的攻击(如struts2,sqli等);

第一步,应用指纹识别---->第二步,寻找漏洞----->第三步,漏洞利用

3.4、文件读取

读取本地文件,利用file协议读取本地文件,提交参数等

example.com/ssrf.php?ur…



四、防护与绕过

4.1、防护:

使用正则表达式的方式对SSRF中的请求地址进行过滤

eg:限制请求特定域名、禁止请求内网IP。

4.2、绕过:

方法一:使用特殊格式绕过

htttp://example.com@evil.com


方法二:IP地址转为进制及IP地址省略绕过

原始:地址127.0.0.1

八进制:0177.00.00.01

十进制:2130706433

十六进制:0x7f.0x0.0x0.0x1

IP地址省略写法:127.1


方法三:域名的配置

有可控域名A,将域名A记录指向欲请求的IP进行绕过操作

evil.example.com => 10.10.11.11



五、SSRF漏洞点:

5.1、功能分析:

(需要请求外部服务器的)

通过URL地址分享、通过URL转码服务、通过URL在线翻译、通过URL加载或下载图片、通过URL的收藏、对URL采集的功能、其他调用URL的功能

5.2、关键字分析:

对于上述可能产生SSRF漏洞的URL关键字进行分析总结

share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain……

然后可以使用URL对应的关键字进行搜索

inurl:share

5.3、(可能存在)漏洞函数:

(这些函数的使用不当会导致SSRF漏洞的产生)

5.3.1、file_get_contents()

定义:把整个文件读入一个字符串中

语法:file_get_contents(path,include_path,context,start,max_length)

参数描述
path必需。要读取的文件
include_path可选。要在 include_path 中搜寻文件,将该参数设为 "1"
context可选。规定文件句柄的环境 context 是一套可以修改流的行为的选项。若使用 null,则忽略。
start可选。文件中开始读取的位置 (适用于PHP 5.1以后)
max_length可选。读取的字节数 (适用于PHP 5.1以后)

5.3.2、curl_exec()

定义:执行一个cURL会话

 参数:ch  由 curl_init() 返回的 cURL 句柄。

用法:抓取URL并把它传递给浏览器 curl_exec($ch)

5.3.3、fsockopen()

定义:打开一个网络连接或者一个Unix套接字连接

参数描述
hostname安装了OpenSSL,添加访问协议ssl://或者是tls://,从而可以使用基于TCP/IP协议的SSL或者TLS的客户端连接到远程主机
port端口号。如果对该参数传一个-1,则表示不使用端口,例如unix://
errno如果errno的返回值为0,而且这个函数的返回值为false,那么这表明该错误发生在套接字连接(connect())调用之前,导致连接失败的原因最大的可能是初始化套接字的时候发生了错误
errstr错误信息将以字符串的信息返回。
timeout设置连接的时限,单位为秒。


六、file_get_contents()和curl_exec()区别:

file_get_contents():只能使用GET方式获取数据

curl_exec():支持多种协议



七、漏洞的验证:

 根据漏洞产生的原理,对所我们所测试的地方进行一个分析

首先这个地方应该是服务器A请求访问以外的服务端B,而不是客户端向服务器A发起请求

使用排除法:看URL地址中有没有包含其他URL地址,再看数据包的请求

7.1、方法一:对URL地址进行分析

我在网上随便找了一张图片,右键新标签打开后

对URL地址进行了解码,就看见了2个包含的URL地址

7.2、方法二:对数据包进行分析

img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取