csrf漏洞与ssrf漏洞

环境:用kali搭建的pikachu靶场

一.CSRF

1.CSRF漏洞简介

跨站请求伪造(CSRF)漏洞是一种Web应用程序安全漏洞,攻击者通过伪装成受信任用户的请求来执行未经授权的操作。这可能导致用户在不知情的情况下执行某些敏感操作,如更改密码、发送消息等。要防止CSRF攻击,可以使用随机生成的令牌来验证每个请求的来源和合法性。

CSRF利用流程:攻击者发现CSRF漏洞-->构造代码-->发送给受害人-->受害人打开-->受害人执行代码-->完成攻击

CSRF利用条件

1.用到了cookie鉴权

2.被攻击方鉴权未过期

3.知道目标网站请求的详细信息

2.CSRF(Cross-Site Request Forgery)与XSS(Cross-Site Scripting)的不同

  1. CSRF攻击利用用户已经登录的身份,在用户不知情的情况下发送恶意请求,执行未经授权的操作。攻击者利用受害者的身份在受害者不知情的情况下执行操作,比如更改密码或发送消息。而XSS攻击则是通过在网页中注入恶意脚本,当用户访问包含这些脚本的页面时,攻击者可以获取用户的信息、劫持会话或者执行其他恶意操作。

  2. CSRF攻击是针对用户身份验证机制的漏洞,攻击者利用受害者已经登录的身份来执行操作;而XSS攻击是利用网站对用户输入的信任,将恶意脚本注入到网页中,从而获取用户信息或执行恶意操作。

3.例子

pikachu靶场
1.点击提示,登录vince用户
2.进入到这个页面
3.通过html伪造修改的请求

<form method="get" action="http://192.168.168.128/pik/vul/csrf/csrfget/csrf_get_edit.php">

<input type="text" name="sex" value="1234"></p>

<input class="phonenum" type="text" name="phonenum" value="123"></p>

<input class="add" type="text" name="add" value="123"></p>

<input class="email" type="text" name="email" value="1231"></p>

<input class="sub" type="submit" name="submit" value="submit">

</form>

4.用浏览器打开html文件
5.点击submit

发现页面跳转并修改用户的个人信息

注:如果点击修改个人信息后出现空白

说明PHP版本较高,需要修改一下文件

进入到/var/www/html/pik/vul/csrf/csrfget/目录,修改csrf_get_edit.php文件

删除第七十行MYSQL_ASSOC(因为PHP这个版本识别不了)

然后刷新就可以出来了

4.预防CSRF漏洞

  1. 同源验证(Same-Site Cookies):使用 SameSite 属性,可以限制浏览器只在请求源站点 (same-site) 发送 Cookie,从而减少 CSRF 的风险

  2. CSRF Token:在每个表单中包含一个随机生成的 token,并且验证这个 token,确保请求是来源于合法的网站而不是恶意网站

  3. 验证 Referer 头:在服务端检查 HTTP 头中的 Referer 字段,确保请求来自合法的来源网站

  4. 双重提交 Cookie:将 CSRF Token 既以 Cookie 形式存储,也作为隐藏字段的形式加入到表单中,以确保提交请求时两者匹配

  5. 自定义请求头:要求所有的请求都携带自定义的请求头,服务端验证该请求头来确认请求的合法性

  6. 限制敏感操作:在网站上进行敏感操作时,要求用户再次输入密码或进行其他形式的二次确认

  7. 保持安全的开发实践:确保网站的代码安全,遵循最佳实践,包括输入验证、输出编码、使用安全的密码哈希算法等

二.SSRF漏洞

1.SSRF漏洞简介

SSRF(Server-Side Request Forgery)漏洞是一种安全漏洞,攻击者可以利用该漏洞向服务器发起伪造的请求。这些请求伪装成服务器本身发起的请求,因此可以绕过一些安全控制,访问本地系统资源、其他服务器资源,甚至内部网络

SSRF漏洞通常出现在允许用户提供URL并在服务端进行请求的场景中,比如Web应用中的URL解析、文件上传功能、图片处理等。攻击者可以利用这些功能,提供指向内部系统或受信任的外部系统的URL,并执行一系列恶意操作。

攻击者可以利用SSRF漏洞实施以下攻击:

  1. 访问内部系统信息:攻击者可以利用SSRF漏洞访问内部服务器的敏感信息,如配置文件、日志等。

  2. 攻击本地系统:攻击者可以利用SSRF漏洞将服务器定向到恶意URL,执行各种攻击,如端口扫描、攻击本地服务等。

  3. 攻击内部系统:通过SSRF漏洞,攻击者可以攻击内部系统,从而导致数据泄露、服务拒绝或其他安全风险。

为了防止SSRF漏洞,开发者可以采取以下措施:

  1. 限制请求的目标:仅允许访问受信任的URL,可以通过白名单或者正则表达式进行过滤。

  2. 使用安全代理:通过安全代理或反向代理,限制请求的目标并过滤恶意请求。

  3. 使用URL白名单:限制应用程序可以访问的URL范围,避免访问内部网络。

  4. 验证用户提供的URL:对用户提供的URL进行验证和安全性检查,确保其合法性。

