皮卡丘XXE/URL重定向/SSRF

news2024/12/23 9:59:17

一.XXE

1.概述

XXE -"xml external entity injection"
既"xml外部实体注入漏洞"。
概括一下就是"攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行,导致问题"
也就是说服务端接收和解析了来自用户端的xml数据,而又没有做严格的安全控制,从而导致xml外部实体注入。
现在很多语言里面对应的解析xml的函数默认是禁止解析外部实体内容的,从而也就直接避免了这个漏洞。
以PHP为例,在PHP里面解析xml用的是libxml,其在≥2.9.0的版本中,默认是禁止解析xml外部实体内容的。

那么什么是xml呢?

XML是可扩展的标记语言(eXtensible Markup Language),设计用来进行数据的传输和存储, 结构是树形结构,有标签构成,这点很像HTML语言。但是XML和HTML有明显区别如下:

XML 被设计用来传输和存储数据。
HTML 被设计用来显示数据。

2.过关 

看提示我们需要了解这些基础知识

第一部分:XML声明部分
<?xml version="1.0"?>
 
第二部分:文档类型定义 DTD
<!DOCTYPE note[ 
<!--定义此文档是note类型的文档-->
<!ENTITY entity-name SYSTEM "URI/URL">
<!--外部实体声明-->
]>
 
第三部分:文档元素
<note>
<to>Dave</to>
<from>Tom</from>
<head>Reminder</head>
<body>You are a good man</body>
</note>

其中,DTD(Document Type Definition,文档类型定义),用来为 XML 文档定义语法约束,可以是内部申明也可以使引用外部DTD。

XML中对数据的引用称为实体,实体中有一类叫外部实体,用来引入外部资源,有SYSTEM和PUBLIC两个关键字,表示实体来自本地计算机还是公共计算机,外部实体的引用可以借助各种协议,比如如下的三种

file:///path/to/file.ext
http://url
php://filter/read=convert.base64-encode/resource=conf.php

回到题目,随意输入123

简单判断一下内部实体,输入:

<?xml version="1.0"?> 
<!DOCTYPE ANY [    
<!ENTITY xxe "菜鸟" > ]> 
<a>&xxe;</a>

发现有回显

查看本地文件(外部实体),输入:

<?xml version="1.0"?>
<!DOCTYPE ANY [
     <!ENTITY xxe SYSTEM "file:///c:/windows/win.ini"> ]>
<a>&xxe;</a>

同样有回显

原理就是通过输入其他XML代码来获取相关信息,其他例如远程代码执行、xxe联动ssrf、探测内网端口(需要用到虚拟机)的相关代码还需以后深度学习!

查看源码:

发现第49行simplexml_load_string()函数中使用了LIBXML_NOENT参数,导致外部实体可以被解析,才造成了xxe漏洞

二.URL重定向

1.概述

不安全的url跳转
不安全的url跳转问题可能发生在一切执行了url地址跳转的地方。
如果后端采用了前端传进来的(可能是用户传参,或者之前预埋在前端页面的url地址)参数作为了跳转的目的地,而又没有做判断的话
就可能发生"跳错对象"的问题。

url跳转比较直接的危害是:
-->钓鱼,既攻击者使用漏洞方的域名(比如一个比较出名的公司域名往往会让用户放心的点击)做掩盖,而最终跳转的确实钓鱼网站

2.过关

进入题目,发现有四句话,分别点一下

第一句和第二句都没反应,第三句返回到了URL重定向概述界面

第四句,有回显,如下,还发现url多了个“url=i”

F12查看前段代码,发现了原因,其他的都是空白,唯有第四句有内容

我们将url后面的内容修改一下,比如构造payload:

127.0.0.1/pk/vul/urlredirect/urlredirect.php?url=http://www.baidu.com

成功跳转到百度!

利用这个漏洞,我们可以上传其他的恶意url,让其跳转!

查看源码:

用户可控的参数没有被好好过滤(通过GET请求获取前端传进来的url,判断一下,当url参数的值不为i时,就会跳转到url值表示的页面,这就存在着问题。) 

三.SSRF

1.概述

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

