XXE靶机详解

常规思路:先扫描端口,扫描目录

在这里插入图片描述
这里有点迷惑了,我用nessus扫了一遍扫出来两个开放端口:80和5335,。但是用nmap只扫描出来了一个80 端口 不知道是什么原因,有懂的大佬可以解释一下
在这里插入图片描述
怼着扫都没有啊
不管了,根据后面的结果来看端口多一个少一个完全不影响
照例访问80:
在这里插入图片描述
没啥用,apache默认页面
端口5335访问不了

接下来扫目录,御剑和dirb都可以,看用什么系统了
在这里插入图片描述
index.html依然是apache的默认界面
robots.txt:
在这里插入图片描述
xxe是目录,admin.php是页面,但是直接访问xxe路径也是可以的
在这里插入图片描述

xxe:
在这里插入图片描述
xxe登录框,弱密码尝试失败。想了一想这不是废话吗,要是弱密码登录上去的话这靶机也太弱智了。
直接burp抓包看看请求包:

在这里插入图片描述
看看post的数据,这不就是xml标签吗?
知道了为什么要叫xxe靶机

看了好多xxe靶机通关的文章没人写为什么可以实现文件读取,我还是打算简单写一下,一来方便自己以后看,二来对还没有接触过xxe漏洞的朋友来说也比较友好

xxe的基本概念:
首先要明白,xml是具有存储功能的,而且当我们输入一个错误的用户名的时候,错误信息就会在name标签那里展现出来,如下图:
在这里插入图片描述
这是为什么呢?这里就涉及到xml的特性了,我们先来看看xml的文本结构:

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

这部分是xml声明

  <!DOCTYPE  文件名 [
  <!ENTITY实体名 "实体内容">
  ]>

这部分是xml的定义文档类型的DTD

<元素名称 category=“属性”>
文本或其他元素
</元素名称>

这部分是文档元素

这三块上下连在一起就构成了xml文本的整体结构。

这里的漏洞就出现在DTD中,在xml中,可以在DTD中定义应用外部DTD以供xml来解析,其本意是为了方便在各个文档中创建共享的公共引用(这一点与文件包含有异曲同工之妙)。而且,在引用外部实体之后,xml会自动将引用的外部实体内容体现在xml正文中(注意正文中引用的test的格式一定要写对,前面&后面;)。如果我们可以随意修改引用的外部实体,就有可能造成任意文件读取。

举例:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE r [
<!ELEMENT r ANY >
<!ENTITY test SYSTEM "file:///etc/passwd">
]>
<name>&test;</name>

上面的代码中,xml外部实体test被赋值为/etc/passwd,跟文章上面说的一样,xml读取的时候会直接将被读取的/etc/passwd内容显示在页面上
要注意在name标签里面的格式一定要正确,前面加&后面加; 而且都要注意是英文。

了解了上述思路之后,再看burp拦截出来的包就很简单了:
直接写一段xml通过报错读到/etc/passwd
在这里插入图片描述
前面还有个admin.php没有看到,可以读一下php的源码
用php://filter/read=convert.base64-encode/resource=admin.php 来获取base64编码之后的网页源码
在这里插入图片描述
解码:

<?php
   session_start();
?>


<html lang = "en">
   
   <head>
      <title>admin</title>
      <link href = "css/bootstrap.min.css" rel = 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值