2.CSRF(Cross-Site Request Forgery)和SSRF(Server-Side Request Forgery)有什么不同

  1. CSRF (Cross-Site Request Forgery):

    • CSRF 是一种利用用户当前已经认证的会话,在用户不知情的情况下执行非法操作的攻击方式。
    • 攻击者通过欺骗受害者访问包含恶意代码的网页,使受害者在已认证的会话中执行未经授权的操作。
    • 主要针对的是用户的浏览器和其在目标网站上的已验证会话,常见于对在线银行账户、社交媒体账户等进行未经授权的操作。
  2. SSRF (Server-Side Request Forgery):

    • SSRF 是一种攻击,攻击者能够利用目标服务器上的漏洞,以服务器的身份执行未经授权的网络请求。
    • 攻击者通过向应用程序发送包含恶意 URL 的请求,利用服务器端的漏洞执行一些未经授权的操作,例如访问内部系统、执行端口扫描等。
    • SSRF 的危害范围更广泛,可以直接影响到服务器上的资源和其他内部系统,而不是仅仅利用用户的会话。

CSRF 主要针对用户会话,而 SSRF 则主要利用服务器漏洞

3.例子

file协议

文件协议(file protocol),通常表示为 "file://",是用于访问本地或网络文件系统中文件和目录的 URL 方案。当浏览器或应用程序遇到以 "file://" 开头的 URL 时,它会理解需要访问的资源位于本地文件系统而不是互联网上。

例如,如果您有一个名为 "example.html" 的文件位于目录 "C:\Users\YourName" 中,您可以使用文件协议来访问它,像这样:

复制代码

file:///C:/Users/YourName/example.html

这将在您的默认 Web 浏览器中打开 "example.html" 文件。类似地,您可以使用文件协议来访问其他类型的文件,如图像、文本文档,甚至目录。然而,需要注意的是,使用文件协议可能会带来安全隐患,特别是当从不受信任的来源访问文件时,由于潜在的安全漏洞。

gopher协议

gopher协议是http出现之前,在internet上常见的且常用的协议

gopher协议可以做很多事情,特别是在SSRF中可以发挥很多重要的作用,利用此协议可以攻击内网的FTP,Telnet,Redis,Memcache,也可以进行GET,post请求

gopher://host:port/数据流

数据流第一个字符会被吞掉,所以第一个字符通常用_

换行符要用%0d%0a

?符号也要进行URL编码

nc -lvvp 888 #监听888端口

curl gopher://127.0.0.1:888/abc #使用gopher协议请求访问资源

发现监听到的第一个字符被吞掉需要再前面加一个_

dict协议

"dict 协议" 是一种用于在计算机网络上查询词典和参考资料的协议。它允许用户通过网络连接到远程词典服务器,并以特定的格式发送查询请求,然后接收并解析服务器返回的结果。dict 协议通常使用 TCP 或 UDP 连接,通常在端口 2628 上。

通过 dict 协议,用户可以查询词典、百科全书、单词释义等参考资料,并获得相关的定义、解释、用法等信息。dict 协议的查询通常基于一组事先定义好的规范和格式,这使得不同的词典服务器可以共同遵循相同的协议,以便客户端能够在不同的服务器上执行相似的查询操作。

file_get_contents()函数

根据关卡名字,可以看到会利用file_get_content函数,上面概述中有介绍这个函数的作用是把整个文件读入一个字符串中!读取时支持file协议和http协议以及php伪协议

file协议读到php源码后,无法采用file协议获取源码想要获取源码 可以通过php伪协议将代码编码一下才能获取代码

php://fi1ter/read=convert.base64-encode/resource=../../index.php

注:如果点击这里出现白屏

说明php-curl依赖没有下载

apt update #更新包管理器

apt install php-curl #下载php-curl依赖

systemctl restart apache2 #重启apache2

重新访问就有内容了

相关推荐
互联网安全研究院1 分钟前
盘点 | 2024上半年国内数据安全事件
网络·安全
聪明的小脑袋瓜儿26 分钟前
网络安全设备——防火墙
网络·web安全·网络安全·防火墙
kinlon.liu1 小时前
基于 Nginx + Spring Boot + Vue + JPA 的网站安全防护指南
网络·vue.js·spring boot·nginx·安全
天下是个小趴菜2 小时前
蚁剑编码器编写——上篇
安全·web安全
网络研究院2 小时前
Rejetto HFS 服务器存在严重漏洞受到攻击
运维·服务器·安全·黑客·漏洞·警告·hfs
小小工匠2 小时前
加密与安全_ 解读非对称密钥解决密钥配送问题的四个方案
安全·非对称密钥
繁星日月3 小时前
利用docker搭建漏洞环境,使用SSRF+Redis写入centos以及ubuntu的公钥,实现免密登录
redis·安全·ubuntu·docker·容器·centos·渗透
炫酷的伊莉娜4 小时前
【网络安全】实验一(网络拓扑环境的搭建)
安全·web安全
勤奋的懒羊羊~5 小时前
网络安全概述
安全·web安全
WolvenSec8 小时前
网络基础:EIGRP
运维·网络·安全·智能路由器