ssrf

ssrf(服务器请求伪造)
定义:攻击者构造请求,通过服务器发起请求来获取外网需要验证或外网无法访问的一些数据。
形成的原因:SSRF的形成大多是由于服务端提供了从其他服务器获取数据的功能,但是没有对目标地址进行过滤和限制。
比如,一个正常的Web应用本应该从指定URL获取网页文本内容或加载指定地址的图片,而攻击者利用漏洞伪造服务器端发起请求,从而突破了客户端获取不到数据的限制,如内网资源、服务器本地资源等。

如果能够获取外网robots.txt返回的内容,则可能存在ssrf

https://www.baidu.com/robots.txt

如果无回显,可以利用dnslog

无回显的SSRF【http://localhost/ssrf.php?url=http://zdutpn.dnslog.cn】

 

挖掘技巧
目前常见的漏洞挖掘方式有两种:
1、从web功能上挖掘
①分享:通过url地址分享网页内容
②转码服务
③在线翻译
④图片的下载与加载
⑤图片、文章收藏功能
⑥未公开的API实现及调用URL的功能                        
2、从URL关键字挖掘
Share、wap、url、link、src、source、target、u、3g、display、sourceURL、imageURL、domain……


ssrf url中的伪协议
当我们发现SSRF漏洞后,首先要做的事情就是测试所有可用的URL伪协议
file:/// 从文件系统中获取文件内容,如,file:///etc/passwd
dict:// 字典服务器协议,访问字典资源,如,dict:///ip:6739/info:
sftp:// SSH文件传输协议或安全文件传输协议
ldap:// 轻量级目录访问协议
tftp:// 简单文件传输协议


gopher:// 分布式文档传递服务,可使用gopherus生成payload


绕过
1.“@”符号绕过(http://www.baidu.com@10.10.10.10与http://10.10.10.10请求是相同的。)
2.点分割符号替换(钓鱼邮件常用于绕过检测)(可以使用。、、.来代替域名中的点分割,比如https://www.baidu.com/等同于https://www。baidu。com/)
3.本地回环地址的其他表现形式(127.0.0.1可以表示为http://0:80,http://localhost)
4.IP的进制转换(钓鱼邮件常用于绕过检测,十进制:http://216.58.199.78,八进制,http://0330.0072.0307.0116)
或使用URL编码字符来混淆URL解析代码,如果实现过滤器的代码与执行后端HTTP请求的代码以不同的方式处理URL编码的字符,则特别有用。
5.利用短网址

https://baijiahao.baidu.com/s?id=1724265374498292807&wfr=spider&for=pc
https://blog.csdn.net/qq_43378996/article/details/124050308
防御
1,过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
2, 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
3,限制请求的端口为http常用的端口,比如,80,443,8080,8090。
4,黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。
5,禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。
6、对于DNS重绑定,使用DNS缓存或者Host白名单。

dns缓存简单点的说就是当我们使用电脑访问某个网址的时候,需要DNS服务器解析,并且把这个网址的ip临时储存起来,这样你下次访问这个网址的时候就可以直接解析,提高了访问速度,这就是DNS缓存
短网址
原理:需要一个服务器,生成一个短链接,重定向原链接。短链接与原链接存在一个映射关系的,访问短链接的时候,直接从数据库拿出来一个对应的原链接并且重定向。
https://www.cnblogs.com/murenziwei/p/14793299.html

参考链接:https://blog.csdn.net/qq_43378996/article/details/124050308
https://blog.csdn.net/sycamorelg/article/details/111189567
ssrf+redis
原理:
外网无法访问redis,可以通过ssrf访问redis并让redis执行命令,redis为root且无密码()
构造这样的命令:利用redis的数据备份功能,构造一个crontab文件存放在服务器的/etc/目录下,让目标服务器定时反弹shell,从而获取服务器的控制。
ssrf执行上述的命令

通过 SSRF 的 gopher 协议操作内网的 redis,利用 redis 将反弹 shell 写入,

kali执行

 nc  -lvnp 6666开启监听(Ubuntu效果不好)

crontab 定时任务,url 编码,将\r 字符串替换成%0d%0a
但定时任务

只能 Centos上使用, Ubuntu上行不通,原因如下:

  1. 因为默认redis写文件后是644的权限,但ubuntu要求执行定时任务文件 /var/spool/cron/crontabs/<username>权限必须是600也就是 -rw-------才会执行,否则会报错 (root) INSECURE MODE (mode 0600 expected),而Centos的定时任务文件 /var/spool/cron/<username>权限644也能执行
  2. 因为redis保存RDB会存在乱码,在Ubuntu上会报错,而在Centos上不会报错
 
 参考链接:https://blog.csdn.net/qq_43665434/article/details/115408269
 
除此之外,还可以利用redis备份写webshell
还可以利用redis密钥登录ssh
kali攻击机下生成密钥公钥,利用redis备份将公钥写进目标服务器的/root/.ssh/authorized_keys文件中,再利用kali的ssh进行连接登录
 

redis客户端连接redis   https://blog.csdn.net/weixin_43970718/article/details/115287368
命令详细版  https://blog.csdn.net/qq_45213259/article/details/110352124
https://blog.csdn.net/qq_43665434/article/details/115408269

https://blog.csdn.net/m0_71692682/article/details/125217587?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3-125217587-blog-110352124.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3-125217587-blog-110352124.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=6

https://blog.csdn.net/rfrder/article/details/108942162?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-108942162-blog-110352124.pc_relevant_multi_platform_whitelistv3&spm=1001.2101.3001.4242.1&utm_relevant_index=3

 

 一般发现ssrf,都是用字典爆破进行目录,端口,和一些漏洞

除此之外,ssrf还可以与Struts2(016)如:http://www.xxx.com/index.action?redirect:xxxxxxxxxxxxx,直接可以回显命令执行结果,sql注入

内网中的未授权访问页面等漏洞结合使用

其它应用参考链接:https://blog.csdn.net/weixin_50464560/article/details/116769072

posted @ 2022-07-13 23:00  lzstar-A2  阅读(93)  评论(0编辑  收藏  举报