<?php if( isset( $_POST[ 'Upload' ] ) ) { // Where are we going to be writing to? $target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/"; $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] ); // File information $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ]; $uploaded_type = $_FILES[ 'uploaded' ][ 'type' ]; $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ]; // Is it an image? if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) && ( $uploaded_size < 100000 ) ) { // Can we move the file to the upload folder? if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) { // No echo '<pre>Your image was not uploaded.</pre>'; } else { // Yes! echo "<pre>{$target_path} succesfully uploaded!</pre>"; } } else { // Invalid file echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>'; } }
上次实验是low级别,以上是这次medium级别代码。
其中这两行代码是重点,因为它限制了文件后缀必须是jpeg、png,也就是image类型的,还有就是文件大小必须小于100000B
if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&
( $uploaded_size < 100000 ) ) {
媒体类型(通常称为 Multipurpose Internet Mail Extensions 或 MIME 类型 )是一种标准,用来表示文档、文件或字节流的性质和格式。它在IETF RFC 6838中进行了定义和标准化。
以下是常见的几种MIME类型,看后缀ipeg、png就能知道image类型是图像类的文件。
这次medium级别实验的思路:
思路一、用图片加木马的方法制作图片木马
思路二、修改后缀名,改为image类型的文件,直接修改上传可能会导致菜刀、蚁剑等工具无法连接,使用burpsuite软件进行代理,修改mime类型后
进行转发,然后再使用工具进行连接控制。
————————————————————————————————————
下面是一句话木马和一张图片
打开cmd,进入文件目录,输入copy 文件1+文件2 文件3 ,注意文件3的后缀名需要与指定的上传类型一样。
正常打开是无法显示的,用记事本打开文件3可以看到末尾存在一句话木马。如果想要正常打开是图片,可以加参数copy 1.jpg/b+2.php/a 3.jpeg
-b是指以二进制的方式合并复制文件,用于图像影音类文件
-a是指以ascii方式合并复制文件,用于文本类文件
上传成功。
打开蚁剑进行连接尝试,连接失败了。
文件包含漏洞, 修改路径,尝试之后依旧是不行。
http://192.168.230.128/dvwa-master/vulnerabilities/fi/?page=/dvwa-master/hackable/uploads/3.jpeg
换思路二进行实验。
打开kali虚拟机中的burpsuite,修改代理设置为所有IP的8080端口。
win10客户端修改谷歌浏览器的代理设置,然后正常上传一句话木马
这是用win10客户端上传一句话木马后拦截的内容,可以看到Content-Type: application/octet-stream,然后把类型修改为image/jpeg
修改后的数据包内容,进行转发
转发后可以看到已经上传成功。
上传成功后可以暂时关掉代理,然后使用工具就可以正常连接了。如下图: