CSRF与SSRF

news2024/11/26 16:27:25

csrf(跨站请求伪造)的原理:

csrf全称是跨站请求伪造(cross-site request forgery),也被称为one-click attack 或者 session riding
scrf攻击利用网站对于用户网页浏览器的信任,劫持用户当前已登录的web应用程序,去执行分用户本意的操作。
利用站点对已经完成的身份认证的信任

在目标没有断开连接的时候,还存在登陆状态,然后攻击者利用钓鱼连接,引用目标去点击具有csrf攻击的链接,从而在目标原本登陆的网站上面通过csrf中的攻击的代码执行某些非法程序
逻辑漏洞,就是对方对于数据的请求没有进一步验证,是否合法性。
跨站点请求:请求来源可以是非本站
请求是伪造的:请求发出不是用户的本意

利用csrf攻击的常见场景:

修改用户账号密码,修改某个账号已经关联的email、手机号码、收货地址、网银(转账请求)、投票、媒体社交关注(非法金融推广),在用户非资源,不知情的情况下提交了请求。

CSRF能够做的事情:以目标用户的名义发送邮件,发消息,盗取目标用户的账号,购买物品,虚拟货币转账。
CSRF攻击过程有2个重点:
1.目标用户已经登陆了网站,能够执行网站的功能
2.目标用户访问了攻击者构造的url

csrf漏洞属于业务逻辑型漏洞,漏洞的出现主要原因是在于服务器端
1.服务器对于用户提交觉得数据缺少了确认机制和二次认证
2.漏洞扫描程序无法识别此类漏洞在这里插入图片描述

如何去确认一个web系统是否存在CSRF漏洞?

1.对目标网站增删改查的地方进行标记,并观察逻辑,判断请求是否是可以被伪造,比如,修改管理员账号,并不需要验证旧密码,导致请求容易被伪造,比如,对于敏感信息的修改,并没有使用安全的token认证,导致请求容易被伪造。
2.确认凭证有效期(这个问题会提高CSRF被利用的概率),虽然已经退出或者关闭了浏览器,但是cookie仍然有效,或者session并没有及时过期,导致CSRF攻击变得简单。

CSRF攻击分类:

站外和站内两种
站外:外部提交数据问题(GET、POST)
站内:程序员滥用&_REQUEST类变量造成的

csrf和xss的区别:

  • XSS是窃取你的Cookie,得到用户的权限,CSRF利用你的COOKIE,但是并没有拿到你的COOKIE
  • scrf借用用户的权限来完成攻击,由于完成csrf攻击需要具备条件比较多,所以很多时候csrf被视为安全级别较低的漏洞。

CSRF常见的3种方式:

1.图片攻击

<img src=http://xxxx.com/bank/transfer.php?nameid=200&balance=1000"width="0" height="0">

2.超链接

<a href="http://xxxx.com/bank/transfer.php?amount=1000&to=jianggang"taget="blank">点这里</a>

3.构建自动提交的表单,构建自动提交表单(隐藏),用户访问,发送post请求

<form action="http://xxx.com/withdraw" method=POST>
<input type="hidden"name="account" value="xiaoming" />
<input type="hidden" name="amount" value="1000" />
<input type="didden" name="to" value="jianggang" />
</form>
<script>document.forms[0].submit();</script>

CSRF的防御:

1.检查HTTP Referer是否是同源/同域
TCP包头中,存在来源地址,如果IP地址一样,则成为同源地址
2.限制session cookie 生命周期,减少被攻击的概率
3.使用验证码
4.使用一次性token

CSRF漏洞检测:

最简单最有效的方法就是抓取一个正常请求的数据包,去掉referer字段后再重新提交,如果该提交还有效,那么基本可以确定存在CSRF的漏洞

if(empty($_SESSION['token']))
1、当用户使用用户名密码登陆的时候,服务器随机下发token字段,并且把这个字段保存在服务器的session中。
2、客户端吧这个token保存起来,放到隐藏字段。
3、用户在登陆的状况下,在之后访问的时候,需要携带这个token字段。
4、服务器从session中拿出token值进行比较,如果一致就是合法的
5、用户退出,session销毁,token失效。
token值可以拿到,需要别的漏洞拿到token,结合xss漏洞拿到token,最安全的方法就是修改用户密码前让用户输入当前的密码,再比如使用验证码。

CSRF中的POST请求:

受害者需要登录账号密码
通过抓包,来确定HTTP请求中的POST主题内容,包含什么
攻击者通过构造恶意的站点,将POST主题内容编写为恶意的站点中的表单,然后诱骗受害者进行点击,当用户点击后发出表单,数据自然就POST到存在CSRF漏洞的网站,用户的信息则被恶意修改。

CSRF漏洞之token:

token验证原理:csrf主要问题是敏感操作时候链接容易被伪造,每次其你去,都会增加一个随机码(需要够随机,不容易被伪造),后台每次对随机码进行验证,页面接收从后台发送过来的token,将其一并提交给后台验证,每次刷新,token都不一样,就是起到了防止伪造。

ssrf(服务器端请求伪造)漏洞:

由攻击者构造形成的,有服务器发起的安全漏洞
一般情况下,SSRF攻击的目标是从外网无法访问的内部系统
(server-side requert forgery)是一种由攻击者构造形成由服务器端引起请求的一个安全漏洞,一般情况下,ssrf攻击的目标是从外网无法访问的内部系统,ssrf形成的原因大都是由于服务器端提供了从其他服务器应用获取数据的功能并且没有对目标地址做过滤与限制,比如从指定的URL地址获取网页文本内容,加载指定地址的图片,下载等等。
一般客户端直接访问不了内网资源的,但是服务端是可以访问内网资源的,要是服务端存在SSRF漏洞的话,客户端就可以利用SSRF漏洞,访问内网资源。
一般情况下,SSRF的目标就是与外部隔离的内网资源。

SSRF实现攻击主要有5种方式

1.对外网,服务器所在的内网,本地进行端口扫描,获取banner信息。
2.测试运行在内网或者本地的应用程序
3.对内网web应用记性指纹识别,识别企业内部的资产信息
4.攻击内外网的web应用,主要是使用http get请求就可以实现攻击(比如:struts2,sqli)
5.利用file协议读取本地文件等。

常用的探测协议:

1.http:主要用来发送http协议,获取超文本内容,包括文字,图片、视频、音频等常用的互联网资源
2.file:本地文件传输协议,file协议主要是用于访问本地计算机文件,就如同在windows资源管理器中打开文件一样。
3.dict:dict协议,字典服务器协议,dict基于查询响应的TCP协议,它的目标是超越webster protocol,并且允许客户端在使用的过程中访问更多字典,dict服务器和客户机使用TCP端口,2628;主要是用来探测内网端口协议
4.ftp:应用层的文件传输协议,基于TCP协议的应用层协议,用于在网络上传输文件
5.Gopher:是互联网上面使用的分布型,文件收集获取网络协议,gopher协议在http协议出现之前,在internet上面常见的重用协议。但是现在很少用了

产生在哪些方面?(SSRF漏洞常见的出现位置)

1.分享,通过URL地址分享网页内容
2.转码服务,通过URL地址,吧源地址网页内容调优使其适合及屏幕浏览
3.在线翻译,通过URL地址翻译对应文本内容
4.图片加载与下载:通过URL地址加载或者下载图片
5.图片、文章收藏功能
6.未公开的api实现以及其他调用URL的功能
7.从url的关键字中寻找 share、wap、url、link、src、source、target 、u、3g、display、sourceURL、imageURL、domain

SSRF的防御方法:

1.统一错误信息,避免用户根据错误信息来判断远程服务器的端口状态。
2.限制请求的端口为HTTP常用端口,比如80,443,8080等
3.禁用不需要的协议,仅仅允许http和https
4.根据请求需求,可以将特定的域名加入白名单,拒绝白名单之外的请求
5.后端代码对请求来源进行验证.

正常用户访问网站的流程:

1.输入A网站的URL
2.发送请求
3.A服务器接受请求(没有过滤),并且处理
4.返回用户响应
网站有个请求是www.yunanedu.com/xxx.php?image=URL
安全的网站,接收到请求后,检测请求的合法性。
产生漏洞的原因:服务器验证,并没有对其请求获取图片的参数image=作出严格的过滤以及限制,导致A网站可以从其他的服务器获取数据,
www.yunandui.com/xxx.php?image=www.baidu.com/i.jpg 如果我们吧image=www.baidu.com/i.jpg,换成服务器相连的内网服务器地址会产生什么效果呢?如果存在该内网地址则会返回1xx,2xx之类的状态码,不存在就会显示其他状态码。

SSRF漏洞就是通过篡改资源的请求发送给服务器,但是服务器并没有检测到这个请求的合法性,然后服务器以它的身份来访问其他的服务器资源。

SSRF常用的绕过方式:

1.更改IP地址的写法:将IP进行进制编码
2.利用解析URL所出现的问题:网址@IP,在某些情况下,后端程序可能会对访问的URL进行解析,对解析出来的host地址进行过滤,这时候可能会出现对URL参数解析不当,导致可以绕过过滤
3.利用302跳转
4.通过非HTTP协议,通过等价的协议,进行绕过
5.DNS
6.利用IPV6
7.利用IDN
8.短链接

更改IP地址的写法:
正则表达式

^10(\.([2][0-4]\d[2][5][0-5]|[01]?\d?\d)){3}$
^172\.([1][6-9]|[2]\d|3[01])(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){2}$
^192\.168(\.([2][0-4]\d[2][5][0-5]|[01]?\d?\d)){2}$

对于这种过滤的方法,我们采用改变IP的写法方式进行绕过,例如192.168.0.1这个IP地址我们已经改成
1.8进制格式:0300.0250.0.1
2.十六进制:0xC0.0xA8
3.十进制整数格式:3232235521
4.十六进制整数格式:0xC0A80001
特殊省略模式,例如,10.0.0.1这个IP可以写成 10.1

利用解析URL所出现的问题
访问服务器,服务器对访问的URL进行解析,对解析出来的HOST地址,进行过滤,可能会出现URL参数解析不当的情况,导致可以绕过过滤。
http://www.yunanedu.com@192.168.0.1/
分析:
服务器通过不正确的正则表达式,认为是访问请求的主机地址,而对这个URL的内容进行解析的时候,会被认为www.yunanedu.com为HOST主机地址,而实际,这个URL所请求的内容都是192.168.0.1服务器上面的内容

SSRF常用后端实现:

SSRF攻击可能存在任何语言编写的应用,通过PHP实现的代码来做样例分析,代码的大部分来自真实的应用源码。
1.file_get_contents:(将整个文件读入到一个字符串中)
这段代码使用file_get_contents(0函数从用户指定的URL获取图片,然后把它用一个随机文件名保存在硬盘上,并展示给用户。
file_get_contents()调用外部物文件容易超时报错,curl效率比file_get_contents()和fsockopen()高一些,原因是curl会自动对DNS信息进行缓存。
2.fsockopen():(打开网络的socket链接)

<?php
function GetFile($host,$port,$link) 
{ 
$fp = fsockopen($host, intval($port), $errno, $errstr, 30); 
if (!$fp) { 
echo "$errstr (error number $errno) \n"; 
} else { 
$out = "GET $link HTTP/1.1\r\n"; 
$out .= "Host: $host\r\n"; 
$out .= "Connection: Close\r\n\r\n"; 
$out .= "\r\n"; 
fwrite($fp, $out); 
$contents=''; 
while (!feof($fp)) { 
$contents.= fgets($fp, 1024); 
} 
fclose($fp); 
return $contents; 
} 
}
?>

这段代码使用了fsockopen()函数,实现了获取用户指定url的数据,(文件或者html),函数是用来socker跟服务器建立TCP链接,传输原始的数据。
fsockopen()是比较底层的调用,属于网络系统sockert调用
3.curl_exec():(执行一定的curl会话)

<?php
if (isset($_POST['url']))

{

$link = $_POST['url'];

$curlobj = curl_init();

curl_setopt($curlobj, CURLOPT_POST, 0);

curl_setopt($curlobj,CURLOPT_URL,$link);

curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);

$result=curl_exec($curlobj);

curl_close($curlobj);

$filename = './curled/'.rand().'.txt';

file_put_contents($filename, $result); 

echo $result;

}

?>

curl经过包装支持HTTPS认证,HTTP POST方法,HTTP PUT方法,FTP上传,berberos认证,HTTP上传,代理服务器,cookie,用户名\密码,下载文件,断点续传,上传文件断电速传,http代理服务器管道(porxy tunneling)甚至它还支持IPV6

socks5代理服务器,通过http代理服务器上传文件到ftp服务器,功能很强大。

文件包含漏洞
php://filter/读取php源代码。

结语:

对CSRF和SSRF做了一些简单介绍以及绕过,希望对各位师傅有帮助,供各位师傅们一起交流学习!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2232020.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Rust 力扣 - 1984. 学生分数的最小差值

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 原数组 nums 排序&#xff0c;遍历nums中下标为[0, nums.len() - k]的学生分数 假设当前遍历的下标为i则&#xff0c;以 i 下标为最小值的学生分数的最小差值为nums[i k - 1] - nums[i] 取最小差值的最小值即…

前端笔试新问题总结

记录总结下最近遇到的前端笔试新问题 目录 一、操作数组方法 1.Array.isArray(arr) 2.Object.prototype.toString.call(arr) "[object Array]" 3.arr instanceof Array 1&#xff09;跨帧问题 2&#xff09;修改Array.prototype 3&#xff09;模拟数组的对象…

HTML 基础标签——结构化标签<html>、<head>、<body>

文章目录 1. <html> 标签2. <head> 标签3. <body> 标签4. <div> 标签5. <span> 标签小结 在 HTML 文档中&#xff0c;使用特定的结构标签可以有效地组织和管理网页内容。这些标签不仅有助于浏览器正确解析和渲染页面&#xff0c;还能提高网页的可…

跳表原理笔记

课程地址 跳表是一种基于随机化的有序数据结构&#xff0c;它提出是为了赋予有序单链表以 O(logn) 的快速查找和插入的能力 创建 首先在头部创建一个 sentinel 节点&#xff0c;然后在 L1 层采用“抛硬币”的方式来决定 L0 层的指针是否增长到 L1 层 例如上图中&#xff0c;L…

Vision - 开源视觉分割算法框架 Grounded SAM2 配置与推理 教程 (1)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/143388189 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 Ground…

3674矢量网络分析仪-003噪声系数测量选件

3674X-003 噪声系数测量选件 3674系列矢量网络分析仪 综述 3674X-003噪声系数测量一次连接&#xff0c;可同时测试S参数、噪声系数、噪声参数、增益压缩和变频增益等多种参数。基于冷源噪声系数测试方法&#xff0c;可进行精确的噪声系数和噪声参数测试。 •特点 • 3674X…

DDRPHY数字IC后端设计实现系列专题之后端设计导入,IO Ring设计

本章详细分析和论述了 LPDDR3 物理层接口模块的布图和布局规划的设计和实 现过程&#xff0c;包括设计环境的建立&#xff0c;布图规划包括模块尺寸的确定&#xff0c;IO 单元、宏单元以及 特殊单元的摆放。由于布图规划中的电源规划环节较为重要&#xff0c; 影响芯片的布线资…

如何将MySQL彻底卸载干净

目录 背景&#xff1a; MySQL的卸载 步骤1&#xff1a;停止MySQL服务 步骤2&#xff1a;软件的卸载 步骤3&#xff1a;残余文件的清理 步骤4&#xff1a;清理注册表 步骤五:删除环境变量配置 总结&#xff1a; 背景&#xff1a; MySQL卸载不彻底往往会导致重新安装失败…

Vue生成名片二维码带logo并支持下载

一、需求 生成一张名片&#xff0c;名片上有用户信息以及二维码&#xff0c;名片支持下载功能&#xff08;背景样式可更换&#xff0c;忽略本文章样图样式&#xff09;。 二、参考文章 这不是我自己找官网自己摸索出来的&#xff0c;是借鉴各位前辈的&#xff0c;学以致用&am…

【AIGC】深入探索『后退一步』提示技巧:激发ChatGPT的智慧潜力

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;“后退一步”技巧介绍技巧目的 &#x1f4af;“后退一步”原理“后退一步”提示技巧与COT和TOT的对比实验验证 &#x1f4af;如何应用“后退一步”策略强调抽象思考引导提…

Python | Leetcode Python题解之第520题检测大写字母

题目&#xff1a; 题解&#xff1a; class Solution:def detectCapitalUse(self, word: str) -> bool:# 若第 1 个字母为小写&#xff0c;则需额外判断第 2 个字母是否为小写if len(word) > 2 and word[0].islower() and word[1].isupper():return False# 无论第 1 个字…

【python ASR】win11-从0到1使用funasr实现本地离线音频转文本

文章目录 前言一、前提条件安装环境Python 安装安装依赖,使用工业预训练模型最后安装 - torch1. 安装前查看显卡支持的最高CUDA的版本&#xff0c;以便下载torch 对应的版本的安装包。torch 中的CUDA版本要低于显卡最高的CUDA版本。2. 前往网站下载[Pytorch](https://pytorch.o…

Java日志脱敏——基于logback MessageConverter实现

背景简介 日志脱敏 是常见的安全需求&#xff0c;最近公司也需要将这一块内容进行推进。看了一圈网上的案例&#xff0c;很少有既轻量又好用的轮子可以让我直接使用。我一直是反对过度设计的&#xff0c;而同样我认为轮子就应该是可以让人拿去直接用的。所以我准备分享两篇博客…

Java面试经典 150 题.P26. 删除有序数组中的重复项(003)

本题来自&#xff1a;力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解&#xff1a; class Solution {public int removeDuplicates(int[] nums) …

Prometheus套装部署到K8S+Dashboard部署详解

1、添加helm源并更新 helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update2、创建namespace kubectl create namespace monitoring 3、安装Prometheus监控套装 helm install prometheus prometheus-community/prome…

如何选择到印尼的海运代理

如何选择到印尼的海运代理 选择合适的海运代理的重要性 海运代理负责安排货物从发货地到目的地的整个运输过程&#xff0c;包括装运、清关、仓储等服务。一个可靠的海运代理能确保货物安全准时到达&#xff0c;并帮助企业节省时间和成本。 选择海运代理需考虑的主要因素 公司…

python常用的第三方库下载方法

方法一&#xff1a;打开pycharm-打开项目-点击左侧图标查看已下载的第三方库-没有下载搜索后点击install即可直接安装--安装成功后会显示在installed列表 方法二&#xff1a;打开dos窗口输入命令“pip install requests“后按回车键&#xff0c;看到successfully既安装成功&…

FFmpeg 4.3 音视频-多路H265监控录放C++开发八,使用SDLVSQT显示yuv文件 ,使用ffmpeg的AVFrame

一. AVFrame 核心回顾&#xff0c;uint8_t *data[AV_NUM_DATA_POINTERS] 和 int linesize[AV_NUM_DATA_POINTERS] AVFrame 存储的是解码后的数据&#xff0c;&#xff08;包括音频和视频&#xff09;例如&#xff1a;yuv数据&#xff0c;或者pcm数据&#xff0c;参考AVFrame结…

jenkins 构建报错 Cannot run program “sh”

原因 在 windows 操作系统 jenkins 自动化部署的时候, 由于自动化构建的命令是 shell 执行的,而默认windows 从 path 路径拿到的 shell 没有 sh.exe &#xff0c;因此报错。 解决方法 前提是已经安装过 git WINR 输入cmd 打开命令行, 然后输入where git 获取 git 的路径, …

基于Spring Boot的高校物品捐赠管理系统设计与实现,LW+源码+讲解

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装高校物品捐赠管理系统软件来发挥其高效地信息处理的作用&a…