既在比赛中吃亏的时候就决定要再把这个靶场刷一边,当我还在寻思怎么绕过验证的时候队友就已经拿到webshell了,这个差距简直无法接受
pass-01 简单的js前端验证 约等于没有 过
pass-02 在源代码中关键点在与
if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) $_FILES这个超级数组是用于处理文件上传的信息的,其中包括客户端通过post传输的上传文件的文件信息,其中type这个字段是用于判断文件的类型,在流量包中体现为Content-Type:字段
将content-type修改为image/jpeg发包上传,成功
pass-03 在pass03的代码中他设置了一个黑名单并做了判定
$file_ext = strrchr($file_name, '.'); $deny_ext = array('.asp','.aspx','.php','.jsp'); if(!in_array($file_ext, $deny_ext)) 过滤掉了常见的脚本后缀,看似天衣无缝,但这个靶场使用的是apache的后端,而它其中存在一个配置文件httpd.conf
之中的AddType application/x-httpd-php .php .php3 .phtml语句用于告诉服务器将什么后缀的文件交予php解释器处理,这里除了php还有php3,phtml,这没有在代码的过滤器中
pass-04 这次过滤很严格
$deny_ext = array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".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"); 但还是在httpd.conf中,存在这样一条配置
AllowOverride All的作用是允许.htaccess 文件覆盖服务器的全局配置,这导致我们可以上传这个文件覆盖掉服务器配置文件,使得自定义的后缀被服务器的php解析
<IfModule mime_module> AddType application/x-httpd-php .boom </IfModule> 局限性:apache才存在,AllowOverride All默认关闭
pass-05 代码如下
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".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"); 发现了什么?过滤了hta,但就php没有过滤大小写
pass-06 第六题的代码中少了去除空格的一行代码
$file_ext = trim($file_ext); //首尾去空 而过滤中却没有,也就是可以构造php 来pass
pass-07 这次提示直接说过滤了所有后缀
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".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"); 本次靶机使用的是windows,在windows中有一个特性,在后缀后面再加点这个点会被系统丢掉
利用这特性在后缀加点就可绕过
pass-08 pass8与前面的代码相比,少了一个::$DATA的过滤,其利用 NTFS 文件系统中的一个特性,替代数据流 (Alternate Data Streams, ADS)
...