其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制

导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据

数据流:攻击者----->服务器---->目标地址

根据后台使用的函数的不同,对应的影响和利用方法又有不一样

PHP中下面函数的使用不当会导致SSRF:

file_get_contents()

fsockopen()

curl_exec()
如果一定要通过后台服务器远程去对用户指定("或者预埋在前端的请求")的地址进行资源请求,则请做好目标地址的过滤。

2.SSRF(curl)

进入题目,让我们了解一下curl函数

那就“浅浅”地了解一下吧!

curl_close()    关闭一个cURL会话。
curl_copy_handle()    复制一个cURL句柄和它的所有选项。
curl_errno()    返回最后一次的错误号。
curl_error()    返回一个保护当前会话最近一次错误的字符串。
curl_escape()    返回转义字符串,对给定的字符串进行URL编码。
curl_exec()    执行一个cURL会话。
curl_file_create()    创建一个 CURLFile 对象。
curl_getinfo()    获取一个cURL连接资源句柄的信息。
curl_init()    初始化一个cURL会话。
curl_multi_add_handle()    向curl批处理会话中添加单独的curl句柄。
curl_multi_close()    关闭一组cURL句柄。
curl_multi_exec()    运行当前 cURL 句柄的子连接。
curl_multi_getcontent()    如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流。
curl_multi_info_read()    获取当前解析的cURL的相关传输信息。
curl_multi_init()    返回一个新cURL批处理句柄。
curl_multi_remove_handle()    移除curl批处理句柄资源中的某个句柄资源。
curl_multi_select()    等待所有cURL批处理中的活动连接。
curl_multi_setopt()    设置一个批处理cURL传输选项。
curl_multi_strerror()    返回描述错误码的字符串文本。
curl_pause()    暂停及恢复连接。
curl_reset()    重置libcurl的会话句柄的所有选项。
curl_setopt_array()    为cURL传输会话批量设置选项。
curl_setopt()    设置一个cURL传输选项。
curl_share_close()    关闭cURL共享句柄。
curl_share_init()    初始化cURL共享句柄。
curl_share_setopt()    设置一个共享句柄的cURL传输选项。
curl_strerror()    返回错误代码的字符串描述。
curl_unescape()    解码URL编码后的字符串。
curl_version()    获取cURL版本信息。

回到题目

点击那句话,出现了一首诗,还发现清楚地显示了url

因此,我们可以利用curl支持的多种协议来探测服务器内网信息:

这里只展示file协议和http/https协议,如:

file协议

查看本地文件:?url=file:///c:/windows/win.ini

又又又又把ini文件搞出来了! 

http/https协议

这是我之前用phpstudy-pro创建出的一个网站

将url改为内网上的其他主机,  (使用http协议)端口为80

http://127.0.0.1/pk/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1:80

成功回显Hello world

3.SSRF(file_get_content)

看起来和上关差不多,看提示说要我们了解一下 file_get_content()相关函数的用法

那就再“浅浅”地了解一下哇!

file_get_contents() 函数将指定 URL 的文件读入一个字符串并返回。

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

函数结构:  file_get_contents(path,include_path,context,start,max_length)

path:要读取的路径或链接。
include_path:是否在路径中搜索文件,搜索则设为 1,默认为 false。
context:修改流的行为,如超时时间,GET / POST 等。
start:开始读文件的位置。
max_length:读取文件的字节数。
file_get_contents 和 curl 区别:

curl 支持更多协议,有http、https、ftp、gopher、telnet、dict、file、ldap;模拟 Cookie 登录,爬取网页;FTP 上传下载。

fopen / file_get_contents 只能使用 GET 方式获取数据。

curl 可以进行 DNS 缓存,同一个域名下的图片或其它资源只需要进行一次DNS查询。

curl 相对来说更加快速稳定,访问量高的时候首选 curl,缺点就是相对于 file_get_contents 配置繁琐一点,file_get_contents 适用与处理小访问的应用。

回到题目

再点击那句话,同样出现了一首诗,不同的是,上面的“url”变为了“file”

还是先file协议进行文件读取:

本地文件 payload:?file=file:///c:/windows/win.ini

又又又又把ini文件弄出来了! 

再来试试将file改为内网上的其他主机,  (使用http协议)端口为80

payload:http://127.0.0.1/pk/vul/ssrf/ssrf_fgc.php?file=http://127.0.0.1/

Hello World!

同理,还有利用其他的协议就以上两题对url/file进行修改,来得到我们想要的信息!

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

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

相关文章

chatgpt赋能python:Python升级所有包:一步引导所有Python开发者升级你的Python环境

Python升级所有包&#xff1a;一步引导所有Python开发者升级你的Python环境 Python作为一种动态的编程语言&#xff0c;一直在不断发展和更新。每个Python版本都有自己的新功能和改进。因此&#xff0c;许多Python开发者在使用Python时都会尝试升级到最新的版本。但是&#xf…

论文笔记--Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context

论文笔记--Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context 1. 文章简介2. 文章概括3 文章重点技术3.1 Segment-Level Recurrence with State Reuse3.2 相对位置编码 4. 文章亮点5. 原文传送门 1. 文章简介 标题&#xff1a;Transformer-XL: Attent…

Spring集合

目录 SpringSpring简介Spring概述Spring FrameworkSpring Framework特征 IOC1、IOC的思想(1)传统方式的获取资源(2)控制反转方式的获取资源(3)DI 2、IOC 容器的两种实现BeanFactoryApplicationContext 基于XML管理bean1.创建Maven2.引入依赖3.创建HelloWorld.Java类4.创建sprin…

【Java】单例设计模式-饿汉模式和懒汉模式

单例模式概念如何设计 饿汉模式懒汉模式分析造成线程不安全的原因解决方法 总结 单例模式 概念 单例是一种设计模式。单例指的是在全局范围内只有一个实例对象。比如在学习JDBC编码时使用的DataSource&#xff0c;定义了数据库的用户名&#xff0c;密码和连接串&#xff0c;定…

以太网交换机自学习和转发帧的流程

以太网交换机自学习和转发帧的流程 笔记来源&#xff1a; 湖科大教书匠&#xff1a;以太网交换机自学习和转发帧的流程 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 以太网交换机工作在数据链路层&#xff08;也包括物理层&#xff09; 以太网交…

大数据处理领域的经典框架:MapReduce详解与应用【上进小菜猪大数据】

上进小菜猪&#xff0c;沈工大软件工程专业&#xff0c;爱好敲代码&#xff0c;持续输出干货。 MapReduce是一个经典的大数据处理框架&#xff0c;可以帮助我们高效地处理庞大的数据集。本文将介绍MapReduce的基本原理和实现方法&#xff0c;并给出一个简单的示例。 一、MapR…

文件上传漏洞、XSS漏洞、RCE漏洞

文件上传漏洞 1.定义&#xff1a;指用户上传了一个可执行的脚本文件&#xff08;常见头像&#xff0c;简历&#xff0c;资源&#xff0c;附件&#xff0c;编辑器&#xff09;&#xff0c;并通过此脚本文件获得了执行服务器端命令的能力。 2.所需条件 &#xff08;1&#xff0…

什么是“支付二清”,“二清”的定义

“二清”的定义&#xff1a; 支付行业的"二清"是指二次清算&#xff0c;也称为二级清算。在支付行业中&#xff0c;清算是指在交易完成后&#xff0c;将资金从付款人账户转移到收款人账户的过程。一级清算通常由银行完成&#xff0c;而二级清算则是指由支付机构或清…

正则表达式命令

文章目录 一.基础命令1.grep命令1.1grep格式1.2grep命令选项 2.特殊的符号2.1空行——^$2.2以什么为开头—^,以什么为结尾—$2.2.1以什么为开头的格式&#xff1a;2.2.2以什么为结尾的格式&#xff1a; 3.只匹配单行——^匹配的字符$ 二.文本处理命令1.sort命令1.1命令解释及格…

打电话用什么耳机好,推荐几款性能表现高的骨传导耳机

