毕业实习-第六次作业

目录

一.CSRF和XSS的区别

二.CSRF攻击步骤

三.CSRF手工构造POST型页面

四.token类CSRF利用

csrf token tracker——BurpSuite工具

潜在的弱点与利用方法

五.SSRF常用伪协议

常用伪协议

file://

dict://

ftp://

sftp://

tftp://

http://

ldap://

gopher://

表格总结

六.pikachu_SSRF

curl

file_get_content

七.SSRF靶场通关时根据源代码说明漏洞成因

curl靶场-源码分析

file_get_content靶场-源码分析


1.总结CSRF和XSS区别

2.总结CSRF攻击步骤

3.总结CSRF手工构造POST型页面方法

4.说明token类CSRF利用方法

5.SSRF常用伪协议

6.SSRF pikachu靶场通关

7.SSRF靶场通关时根据源代码说明漏洞成因

一.CSRF和XSS的区别

CSRF(跨站请求伪造)是一种网络攻击方式,它允许攻击者诱导受害者在不知情的情况下,以受害者的身份向受信任的网站发送恶意请求
XSS(跨站脚本攻击)是一种代码注入攻击,它允许攻击者在受害者的浏览器中执行恶意脚本

特性

CSRF(跨站请求伪造)

XSS(跨站脚本攻击)

定义

攻击者诱导受害者在不知情的情况下,以受害者的身份向受信任的网站发送恶意请求

攻击者向网站注入恶意脚本代码,这些脚本在用户的浏览器中执行,以达到恶意目的

攻击方式

利用网站对用户身份验证的依赖,通过伪造请求来冒充用户进行操作

利用网站对用户输入处理不当的漏洞,注入并执行恶意脚本

攻击目标

执行用户未授权的请求,如转账、更改密码等

窃取用户的敏感信息、执行恶意操作或进行钓鱼攻击

利用漏洞

网站对身份验证的依赖以及浏览器自动发送认证信息的机制

网站对用户输入数据的处理不当,没有充分过滤或转义

防御措施

1. 使用CSRF令牌
2. 验证HTTP Referer
3. 使用POST代替GET(对于敏感操作)
4. 设置SameSite Cookie属性

1. 对用户输入进行严格的过滤和转义
2. 使用HTTPOnly和Secure标志的Cookie
3. 设置合适的Content-Type
4. 实施内容安全策略(CSP)

影响范围

主要影响用户的账户安全和隐私,可能导致财产损失

不仅影响用户账户安全,还可能影响整个网站的安全性和稳定性,如执行恶意代码、传播蠕虫等

攻击手段

诱导用户点击恶意链接或访问恶意网站,自动发送伪造请求

注入恶意脚本到网站页面,当其他用户访问时执行

隐蔽性

较高,用户往往不易察觉

取决于攻击者的技巧和网站的安全措施,有时也具有较高的隐蔽性

二.CSRF攻击步骤

  1. 用户登录受信任网站A
    用户C打开浏览器,访问受信任的网站A,并输入用户名和密码请求登录。
    网站A验证用户信息后,生成Cookie信息并返回给浏览器。此时用户成功登录网站A,并可以正常发送请求到网站A。
  2. 用户访问恶意网站
    在用户未退出网站A之前,在同一浏览器中,用户打开一个新的标签页或窗口访问恶意网站B
    网站B可能是一个攻击者构建的网站,用于诱导用户进行某些操作或浏览特定内容。
  3. 恶意网站发送请求
    网站B接收到用户请求后,返回一些攻击性代码(如HTML、JavaScript等)。
    这些攻击性代码会构造一个请求,要求浏览器访问第三方站点A(即用户之前登录的受信任网站)。
  4. 用户浏览器携带Cookie发送请求
    浏览器在接收到这些攻击性代码后,会根据网站B的请求,在用户不知情的情况下携带之前从网站A获取的Cookie信息,向网站A发出请求。
    由于浏览器之前已经认证过网站A,因此网站A会接受这个请求,并认为它是来自用户的合法请求
  5. 网站A处理请求
    网站A根据用户C的Cookie信息以C的权限处理该请求,执行恶意代码所指定的操作(如转账、发送消息、修改账户信息等)。
    这些操作对服务器来说是合法的,因为它们看起来像是用户自己发起的请求,但实际上是由攻击者通过恶意网站B控制的。
  6. 攻击成功
    一旦网站A执行了恶意代码所指定的操作,攻击者就达到了他们的目的,如窃取用户信息、转移资金等。

三.CSRF手工构造POST型页面

  1. 确定目标URL和POST参数
    首先,需要确定CSRF攻击的目标URL以及该URL在POST请求中期望接收的参数。这通常可以通过分析受攻击网站的HTML表单、使用网络抓包工具(如Burp Suite)拦截并分析正常用户的POST请求来完成。
  2. 创建HTML表单
    使用HTML和JavaScript创建一个表单,该表单的action属性设置为目标URL,method属性设置为POST。在表单内部,为每个需要提交的POST参数创建一个<input>标签,并设置其name属性为目标参数名,value属性为攻击者希望提交的值,或者在某些情况下,使用JavaScript动态设置这些值。
    例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>菜鸟驿站</title>
