当前位置: 首页 > news >正文

2024第六届金盾信安杯Web 详细题解

比赛一共4道Web题,比赛时只做出三道,那道文件上传没有做出来,所以这里是另外三道题的WP

分别是   fillllll_put    hoverfly   ssrf

fillllll_put

涉及:

绕过exit() 死亡函数

php://filter 伪协议配合base64加解密 

一句话木马

题目源码:

$content参数在开头被拼接了exit函数,需要绕过exit()函数才能使得通过$content参数写入的文件内容被成功执行而不是直接执行exit函数,可以用base编码实现绕过

详解php://filter以及死亡绕过_filter绕过过滤-CSDN博客

就是利用php://filter/write=convert.base64-decode来对文件中的内容先进行base64解码

比如下面这行代码

file_put_contents('php://filter/write=convert.base64-decode/resource=1203.php', 'SGVsbG8gV29ybGQ=');

write=convert.base64-decode指定了一个写入过滤器,该过滤器会在数据被写入之前对其进行 Base64 解码

所以当执行这行代码时,PHP 会先对 SGVsbG8gV29ybGQ= 进行 Base64 解码,得到 Hello World,然后将这个解码后的字符串写入到1203.php文件中

base64编码中只包含64个可打印字符,PHP在解码base64时,遇到不属于这64个字符之外的字符时,将会忽视这些字符,进行把符合范围的字符重新组成一个新的字符串然后解码

写入文件中的内容为 <?php exit(); 加上后面拼接$content参数,可以拼接一句话木马,比如<?php eval($_POST[a]);  进行base64编码得到  PD9waHAgZXZhbCgkX1BPU1RbYV0pOw==

在base64解码的过程中  "<?php exit();"    里面只有phpexit 这七个字符在base64编码表中,所以能够被解码的字符仅有phpexit,其他的字符会被忽略,base64算法解码时是4字节一组,这里七个字符phpexit无法进行解码,所以可以随便添加一个字符a,凑齐8个字节就可以被base64解码,得到

这样就让exit()函数失去了作用完成绕过,$content参数后面构造的一句话木马会被成功解码并识别为php代码

构造Payload:

(任何没有以 read=write= 作前缀 的筛选器列表会视情况应用于读或写链,所以可以不加write=)

?filename=php://filter/convert.base64-decode/resource=1.php&content=aPD9waHAgZXZhbCgkX1BPU1RbYV0pOw==

连接蚁剑之后在/tmp/flag.txt文件下找到flag

hoverfly

浏览器搜索发现hoverfly存在漏洞,搜集信息之后发现可以命令执行和任意文件读取

但是读取文件需要知道文件名,使用搜集到的payload尝试读取flag文件

在/flag和/tmp/flag都读取到了flag但是都是假的flag

手动猜测文件名得到flag的可能性太低,换思路,尝试命令执行

Payload是下面这种格式

同时发现题目页面中的信息刚好能够对应上图的命令中的信息,如下图所示,所以进行命令执行

先执行ls命令发现成功回显文件信息

接下来直接用 grep -r 命令遍历目录查找文件中的关键词flag即可得到flag

在/tmp/fa1g文件中得到flag

ssrf

题目提示是ssrf,而且界面也很像ssrf

测试一下,输入 www.baidu.com  虽然没成功回显,但是查看页面源码得到提示

加上http://   http://www.baidu.com  成功访问到百度主页

那么直接配合file协议读取一下本地文件/etc/passwd

提示:不允许使用 file://、gopher:// 或 dict:// 协议

使用file://被过滤,而刚才传入http://时成功回显没有过滤,所以判断是file://这一部分被禁止输入,而不是单独的file或者 ://

猜测代码中是使用preg_match()函数进行过滤的,尝试用反斜线\ 分隔file://来绕过代码的检测

输入file:\///etc/passwd 成功读取

接着读取/flag.txt失败,回显False,说明给出的信息可能是错的

目录扫描发现flag.php

测试路径之后得到是/var/www/html/flag.php      输入 file:\///var/www/html/flag.php

成功得到flag.php源码

进行代码审计,只要绕过if判断让$ip和127.0.0.1比较的结果相等即可执行后面的代码输出flag

这里127.0.0.1是被禁止的,传入http://127.0.0.1/flag.php,会提示Invalid URL!

但是如果把127.0.0.1改为127.0.0.2,会发现能够直接得到flag

多次测试发现在127.0.0.2到127.9.9.9范围内取值都是可以得到flag的,而127.0.0.0和127.0.0.1不行,第一位如果不是127的话也不行

那么输入http://127.0.0.2/flag.php

或者http://127.0.0.2/falg1111111111111111111111111111l1.txt都可以得到flag,只要前面的格式在127.0.0.2到127.9.9.9范围即可

这里还可以用短网址 和 dns解析实现绕过

例如  safe.taobao.com 经过dns解析 得到 127.0.0.1


http://www.mrgr.cn/news/79056.html

相关文章:

  • Lua面向对象实现
  • Spring事务的一道面试题
  • JAVA |日常开发中读写TXT文本详解
  • 项目开发之Jenkins
  • leetcode 之 二分查找(java)(3)
  • 10个人工智能驱动的API安全工具
  • 软件工程——期末复习(1)
  • 网络命令配置
  • AD学习笔记·空白工程的创建
  • React 第九节 组件之间通讯之props 和回调函数
  • 重生之我在异世界学编程之C语言:深入指针篇(上)
  • 组合问题变式——选数(dfs)
  • 嵌入式硬件面试题【经验】总结----会不断添加更新
  • IDL学习笔记(二)IDL处理卫星数据
  • 使用playwright自动化测试时,npx playwright test --ui打开图形化界面时报错
  • L15.【LeetCode笔记】相同的树
  • 同时将scss全局变量注入、Tailwind样式使用、自己插件配置到vite
  • 汽车IVI中控OS Linux driver开发实操(二十七):常用Linux指令
  • 记录vite关于tailwindcss4.0-bate4出现margin[m-*]、padding[p-*]无法生效的问题。
  • 神经网络中的优化方法(一)
  • Android 应用单元测试涉及 Telephony 环境初始化问题
  • 浏览器的事件循环机制
  • 深入解析 Dubbo 中的常见问题及优化方案: 数据量限制与配置错误20241203
  • 嵌入式系统应用-LVGL的应用-平衡球游戏 part1
  • 三维地形图计算软件(四)-用PYQT5+vtk画任意多面体示例
  • 澎峰科技助力中国移动 重磅发布智算“芯合”算力原生基础软件栈2.0