ctfshow--web入门--文件上传
- ctfshow--web入门--文件上传
- web151(前端校验)
- web152(content-type)
- web153(.user.ini)
- web154(内容检测'php')
- web155(内容检测'php')
- web156(内容检测'[')
- web157(内容检测'php''[]''{}'';')
- web158(文件检测'php''{''['';''log')
- web159(日志包含)
- web160(日志空格检测)
- web161(日志文件头检测)
- web162&&web163(session包含)
- web164(png图片二次渲染)
- web165(jpg图片二次渲染)
- web166(zip)
- web167(.htaccess)
- web168(姿势绕过)
- web169&web170(构造包含日志)
- 文件上传总结
- 参考文章
web151(前端校验)
题目中提示前端检验不可靠,应该对前端检验进行绕过
检查前端代码进行修改,使php文件可以通过前端校验,成功上传后进行命令执行,找到flag
web152(content-type)
通过前端校验后上传php文件显示文件类型不合规
尝试抓包修改content-type,根据数据包回显得知上传成功。
访问后门文件代码执行得到flag
web153(.user.ini)
直接上传php文件显示文件类型不合规,尝试修改content-type上传不成功,上传php3
后缀服务器不能解析
尝试访问upload文件夹,发现upload文件夹有默认索引,具有index.php文件,那么可以利用.user.ini文件来进行上传
具体user.ini知识点参考.htaccess 和.user.ini 配置文件妙用
.user.ini文件其实就是一个局部配置文件,可以通过配置选项使每个php文件头或文件尾都进行文件包含
auto_prepend_file = <filename> //包含在文件头
auto_append_file = <filename> //包含在文件尾
通过.user.ini使得upload文件夹下每个php文件在文件头都包含1.png文件
构造图片马1.png进行上传,由于.user.ini使得upload下index.php包含所上传的图片马,直接访问index.php进行命令执行即可得到falg
web154(内容检测'php')
大致步骤与153题一样。在上传的时候发现图片马上传不了,经过测试发现对图片内容中的php做了处理,那么在图片马中可以采用php其他风格得写法,如短标签等。具体可以参考PHP四种标记风格
web155(内容检测'php')
同上
web156(内容检测'[')
源码检测了php和[,采用短标记和大括号替代
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-10-24 19:34:52
# @Last Modified by: h1xa
# @Last Modified time: 2020-10-26 15:49:51
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
if ($_FILES["file"]["error"] > 0)
{
$ret = array("code"=>2,"msg"=>$_FILES["file"]["error"]);
}
else
{
$filename = $_FILES["file"]["name"];
$filesize = ($_FILES["file"]["size"] / 1024);
if($filesize>1024){
$ret = array("code"=>1,"msg"=>"文件超过1024KB");
}else{
if($_FILES['file']['type'] == 'image/png'){
$arr = pathinfo($filename);
$ext_suffix = $arr['extension'];
if($ext_suffix!='php'){
$content = file_get_contents($_FILES["file"]["tmp_name"]);
if(stripos($content, "php")===FALSE && stripos($content,"[")===FALSE){
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$_FILES["file"]["name"]);
$ret = array("code"=>0,"msg"=>"upload/".$_FILES["file"]["name"]);
}else{
$ret = array("code"=>2,"msg"=>"文件类型不合规");
}
}else{
$ret = array("code"=>2,"msg"=>"文件类型不合规");
}
}else{
$ret = array("code"=>2,"msg"=>"文件类型不合规");
}
}
}
echo json_encode($ret);
stripos() 函数查找字符串在另一字符串中第一次出现的位置(不区分大小写)。
web157(内容检测'php''[]''{}'';')
上传.user.ini
在上传图片马得过程中,经过使用二分法对一句话木马的分析发现,后台代码对图片马内容中的关键字‘php’,'[]','{}'以及';'都进行了检测,这一关的性质就由文件上传转变为了任意代码执行,那么只好再次对木马文件进行伪装
<?= @eva l(array_pop($_POST))?>
使用=短标签绕过php检测
@不提示报错信息
eva l()把内容当作php语句执行
array_pop()将数组中最后一个元素取出并删除
使用$_POST接受任意变量
使用该文件并不能获取shell,只能通过POST提交数据进行代码执行
代码执行