training-4

dawn_r1sing Lv3

week3-4(1)

(CTFHub)

00截断

感觉有点乱,稍微总结一下

文件上传(检测):
  • 前端JS检测(无法直接抓包)

    1
    2
    3
    法一:将JS中与检测功能相关的东西删去
    法二:禁用JS
    法三:绕过JS之后再更改(抓包改filename为php文件)
  • 后端(filename传至后端由$_FILES[‘upload_file’][name]这类的变量进行接收,接收时会将%00后面的截断)

    1、文件类型(MIME类型)【根据获得MIME类型的途径分为】

    • Content-Type检测

      1
      2
      3
      4
      法一:直接传php文件,抓包改Content-Type
      法二:先传png文件,抓包改filename后缀

      总之最后的MIME类型必须是允许的
    • 文件头检测

      使用getimagesize()函数检测图片文件头

      1
      2
      3
      4
      添加上文件头即可(一般用gif,添加方便)
      gif(GIF89a) : 47 49 46 38 39 61
      jpg、jpeg : FF D8 FF
      png : 89 50 4E 47 0D 0A

    2、path参数检测

    • 可控:前面老老实实,最后上传路径直接改成xx,php完事(例如本题)
    • 不可控:filename里做00截断,对路径也会起截断作用(此时路径组成有filename)

    3、文件扩展名检测

    • 白名单检测

      1
      2
      3
      1、老老实实对上传路径进行%00截断
      (如果对filename进行00截断,在之后的文件后缀检测中00截断会发生,得到的后缀会是php,会被拦截)
      2、有文件包含就文件包含
    • 黑名单检测

      1
      双写、换别的后缀...

    4、内容检测

    像是检测<?php之类的

解题:

看源代码,php语言,判断是后端-白名单检测

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!--
if (!empty($_POST['submit'])) {
$name = basename($_FILES['file']['name']);
$info = pathinfo($name);
$ext = $info['extension'];//
$whitelist = array("jpg", "png", "gif");
if (in_array($ext, $whitelist)) {
$des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext;
if (move_uploaded_file($_FILES['file']['tmp_name'], $des)) {
echo "<script>alert('上传成功')</script>";
} else {
echo "<script>alert('上传失败')</script>";
}
} else {
echo "文件类型不匹配";
}
}
-->

00截断

1
POST /?road=/var/www/html/upload/hacker.php%00 HTTP/1.1

只留“hacker.php”后面的都不要

蚁剑连接用的url(注意删去中间的一些乱七八糟,此处填写相对路径)

1
http://challenge-de5fba3e15fceabc.sandbox.ctfhub.com:10800/upload/hacker.php

得到flag~

p.s. 记录一下自己的心路历程。。。

一开始想验证一下在filename里加00截断还是会被ban的,之后便一发不可收拾。。。

1
filename=“hacker.php%00.png”

居然显示上传成功了

再一次懵圈T-T

不是说后端检验的时候会发生00截断 取的$ext会是php吗?应该会ban呀!

然后我就苦思冥想查资料查资料查资料

在这个过程中金币慢慢被花光,被迫每天签到省吃俭用

后来在蚁剑里看到改filename上传进来的都是png文件

我甚至开始怀疑00截断不会在这块进行

正当最后无奈想要放弃的时候

在关掉一个个网页的过程中想着最后再看一遍的时候

看到了\0

!难不成是格式用错了

突然又想起这句话

1
2
"绕过方法:
使用%00截断文件名来上传,(注意:GET型可以对%00自动解码,但POST型不能,需要在二进制中修改)"

恨,很早就看到这个了但没重视

果然(第一次因为看到文件类型不匹配 感到高兴)

img

每个点都不能放过

无验证

上传一句话木马php文件

无限制,上传成功,显示路径

image-20231031174040832

蚁剑连接,得到flag

img


前端验证

查看源代码,照着白名单上传,抓包改一下后缀

1
var whitelist=new Array(".jpg",".png",".gif");

image-20231031191641216

上传成功,得到flag

img


文件头检查

在文件里加一个文件头(GIF89a)

上传成功,得到flag

image-20231031192953833

image-20231031193126829


MIME绕过

(跟上一题步骤一样也能绕过)

MIME是描述消息内容类型的标准,浏览器解析文件时会按照MIME类型进行解析

这里是MIME限制了可解析文件类型,我们上传它原本不允许的php文件,抓包改一下它的MIME类型(Content-Type: image/jpg)即可让浏览器以它允许的文件类型的解析方式对文件进行解析,之后照旧。

得到flag~


.htaccess

.htaccess是一个纯文本文件,它里面存放着Apache服务器配置相关的指令。
.htaccess负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能
.htaccess的用途范围主要针对当前目录。

如果目标环境开启了 .htaccess 并且上传的黑名单没有限制 .htaccess 文件的话,我们便可以先上传 .htaccess 文件,对目标环境的目录进行相应的配置,然后再上传图片马,使图片的 PHP 恶意代码得以被直接解析执行。下列指令任选其一:

  • SetHandler 指令:强制将所有匹配的文件被 PHP 处理器处理并解析:
1
2
3
<FilesMatch "images.png">    
SetHandler application/x-httpd-php
</FilesMatch>
  • AddType 指令:将给定的文件扩展名映射到 PHP 的内容类型
1
Addtype application/x-httpd-php .png

这两种配置都可以使我们上传的非 PHP 类型的 Webshell 被当做 PHP 直接解析

But

  1. 如果要上传.htaccess文件绕过检测的话,使用GIF89a的文件头会导致.htaccess文件无法生效

  2. 如果存在内容过滤,且php版本不是5.x(script标签限制),则需要使用base64编码绕过。.htaccess文件:

    1
    2
    3
    Addtype application/x-httpd-php .gif

    php_value auto_append_file "php://filter/convert.base64-decode/resource=hacker.gif"

贴链接.htaccess

解题:
  1. 上传.htaccess文件,让png文件被php处理器处理解析

    image-20231031203006465

  2. 上传图片马(png)

  3. 得到flag

    image-20231031203218585


双写绕过

源代码

1
2
3
4
5
<!--
$name = basename($_FILES['file']['name']);
$blacklist = array("php", "php5", "php4", "php3", "phtml", "pht", "jsp", "jspa", "jspx", "jsw", "jsv", "jspf", "jtml", "asp", "aspx", "asa", "asax", "ascx", "ashx", "asmx", "cer", "swf", "htaccess", "ini");
$name = str_ireplace($blacklist, "", $name);
-->

会把黑名单替换成空

image-20231102160111735

上传成功,得到flag

image-20231102160915754

  • Title: training-4
  • Author: dawn_r1sing
  • Created at : 2023-11-16 21:59:15
  • Updated at : 2023-11-16 22:02:23
  • Link: https://dawnrisingdong.github.io/2023/11/16/training-4/
  • License: This work is licensed under CC BY-NC-SA 4.0.