第五关在第四关的黑名单中又加进了.htaccess,以是上传.htaccess这个思路没戏了
$deny_ext = array(\"大众.php\"大众,\公众.php5\公众,\"大众.php4\公众,\"大众.php3\"大众,\"大众.php2\"大众,\"大众.html\"大众,\"大众.htm\"大众,\"大众.phtml\"大众,\"大众.pHp\"大众,\"大众.pHp5\"大众,\"大众.pHp4\公众,\公众.pHp3\公众,\"大众.pHp2\公众,\"大众.Html\"大众,\"大众.Htm\"大众,\"大众.pHtml\公众,\"大众.jsp\"大众,\"大众.jspa\"大众,\"大众.jspx\公众,\公众.jsw\"大众,\"大众.jsv\"大众,\"大众.jspf\公众,\公众.jtml\公众,\"大众.jSp\"大众,\公众.jSpx\"大众,\"大众.jSpa\"大众,\"大众.jSw\"大众,\公众.jSv\"大众,\"大众.jSpf\"大众,\"大众.jHtml\公众,\"大众.asp\"大众,\"大众.aspx\"大众,\"大众.asa\"大众,\"大众.asax\"大众,\公众.ascx\"大众,\公众.ashx\公众,\公众.asmx\"大众,\公众.cer\公众,\"大众.aSp\公众,\公众.aSpx\"大众,\公众.aSa\"大众,\"大众.aSax\公众,\公众.aScx\"大众,\公众.aShx\"大众,\公众.aSmx\"大众,\公众.cEr\"大众,\"大众.sWf\"大众,\"大众.swf\"大众,\"大众.htaccess\公众);
可以看看过滤内容,过滤的还挺多,这里apache版本为2.4.23,以是apache文件名(x.php.xxx)解析漏洞不能在这用
并且在做该黑名单检讨之前将上传文件后的.和空格字符都给删除了
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//删除文件名末端的点
$file_ext = strrchr($file_name, '.');
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //首尾去空
if (!in_array($file_ext, $deny_ext)) {
if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $UPLOAD_ADDR . '/' . $_FILES['upload_file']['name'])) {
$img_path = $UPLOAD_ADDR . '/' . $file_name;
$is_upload = true;
}
} else {
$msg = '此文件不许可上传';
}
这样做是为了防止用户上传是在后缀名后加上.和空格去绕过黑名单,windows在创建文件时会删除后缀名后的.和空格,并且后缀名为php.的文件也是可以当作php解析的(windows和linux环境都可以)
同时对文件名后缀名大小写写做了检讨,防止大小写绕过
但是通过代码创造在黑名单检讨之前处理文件名时只删除了一次.,于是可以上传一个后缀名为php. .的文件去绕过,这个在黑名单检讨之前后缀名就会被处理为php.
可以看到成功绕过了上传检测
By the way,许多对安全感兴趣但没有这方面履历的小朋友,看到这里总是觉得显示一个phpinfo的页面能代表什么,能够实行phpinfo(),这个函数证明,上传的文件可以实行PHP脚本,这个时候如果上传的是一句话木马<?php eval($_POST['A'])?>,就可以直接合营『菜刀』拿下全体站点,查看源码,乃至修正数据库或者掌握操作系统。
网路渗透上传漏洞19关系列-第一关前端绕过
网络渗透上传漏洞闯19关-第二关MIME类型绕过
网络渗透上传漏洞闯19关-第三关&第四关.htaccess黑名单绕过