周末的比赛质量还是挺高的,特别是boring_code,有点烧脑但是做的就很开心。
0x01 boring_code 题目描述http://112.125.25.2:9999
题目解答题目上来的邮件源码中给了提示,所以直接分析目录得到了对应的程序源码
先知安全技术社区
http://xz.aliyun.com/forum/
先知安全技术社区
zh-hans
Tue, 02 Jul 2019 06:03:00 +0800
&test;http://xz.aliyun.com/t/5514利用Excel power query实现远程DDE执行Tue, 02 Jul 2019 06:03:00 +0800http://xz.aliyun.com/t/5514
CVE-2019-0221—Apache Tomcat SSI printenv指令中的XSShttp://xz.aliyun.com/t/5310CVE-2019-0221—Apache Tomcat SSI printenv指令中的XSSMon, 03 Jun 2019 09:09:00 +0800http://xz.aliyun.com/t/5310
bytectf{61878fa75f293f179a895bf74e358a4f}
(注:想掌握XXE漏洞的原理,学会XXE漏洞利用技术以及防御方法,可来合天网安实验室操作实验——XXE漏洞攻击与防御,扫描下面二维码可预览学习)
http://112.126.102.158:9999
题目解答首先是一个源码泄露
112.126.102.158:9999/www.zip
看到config.php
中的is_admin
函数时,就基本可以判断,此处可以使用hash扩展攻击bypass
function is_admin(){
$secret = "********";
$username = $_SESSION['username'];
$password = $_SESSION['password'];
if ($username == "admin" && $password != "admin"){
if ($_COOKIE['user'] === md5($secret.$username.$password)){
return 1;
}
}
return 0;
}
哈希长度扩展攻击的一般利用步骤如下:
知道
md5($secret.$username.$password)
的值知道
$SECRET
的长度我们可以算出另外一个 md5 值和另外一个user的值,使得
$COOKIE['user'] == md5($secret.$username.$password)
所以首先输入任意密码登录后在cookie中获取到对应的hash
document.cookie
"PHPSESSID=bodvgts7e1v6duqtcvq0miplul; hash=b1a9c01292d57c0d2010add7f8d10c41"
之后,因为要伪造的password的值为admin,所以对应的长度是 len($SECRET)+len($password)=13
最后使用hashpump
伪造得到对应的值
Input Signature: b1a9c01292d57c0d2010add7f8d10c41
Input Data: admin
Input Key Length: 13
Input Data to Add: zeroyu
f27536145794288b2c1f94f0a62695a9
admin\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00zeroyu
之后将\x
换为%
即可得到对应的payload
admin%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%90%00%00%00%00%00%00%00zeroyu
之后就可以用admin的身份来上传文件了
从代码中可以看到,webapp是自己生成了一个.htaccess
文件来阻止对我们shell的解析,所以我们的目标就是覆盖或者删除这个文件。
有文件上传点,源码中有类,还有一个疑似可以触发phar反序列化的点,基本就可以判断这是一个反序列化漏洞。
大概看了一下官方手册,发现 mime_content_type
函数的实现,其实也是通过读取对应的文件来实现的,既然读文件就有可能会触发phar发序列化漏洞,之后本地测试发现的确可以触发。
前面的协议限制我们可以使用php伪协议来进行绕过
preg_match('/^(phar|compress|compose.zlib|zip|rar|file|ftp|zlib|data|glob|ssh|expect)/i', $this->filepath)
对应的绕过
php://filter/read=convert.base64-encode/resource=phar://filename.phar
之后就是找一条pop链来完成对.htaccess
的修改,最开始想使用move_uploaded_file
函数将文件移走,但是后面发现move_uploaded_file
的第一个参数必须是post传递的,因此失败。
后面就关注到Profile类__call
函数
function __call($name, $arguments)
{
$this->admin->open($this->username, $this->password);
}
虽然webapp自身没有提供对应的函数,但是php系统中是否存在某个类可以完成文件修改的效果,所以顺着这个思路就找到了ZipArchive::open
对应的手册说明:
https://www.php.net/manual/zh/ziparchive.open.php
所以最终构造出的exp如下
之后我们本地动态调试一下这个链,可以看到是已经触发了的,并且触发之后.htaccess
文件也被修改了
之后我们之后需要上传一个bypass限制的webshell,然后再触发反序列化删掉.htaccess
文件即可getshell
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【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脚手架写一个简单的页面?


微信扫码登录