ctfshow-文件上传(web151-web161)

目录

web151

web152

web153

web154

web155

web156

web157

web158

web159

web160

web161 


web151

提示前台验证不可靠 那限制条件估计就是在前端设置的

ctfshow-文件上传(web151-web161)_第1张图片

上传php小马后 弹出了窗口说不支持的格式

查看源码

这一条很关键 这种不懂直接ai搜 意思就是限制了上传类型 允许的后缀格式为png 

我们直接修改并且上传小马

ctfshow-文件上传(web151-web161)_第2张图片

ctfshow-文件上传(web151-web161)_第3张图片

给出了上传路径 访问传参即可 得出flag

ctfshow-文件上传(web151-web161)_第4张图片

方法二 因为是前端验证嘛 

修改小马后缀为png bp抓包修改回来也可以

web152

提示后端管的严

ctfshow-文件上传(web151-web161)_第5张图片

就算把前端允许的格式修改为php也不行 后端返回个报错信息 文件类型不允许

ctfshow-文件上传(web151-web161)_第6张图片

抓包修改类型为PNG

Content-Type: application/octet-stream

修改为

Content-Type: image/png

成功

ctfshow-文件上传(web151-web161)_第7张图片

获取flag

ctfshow-文件上传(web151-web161)_第8张图片

web153

ctfshow-文件上传(web151-web161)_第9张图片

依旧显示文件类型不合规

修改类型不行了

ctfshow-文件上传(web151-web161)_第10张图片

修改后缀也不行 那么估计就是对文件内容进行检测了 在文件的内容前加入PNG头标识也不行 

可能即使后端判断后缀太严格只要是.php就不行

发现upload下有个index.php文件 那就可以使用.user.ini的方式了

php.ini是php的配置文件 定义全局的 .user.ini也是配置文件作用与目录的 优先级比全局配置文件高 前提是当前目录下有php文件 那么在.user.ini配置文件定义当前目录所有php文件包含一个指定的php文件 即可 但是这个指定的php文件也需要我们上传 我们无法上传php 才想到的.user.ini 所以包含一个txt文件也可以的 只要是txt文件内容是php内容 文件包含过来就会解析txt里面的php内容

首先上传.user.ini文件 内容为auto_append_file=1.txt

首先就是前端允许类型为ini这样通过前端 后端修改类型为image/png通过后端 要记得在user.ini前增加一个. 必须在bp中增加(在本地.开头可能会不让) 因为全称就是.user.ini 

ctfshow-文件上传(web151-web161)_第11张图片

上传txt文件

依旧是先绕过前端 后端文件类型修改为image/png

ctfshow-文件上传(web151-web161)_第12张图片

访问/upload即可 并传入post参数为我们的命令

ctfshow-文件上传(web151-web161)_第13张图片

web154

ctfshow-文件上传(web151-web161)_第14张图片

以上一题的方法试一下

.user.ini文件成功上传

但是txt文件上传失败说是文件内容不可以

ctfshow-文件上传(web151-web161)_第15张图片

经过测试只要是文件中存在php就不可以

使用php短标签格式即可

ctfshow-文件上传(web151-web161)_第16张图片

获取flag

ctfshow-文件上传(web151-web161)_第17张图片

web155

ctfshow-文件上传(web151-web161)_第18张图片

同web154

使用蚁剑连接查看过滤源码发现 确实过滤了php并且过滤文件的内容 以及判断类型

web156

同web154

区别文件内容又过滤了[] 导致小马不能用 换成{}即可

  

  

注意 判断过滤什么 使用二分法 一半一半测试

web157

同web154

额外多过滤了{}以及;号  不影响直接删除即可

因为 在php中最后一个;可以不用写

上一题去除分号即可

{}问题如何解决 多学一个姿势POST不给参数也可以

一句话木马为  

去除分号 

意思就是弹出post最后一对键值对的值 从而php解析这个值 从而达到执行命令

web158

使用web157即可

web159

文件内容()不让用了 那就不能写一句话木马了

还有什么方式呢 那就是 首先ini文件包含一个1.txt文件 1.txt文件的php内容为包含U-A日志文件 

/var/log/nginx/access.log 然后U-A 添加一句话木马 即可 这个log也被过滤了 使用 . 拼接即可

.user.ini 内容为 auto_append_file=1.txt

ctfshow-文件上传(web151-web161)_第19张图片

1.txt内容为

添加U-A值

ctfshow-文件上传(web151-web161)_第20张图片

目前来说日志确实被包含了  但是内容太多 手动执行命令不好找  并且也不确定一句话是否被写入日志中 使用蚁剑连接测试即可

ctfshow-文件上传(web151-web161)_第21张图片

成功

ctfshow-文件上传(web151-web161)_第22张图片

找到了flag

既然已经使用蚁剑进行连接了 那就看看这几关后端是怎么过滤的吧

后端过滤脚本

ctfshow-文件上传(web151-web161)_第23张图片

可以看到文件内容过滤了 php ( [ { ; log 

并且验证文件类型是否为image/png 以及后缀是否是php

web160

文件内容过滤了空格 很容易我们将空格换成换行符0a即可 不能再post中直接写%0a 那个url的写法  先用1进行占位 再hex中找到1对应的31 修改为0a即可

web161 

经过bp测试 不让上传ini后缀的文件了 txt也不行 png也不行 估计是白名单?

我重新来 直接在页面中上传png图片 结果也说图片不合规 这是啥都不让上传?

真有意思前端允许类型是png 后端却不可以了

经过测试 后缀只要不是php就可以 文件类型必须要是png 文件头内容必须是GIF头(并且光有头不行 还必须要有内容)

ctfshow-文件上传(web151-web161)_第24张图片

既然知道这样了 按照上一题

上传.user.ini  内容为 auto_append_file=1.txt

上传1.txt内容为 (过滤了空格 记得替换09等)

添加U-A值

并且文件内容前必须要加上GIF的头字段(我查看源码也不明白原因 有个函数获取该文件大小 也就是说 文件头要和文件对应 才会返回真 这个GIF文件头组合任意内容 该函数都会返回真 这是我的理解)

确定包含日志

ctfshow-文件上传(web151-web161)_第25张图片

蚁剑连接成功确实 木马写入 查找flag

在这里说一下 这些题目都是再上一题的基础上再增加过滤条件的 所以就是上一关禁用的 下一关也会被禁用 

先发到web161 之后的需要vps长地址 目前弄不出来长地址 导致只能做到这

你可能感兴趣的:(CTFSHOW,文件上传,网络安全,渗透测试,文件上传,文件上传漏洞,php代码)