</head>
<body>
    <form action="http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php" method="post">
        <input type="hidden" name="sex" value="1">
        <input type="hidden" name="phonenum" value="1">
        <input type="hidden" name="add" value="1">
        <input type="hidden" name="email" value="1">
        <input type="hidden" name="submit" value="submit">
        <input type="submit" value="查看取件码">
    </form>
</body>
</html>
  1. 诱导用户访问该页面
    攻击者需要将这个包含恶意表单的HTML页面以某种方式诱导用户访问。这可以通过发送电子邮件、在社交媒体上分享链接、或者利用其他网站上的漏洞(如XSS漏洞)来嵌入这个页面。
  2. 用户浏览器提交表单
    当用户访问这个恶意页面时,由于表单是隐藏的并且包含JavaScript代码来自动提交表单,用户的浏览器会在用户不知情的情况下向目标URL发送POST请求,并包含攻击者预先设定的参数值。
  3. 攻击成功
    如果目标网站没有适当的CSRF防护措施(如CSRF Token验证),那么它将接受这个请求,并认为它是来自用户的合法请求,从而执行相应的操作(如更改用户密码、转账等)。

四.token类CSRF利用

csrf token tracker——BurpSuite工具

csrf token tracker可以自动获取csrf的token,对于一些有csrf限制的请求,它可以绕过该限制,如暴力破解具有csrf token的登录请求,在渗透测试过程中CSRF Token的自动更新,以pikachu靶场的token型csrf为例

1.burpsuite 安装并启用 csrf token tracker

2.抓包放到重放器,开启跟随重定向

3.赋值当前token,配置csrf token tracker

4.更改参数,重放,即可修改信息

5.查看CSRF Token Tracker自动识别到的Token值,之后每次提交的重放都会自动识别并填充token值来实现绕过的目的

潜在的弱点与利用方法
  • Token泄露
    如果Token被存储在客户端的某个位置(如localStorage),并且该位置可以被跨站脚本(XSS)攻击所访问,那么攻击者可能会窃取Token。一旦Token被窃取,攻击者就可以构造包含该Token的恶意请求来执行CSRF攻击。
    防御措施:确保Token不存储在容易受到XSS攻击的位置,如localStorage。可以考虑使用HttpOnly的Cookie来存储Token,这样JavaScript就无法访问它。
  • Token预测或重用
    如果Token的生成算法不够复杂,或者Token被重复使用(例如,在多个请求中使用相同的Token),那么攻击者可能会尝试预测或重用Token。
    防御措施:使用足够复杂的算法来生成Token,并确保每个请求都使用唯一的Token。
  • Token验证逻辑漏洞
    如果服务器端的Token验证逻辑存在漏洞(例如,没有正确验证Token的来源或有效性),那么攻击者可能会构造绕过验证的恶意请求。
    防御措施:确保服务器端的Token验证逻辑是健壮的,并且对所有请求都进行严格的验证。

总结:Token机制是防御CSRF攻击的有效手段之一,但并非万无一失。为了确保网站的安全性,除了使用Token机制外,还需要结合其他安全措施(如HTTPS、XSS防御等)来构建全面的安全防御体系。同时需要密切关注Token机制的实现细节和潜在弱点,并采取相应的防御措施来降低被攻击的风险。

五.SSRF常用伪协议

伪协议是一种特殊的URL格式或语法,用于访问不同的资源或执行特定的操作。这些伪协议通常不直接对应网络上的实际协议,而是提供了一种便捷的方式来处理各种输入输出操作,如读取文件、处理数据流等,而不必依赖于实际的文件或网络资源路径。

常用伪协议
file://

从文件系统中获取文件内容

  • file:///etc/passwd 读取文件passwd【这个文件用于存储系统的用户信息,包括用户的用户名,用户ID,组ID(GID),用户的根目录,默认的shell等信息】
  • file:///etc/hosts 显示当前操作系统网卡的IP【这个文件存储着映射关系,这些映射关系可能是将主机名映射到内部IP地址用于访问内网,也可能是映射到公网IP来访问公网。简单来说,可以利用它看到当前主机的IP地址】
  • file:///proc/net/arp 显示arp缓存表(寻找内网其他主机)【在能够从局域网中其中一台主机向其余主机发送信息的前提下,通过爆破的方法向其余主机发起连接请求,这样就可以再通过查看/proc/net/arp来查看局域网中还有哪些其它主机】
  • file:///proc/net/fib _trie 显示当前网段路由信息
dict://

字典服务协议,访问字典资源

dict 协议最初是为 UNIX 和类 UNIX 系统设计的,用于从远程服务器上查询词典或字典内容。在互联网上存在一些公共的 dict 服务器,允许用户通过 dict 协议查询广泛的词典资源。

