目录
1、low级别(直接上传)
1.1 上传文件
1.2 验证
2、medium级别(使用Burp Suite进行代理)
2.1 进行代理配置
2.2 文件上传
2.3 验证
3、high级别(进行文件合并)
3.1 文件创建
3.2 上传及验证
';
echo 'Your image was not uploaded.';
echo '
';
} else {
echo ''; echo $target_path . ' succesfully uploaded!'; echo ''; } } ?>
PHP端实现文件上传的功能,不设置任何的检测,可以上传任意类型、任意大小的文件。
所以可以直接上传shell文件,上传完成后使用菜刀。
shell.php文件的内容如下,只有一句话:
在DVWA进行文件上传。
为了验证是否上传成功,可以进入这个网址,如果不出现NOT FOUND说明上传成功;
也可以去靶机下进行查看,靶机中的路径为/var/www/dvwa/hackable/uploads。
打开菜刀,右击->添加->输入PHP脚本的位置,后面输入POST里面的密码。
右击文件管理,如果可以进行文件的增删等操作说明成功。
此级别下PHP代码相对于上一级别增加了文件mime类型的判断以及文件大小的判断,主要添加的代码如下。
if (($uploaded_type == "image/jpeg") && ($uploaded_size < 100000))
对mime类型的讲解可以参考:https://www.cnblogs.com/zhongcj/archive/2008/11/03/1325293.html
在此级别下,不能直接上传PHP文件。可以把浏览器进行代理配置,把上传的PHP文件伪装成image/jpg文件再进行上传。需要使用的工具是Burp Suite(kali Linux)。
首先要明确虚拟机的IP地址,可以使用ip a 进行查看。
kali的IP为 192.168.5.131
owaspbwa靶机的IP为:192.168.5.132
代理过程大致如下图所示,php不能直接上传至靶机,就进行代理、伪装,在进行上传。
以火狐为例,选项->常规拉到最下面->网络设置,把HTTP代理的IP设置为kali的IP,注意是kali的IP,不是靶机的IP。
在kali端,会自带burp suite工具,打开burp suite新建一个project,Proxy->Options->Add,设置IP为上传文件的主机IP,方便的话可以直接选all,端口为在浏览器设置的端口。
再切换到Proxy下的Intercept,把第三个按键置为intercept is on
选择php文件进行上传,会发现浏览器一直在响应的状态。
在burp suite中,会收到上传文件的请求。对请求文件类型进行修改,把application/octet-stream改为image/jpeg,再点击Forward
再返回浏览器,发现文件上传成功。
和low级别下的一样,使用菜刀对靶机进行操作,如果可以进行文件的增删说明成功。
在high级别下,网站的php代码主要是检测文件的后缀,只允许.jpg .jpeg图片文件进行查询,主要代码变化如下。
$uploaded_ext = substr($uploaded_name, strrpos($uploaded_name, '.') + 1);
if (($uploaded_ext == "jpg" || $uploaded_ext == "JPG" || $uploaded_ext == "jpeg" || $uploaded_ext == "JPEG") && ($uploaded_size < 100000))
不能用medium级别的办法,因为medium级别并没有真正改变文件的类型。
此级别的解决办法是把php文件与图片进行合并。
为了更好的对后续进行验证,对shell1.php做一点点修改。
');?>
在windows中对文件进行合并使用copy命令。copy 1.jpg/b+shell1.php shell.jpg
注意:在合并时要把图片文件放在前面并加上/b,否则合并出来的图片不能显示(不过对结果没有影响,都可以进行上传);还有就是图片要小一点,因为网站对上传文件的大小有限制。
合成后的图片和之前的图片看上去没有区别,右击用记事本查看会发现PHP代码已经植入。
把新文件进行上传,访问对应的网址。也可以去靶机中进行验证。都说明已经上传成功。
此方法暂时不能使用菜刀验证,因为上传的是静态的文件不会主动执行,需要再对网站文件包含漏洞进行渗透。
可以参考 https://blog.csdn.net/kirito_pio/article/details/106565478 进行文件包含渗透。