漏洞成因: 客户端向服务端发送请求,服务器端允许客户端发送url,然后直接响应该url,从而去加载或者请求客户端url指定的资源,而这些资源可能是服务器本身的敏感信息,也有可能是恶意的shell,因此SSRF漏洞产生。 客户端为什么不直接传马呢?因为该服务器位于防火墙之后,恶意的流量或者请求会被防火墙直接过滤,但是防火墙不会拦截服务器出来的流量。所以攻击者想办法让服务器主动发起请求,服务器被getshell之后,再以这台服务器为跳板去攻击内网,或者同网段的其他服务器。
好玩的利用姿势 这里我们是搭建了一个简易的靶场 攻击机ip:10.1.1.200 靶机ip:10.1.1.100
测试目标网站是否存在ssrf漏洞
直接输入我们攻击机的ip,然后检查攻击机上有没有收到来自靶机的请求
但是在这之前我们需要在攻击机上开启apche服务,这是web中间件,它的日志会记录所有请求访
操作:
1、我们在攻击机 输入如下命令
sudo service apache2 start
2、接着回到目标服务器的应用页面,输入
http://10.1.1.200
点击test it
接着我们就可以在攻击机的apache 日志中查看有没有靶机也就是ip为 10.1.1.100的机器的访问记录,有的话说明目标服务器响应了我们的url,所以就存在ssrf漏洞咯
操作:
回到攻击机的终端
输入
tail -f /var/log/apche2/accesss.log
果然有访问记录,那就是存在咯
既然漏洞存在,那么接下来,我们就可以玩一点好玩的东西了
介绍 SSRF漏洞会利用到的三个协议
dict 协议 ,可以利用这个协议 看一些指纹信息,比如中间件的版本号,比如对方开放服务的版本号
我们直接看怎么利用
curl:一种命令行工具,作用是发出网络请求,获取数据;
curl -v:显示HTTP通信的整个过程,包括端口连接和HTTP request头信息。
我们直接看到了目标服务器的中间件apache的版本
更换这个端口号,我们可以看不同服务的指纹信息,比如端口换成22,可以看到ssh的版本
第二个协议 就是 file协议,这个协议就还看计算机上的文件资源的,如果存在SSRF漏洞,我们直接让服务器查看他自己的敏感文件,并且进行回显(当然现实中绝大部分网站都不会有回显的),我们可以看个效果,爽一下
直接
输入
file:///etc/passwd/
就能看到目标服务器上的密码文件,/ 在linux机器中就代表了根文件,密码账户文件都存在 etc这个文件夹下,passwd这个文件存储了系统的账户密码
当然,我们也可以生成一个木马文件,将这个文件地址放在url中,在目标服务器上输入这个url,
让我们的目标服务器来访问,可以直接getshell,控制该台服务器
因为是靶机,所以显得有点小儿科,真实情况远比这复杂得多。
我们可以由易到难,慢慢接触安全的世界,不要妄想一步吃个胖子,路要一步一步走。