dict://ip.端口号//info 可以进一步探查ip的某个端口是否开着。

一句话:dict伪协议最主要是查找内网主机开放端口

ftp://

可用于网络端口扫描,效率相对较低

使用ftp://同样利用burpsuite对内网依次扫描

查找内网主机开放端口

sftp://

SSH文件传输协议或安全文件传输协议

tftp://

简单文件传输协议

http://

http://ip(:端口)/文件名 用于在获取了存活IP和端口之后进一步扫描其下的文件目录

作用:常规URL形式,允许通过HTTP 1.0的GET方法,以只读访问文件或资源。

ldap://

轻量级目录访问协议

gopher://

分布式文档传输协议

gopher 协议是早期互联网上的一种文档检索协议,与 HTTP 类似,但它更加简单和结构化

基本格式:gopher://<目标IP>:<端口>/<gopher-path>

表格总结

常用伪协议

描述

在SSRF漏洞利用中的作用

file://

用于访问本地计算机中的文件

读取敏感文件:攻击者可以构造包含file协议的URL,通过服务器读取本地敏感文件,如/etc/passwd

(Linux系统上的用户账户信息文件)或C:\Windows\win.ini

(Windows系统上的配置文件)等。

dict://

用于查询字典服务

探测内网主机和端口:通过构造包含dict协议的URL,攻击者可以探测内网主机的开放端口和获取服务的指纹信息,甚至在某些情况下执行命令(如Redis未设密码时)。

ftp://

文件传输协议(File Transfer Protocol),用于文件上传和下载

文件传输和利用:尽管ftp协议本身在SSRF中的直接利用较为有限,但攻击者可能通过ftp协议在特定条件下(如存在CRLF注入)进行文件传输或执行其他攻击。

sftp://

SSH文件传输协议(SSH File Transfer Protocol),安全文件传输协议

安全文件传输:sftp是ftp的安全版本,通过SSH加密通信。在SSRF中,其利用方式与ftp类似,但更加安全,攻击者可能尝试利用sftp进行文件传输,但难度较高。

tftp://

简单文件传输协议(Trivial File Transfer Protocol),基于lockstep机制的文件传输协议

文件获取和上传:攻击者可能通过tftp协议从远程主机获取文件或将文件上传至远程主机,这在SSRF攻击中可能用于数据泄露或恶意文件上传。

http://

超文本传输协议(HyperText Transfer Protocol),用于互联网上的数据传输

访问内网资源:通过构造包含http协议的URL,攻击者可以访问内网资源,获取敏感信息或进行其他形式的攻击。

ldap://

轻量级目录访问协议(Lightweight Directory Access Protocol),用于访问和管理分布式目录信息服务

LDAP注入:在SSRF中,ldap协议可能被用于LDAP注入攻击,攻击者可以将LDAP请求重定向到恶意LDAP服务器,导致信息泄露、远程代码执行等安全问题。

gopher://

分布式文档传递服务,允许用户无缝地浏览、搜索和检索信息

利用服务端作为代理:gopher协议在SSRF中可用于构造复杂的请求,利用服务端作为代理访问远程资源或执行命令。然而,由于gopher协议的使用条件较为苛刻,其实际利用难度较高。

六.pikachu_SSRF

curl

curl是一个非常实用的、用来与服务器之间传输数据的工具

支持的协议包括 (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP),curl设计为无用户交互下完成工作

1.发现网址

2.改为百度的网址,发现可访问页面

3.本地新建文件,使用file伪协议访问该文件

file_get_content

file_get_contents() 把整个文件读入一个字符串中。该函数是用于把文件的内容读入到一个字符串中的首选方法,如果服务器操作系统支持,还会使用内存映射技术来增强性能。

语法file_get_contents(path,include_path,context,start,max_length)

参数描述

  • path 必需。规定要读取的文件。
  • include_path 可选。如果您还想在 include_path(在 php.ini 中)中搜索文件的话,请设置该参数为 '1'。
  • context 可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。若使用 NULL,则忽略。
  • start 可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 中新增的。
  • max_length 可选。规定读取的字节数。该参数是 PHP 5.1 中新增的。

1.发现file地址

2.file协议读取本地文件

七.SSRF靶场通关时根据源代码说明漏洞成因

curl靶场-源码分析

源码

可以看出服务端没有将传入的url进行校验,而是直接使用传入的url值,使用curl_exec()函数通过PHP对数据进行获取,并且输出返回,明显存在服务端请求伪造,没有对前端的URL进行白名单的过滤

漏洞成因:服务端对用户输入的URL缺乏有效过滤和验证,就可能允许恶意URL或IP地址的输入。

file_get_content靶场-源码分析

源码

使用PHP函数file_get_content()读取文件且未进行白名单过滤

漏洞成因:服务端未对URL进行严格的过滤和验证,也未对响应结果进行有效处理【函数file_get_content()不仅可以读取本地文件系统的文件,还可以通过读取远程文件的内容】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值