SSRF(服务器端请求伪造)

0x01. 相似原理:

​ 翻译: 提供需要翻译的文字 -> 翻译软件 -> 返回翻译后的数据
​ A 控制 B 去访问 C
​ 网页翻译原理:
​ 方案A:
​ 1.请求目标站点
​ 2.获取浏览器上面的目标站点数据
​ 3.翻译软件把数据返回
​ 方案B:
​ 1.提供目标网址给翻译网站
​ 2.翻译网站代访问,得到目标网站数据
​ 3.翻译网站返回翻译后的数据

SSRF:指攻击者能够从易受攻击的Web应用程序发送设计的请求对其他网站进行攻击(利用一个可发起网络请求的服务当做跳板来攻击其他目标)

0x02. SSRF的核心是攻击内网

​ 通过SSRF可以做到如下:

  • 扫描内部网络
  • 向内部任意主机和任意端口发送数据包
  • DOS
  • 暴力穷举:网络请求

有些时候厂商为什么会用已知漏洞组件

  • 使用的时候没有漏洞

  • 爆发漏洞管理员没关注

  • 漏洞修复有风险

  • 内网不会被黑客访问到。

    防御SSRF方法:
    1.正则匹配法
    内网ip:http://内网IP地址 禁止url写内网ip
    http://[email protected]:8003 @绕过
    当@被禁止时可以用DNS方法:
    dnslog中的所有url都是访问127.0.0.1

    访问网站的协议有很多:
    使用file协议读取本地文件
    用法:file:/// 读取文件
    使用dict(可探测端口)
    用法:dict://地址+端口 dict://127.0.0.1:81

    Redis:缓存数据库(默认情况没有密码) 但是只有本机能够访问

    SSRF -> 1.可作为跳板
    2.可以攻击内网网站
    3.可以攻击内网的服务

0x03. 如何发现ssrf:

​ 传参出现协议头: http:// http://www.baidu.com/s?wd=ip
​ 协议:http:// 任意其他协议都可以试试SSRF
​ 传参出现文件名: a.txt => b.php (x.后缀) http://www.baidu.com/?id=1.php
​ (1)文件读取
​ (2)文件包含
​ (3)任意文件下载

0x04. SSRF、CSRF、XSS的区别:

CSRF: 利用cookie,让浏览器偷偷发包
CSRF(客户端请求伪造、跨站请求伪造) -> 控制受害者的浏览器发起网络请求
核心:浏览器在用户不知情的情况下偷偷发送数据包
XSS: 窃取cookie,在浏览器上执行

SSRF:在服务器上执行,让服务器偷偷发包 (跟后端有关,与前端无关)
SSRF(服务端请求伪造) -> 控制目标服务器发起网络请求

如何防御SSRF
正则匹配法,禁止访问内网ip 127.0.0.1,@绕过

有防御肯定有绕过,dnslog中的所有域名都是访问127.0.0.1

测试

打开靶场,让输入想访问的地址
这里就填写baidu.com

img

img
可以发起网络请求,存在SSRF,但SSRF的核心就是攻击内网,试试访问127.0.0.1:80能不能够访问到

img

成功访问到127.0.0.1:80,所以页面有相同
既然能够访问到,那就用burp跑一下,用dict探测端口开放了哪些

img

img

这时候还没跑完,但是有看到开放了80 81端口,先让他跑着,手动访问一下81端口看有没有什么内容。

img
发现页面是没有任何东西,但是打开页面源代码,发现了flag。

img

进阶内容(利用gopher、redis getshell)

0.01. 安装Redis

在kali中安装redis,安装版本命令下载压缩包 :

wget http://download.redis.io/releases/redis-2.8.17.tar.gz
解压:tar xzf redis-2.8.17.tar.gz
进入到redis目录:cd redis-2.8.17
make
然后进入到src文件夹,./redis-server启动redis服务
然后再./redis-cli启动redis 输入ping 如果返回pong就正常正常启动了

0x02. 创建根目录并配置redis

img

首先需要用到root权限,进入home文件夹后创建一个wwwroot文件夹,在wwwroot中创建一个default文件夹,以便存放后续的一句话木马。
/home/wwwroot/default是网站的根目录.

img

这里我保存失败了,需要用ROOT权限来启动Redis,又重新来过,用root权限开启redis服务器以及运行redis

img

img

0x03. 开启Wireshark监听网卡

打开Wireshark,选择kali网卡进行监听,然后在redis中,刚刚创建好的根目录下写入一个一句话木马。

在Wireshark中右键 -> 追踪TCP流 -> 复制所有内容进行url编码

由于事先没有开启wireshark监听网卡,所以这里我开启wireshark之后,又重新创建了一个一句话木马

img

在wireshark中,直接右键追踪-TCP流

img

将数据复制下来,进行url编码

img

url编码之后加上gopher的前缀,然后放到搜索框内,点击执行,上面这张图因为没有将?进行url编码导致失败,一定要将问号也进行url编码.

img

img

img

总结一下遇到的问题:   
1.下载安装redis之后用root权限运行redis相关服务、启动
2.开启wireshark监听网卡之后再用redis执行恶意语句
3.首先需要想办法获取到网站的目录
4.在对追踪到的tcp数据流内容进行url编码的时候,换行需要用%0d%0a来代替,问号用%3f,然后加上gopher前缀gopher://127.0.0.1:6379/ 其中6379是redis默认端口号