近几年有一种新型传播方式的耳机&#xff0c;将声音转化为振动&#xff0c;从而让我们的听觉神经感知到。这种声音传播方式叫做"骨传导"&#xff0c;所以叫做骨传导耳机。因为它不需要通过耳膜进行传播声音&#xff0c;所以可以让耳朵在不接触外界的情况下听到声音。…

SpringCloud(四)

文章目录 Ribbon负载均衡负载均衡原理源码跟踪1&#xff09;LoadBalancerIntercepor2&#xff09;LoadBalancerClient3&#xff09;负载均衡策略IRule4&#xff09;总结 Ribbon负载均衡 在springcloud&#xff08;三&#xff09;中&#xff0c;我们添加了LoadBalanced注解&…

Burp模块

Target模块 记录流量 1.Target按主机或域名分类记录 2.HTTP History 按时间顺序记录且会记录很多次 3.Target模块的作用 &#xff08;1&#xff09;把握网站的整体情况 &#xff08;2&#xff09;对一次工作的域进行分析 &#xff08;3&#xff09;分析网站存在的攻击面 …

day 38,509. 斐波那契数70. 爬楼梯;# 746. 使用最小花费爬楼梯

动态规划 五步分析509. 斐波那契数1. dp数组以及下标名义2. 递归公式3. dp数组如何初始化4. 遍历顺序&#xff08;背包问题先遍历背包还是物品&#xff09;5. 打印dp数组&#xff1a;debug6.代码 70. 爬楼梯1. dp数组以及下标名义2. 递归公式3. dp数组如何初始化4. 遍历顺序5. …

idea部署Tomcat

创建Web项目 我们首先使用IDEA创建一个普通的java项目 创建好后的项目结构如上图&#xff0c;我创建的项目名称为tomcat&#xff0c;这个项目现在还是一个普通的java项目&#xff0c;想要开发web程序&#xff0c;我们还要做一下操作&#xff0c;首先我们先给项目添加依赖 首先…

皮卡丘Unsafe Fileupload

1.不安全的文件上传漏洞概述 文件上传功能在web应用系统很常见&#xff0c;比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后&#xff0c;后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等&#xff0c;然后将其按照设计的格式进行…

chatgpt赋能python:Python升序数函数:从入门到实战

Python升序数函数&#xff1a;从入门到实战 Python是一门广泛应用于软件开发、数据分析、人工智能等领域的高级编程语言。其中&#xff0c;对数值类型的处理尤为突出&#xff0c;而Python中提供了许多方便实用的数学函数来支持数值类型的计算。本篇文章将主要介绍Python中如何…

皮卡丘存储型xss、DOM型xss、DOM型xss-x

1.存储型xss 看题目&#xff0c;我们先留言&#xff0c;看它的过滤机制 发现可以永久存储并输出我们的留言 之后插入payload: <script>alert(xss)</script> 成功弹窗&#xff01; 2.DOM型xss Dom型xss&#xff0c;简单的说&#xff0c;就是向文档对象传入xss参…

ODOO随笔(一)—— Odoo 16的docker部署以及vscode环境配置

之前一直使用Odoo源码配置开发环境&#xff0c;安装的步骤比较多&#xff0c;费时。趁着升级到16版本的机会&#xff0c;尝试使用docker快速配置Odoo的VSCode开发环境。 1 系统环境 &#xff08;1&#xff09;操作系统&#xff1a;ubuntu 20.04 Alternative downloads | Ubu…

高完整性系统(1)Introduction

文章目录 什么是 formal methods案例1&#xff1a;造影机器案例2&#xff1a; 特斯拉汽车的自动驾驶功能案例3&#xff1a;空客 320案例4&#xff1a;波音737 什么是 formal methods “Formal methods” 是计算机科学中的一个术语&#xff0c;它指的是一种使用数学模型和技术来…

chatgpt赋能python:Python匹配空格

Python匹配空格 在Python中&#xff0c;空格是一个常见的字符&#xff0c;在字符串和文本处理中非常常见。但是&#xff0c;在某些情况下&#xff0c;我们需要匹配字符串中的空格&#xff0c;这个时候就需要使用Python匹配空格。 什么是Python匹配空格&#xff1f; Python匹…