目录
pass1
这是一个基于php语言写的靶场
php+apahce
写一个php探针文件名为1.php
不看源码盲猜白名单过滤
检查元素发现有个js进行前端验证,直接禁用js上传成功,访问上传的文件。
url
pass2
上传失败,检查元素看不出什么就抓包看看
看到contentype 后端mime检查
直接改包,把原本的contenttype改为image/jpg 或者image/png image/gif
发包
上传成功
pass3
判断出是黑名单过滤,但是未过滤到php3,php5 可以进行尝试,上传php3发现成功上传
此漏洞的前提是对方的apache的httpd.conf中的该项是开启的:
AddType application/x-httpd-php .php .phtml .php3 .php4 .php5
Pass4
该黑名单检测是不检测.htaccess的
.htaccess是什么:
全称是Hypertext Access(超文本入口) .htaccess文件也被成为分布式配置文件,提供了针对目录改变配置的方法,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。
上传一个.Htaccess文件,内容为:
可以使得apache将jpg类型的图片解析为php脚本执行,上传该配置文件来实现图片作php脚本解析的前提条件是apache的cgi是handler而不是其他模式。默认情况都不是这个接口。
pass6
也是绕过黑名单的
提示如下:
This pass prohibit upload
.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.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|.htaccess suffix file!
查看源代码:
$file_name = $_FILES['upload_file']['name'];
$file_name = deldot($file_name);//Delete dot in name's latest place
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //Convert to lowercase
$file_ext = str_ireplace('::$DATA', '', $file_ext);//Remove String::$DATA
少了个去除空格的函数
抓包改filename,加个空格绕过
上传后可以正常访问,这里懒得丢成功的图了。。
Pass7
源码:
$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");
$file_name = trim($_FILES['upload_file']['name']);
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //Convert To Small Letter
$file_ext = str_ireplace('::$DATA', '', $file_ext);//Remove String::$DATA
$file_ext = trim($file_ext); //Clean Up Empty
未去除.(dot)
可以在windows系统中测试一下,新建的文件名后缀有点的都和没有的一样解析,所以这边实现了绕过。
Pass8(未过滤::$DATA文件流字符)
在数据包中文件名后缀加::$DATA后上传绕过,直接访问不行(forbidden),在url中把文件名后缀的::$DATA删掉就可以webshell
pass9
.htaccess被禁用了
如果apache是CGI/FastCGI版本的则可以尝试上传.user.ini配置文件
.user.ini是什么:
它比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法。可以简单的把他看做是用户自定义的php.ini,除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。
想要达到在和user.ini一个目录下均可以在执行php脚本时候包含你写在user.ini里面配置的文件,只要内容如下:
auto_prepend_file="上传的webshell"
黑名单过滤,且不会修改上传后的文件名,不过滤.user.ini
上传一个1.gif的webshell探针
再上传内容为:auto_prepend_file=1.gif的.user.ini配置文件
此刻去访问1.gif没什么效果,去访问该目录下的readme.php即可达到效果
Pass10
查看源码发现
$file_name = trim($_FILES['upload_file']['name']);
$file_name = str_ireplace($deny_ext,"", $file_name);
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.$file_name;
这个 $file_name = str_ireplace($deny_ext,"", $file_name);
语句将匹配到的黑名单过滤称为空格,此刻双写后缀就可以了
pass14
文件上传搭配文件包含漏洞组合
此关有个文件上传漏洞因此可以进行此操作
首先准备一句话和一张图片进行合成图片马,再上传。
上传成功后点击该关的一个url,那是包含文件的地方
这个图片名字被改了,要注意把他换成更改后的图片。最后用蚁剑连接即可
Pass15
检测图片大小,可以和14关一样绕过。