2023/03/15
背景学习1 .HTTP中请求方式GET/POST:
GET:从服务器请求数据后获取服务端数据
常见发起GET请求的方式有:URL,src/href,表单form
格式:
index.php?userName=jack&password=123 key=value&key=value,这种叫做查询字符串
特点:
参数名和参数值之间没有空格
参数值不需要使用单双引号
- GET方式提交数据特点:
在url后面拼接参数,只能以文本的形式传递参数
传递的数据量小
安全性低,会将信息显示在地址栏中
POST:发送,提交,向服务器提交要被处理的数据
格式:查询字符串(名称/值)是在POST请求的HTTP消息主体中发送,不会出现在url
具体使用POST:对数据有变更的请求,请求的结果有持续性的副作用
特点:
安全性高
传递数据量大
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YhKqxCXT-1679149492920)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1bc1e674-a345-484e-9580-b8e70a96fcba/Untitled.png)]
4. SSRF服务端请求伪造
攻击者构造请求,在目标服务端执行的一个安全漏洞
以服务器的身份发送一条构造好的请求给服务器所在内网进行攻击。
1. 主要攻击方式:
攻击者借助服务器A发起SSRF攻击,通过服务器A向主机B发起请求,达到攻击内网的目的。
2. 漏洞形成原理:
很多网站提供了从其它服务器上获取数据的功能,SSRF利用存在缺陷的web站点作为代理攻击远程和本地的服务器。
形成原因大多是:服务端提供了从其它服务器获取数据的功能,但没有对目标地址做过滤和限制
- 对外网、服务器所在内网、本地进行端口扫描
- 向内部任意主机的任意端口发送payload来攻击内网服务
- DOS攻击(请求大文件,始终保持连接Keep-Alive Always)
- 攻击内网的web应用,如直接SQL注入、XSS攻击等
- 利用file、gopher、dict协议读取本地文件、执行命令等
- 可以无视网站CDN
3. 漏洞检测:
- 漏洞验证:
抓包分析发送的请求是否是由服务器端发送的来判断是否存在SSRF漏洞
- 漏洞的可能出现点:
- 分享功能:通过url地址分享文章,此功能中没有对目标地址的范围做过滤和限制就存在着SSRF漏洞。
- 图片加载/下载
- 图片/文章收藏功能
- 转码服务
- 在线翻译
需要从远程服务器请求资源的网站都可能存在SSRF漏洞。
- 绕过方法
- 当网站限制只能访问http://www.xxx.com类型的域名时,采用http基本身份认证的方式绕过,利用@
- 绕过限制请求IP不为内网地址:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7FbQ2RHW-1679149492921)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/44d44410-40b7-4ab2-917c-d403fff64f12/Untitled.png)]
- 限制请求只为http协议:1.采用302跳转 2. 采用短地址
- 漏洞利用
产生漏洞的函数
PHP中下面函数的使用不当导致SSRF:
file_get_conents()
fsockopen() //将整个文件读入一个字符串中
curl_exec() //执行给定的curl会话
可以通过url中的内容改成内网的其它服务器上的地址和端口,探测内网信息,端口开放情况
4. 如何防御SSRF
1、禁止跳转
2、禁用除http和https外的协议,如:file://、gopher://、dict://等。
ftp://协议,用来探测开放的端口
Gopher;//协议,任意的构造请求
Dict://协议,探测主机信息
3、限制请求的端口为http常用的端口,如 80、443、8080。
4、统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态。
5、对请求地址设置白名单或者限制内网IP,以防止对内网进行攻击。