DVWA-File Upload
0x01 文件上传
<?php
if( isset( $_POST[ 'Upload' ] ) ) {
// 这段代码是有关文件上传之后的位置的。basename函数返回路径中的文件名部分。如果可选参数suffix为空,则返回的文件名包含后缀名,反之不包含后缀名。
$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );
// 判断是否可以上传。move_uploaded_file函数将上传的文件移动到新位置。
if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
// 上传失败
echo '<pre>Your image was not uploaded.</pre>';
}
else {
// 上传成功,并返回文件路径
echo "<pre>{$target_path} succesfully uploaded!</pre>";
}
}
?>
直接上传一句话木马即可。

上传之后,浏览器访问,看是否上传成功。

上传成功。因为我在一句话木马前面加了GIF89a的。
蚁剑连接一句话:

0x03 Medium级别
代码如下:
<?php
if( isset( $_POST[ 'Upload' ] ) ) {
// 同Low级别
$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );
// 这里是上传的文件的相关信息
$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
$uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];
$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
// 判断上传的文件是否是jpeg和png图片且大小小于100000字节
if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&
( $uploaded_size < 100000 ) ) {
// 判断文件是否能够上传
if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
// 上传失败
echo '<pre>Your image was not uploaded.</pre>';
}
else {
// 上传成功
echo "<pre>{$target_path} succesfully uploaded!</pre>";
}
}
else {
// 上传的文件不是图片,返回以下信息给用户
echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
}
}
?>
medium级别相比于low级别,多了一次验证,验证上传的文件是否是图片。
这里可以使用burp来绕过,当然还有其他的方法。
先将shell.php改为shell.jpg,发送包时用burp进行拦截,并将后缀名重新修改为php。
即可上传成功。

0x04 High级别
代码如下:
<?php
if( isset( $_POST[ 'Upload' ] ) ) {
// 同以上两个级别
$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );
// 文件信息。strrpos函数查找字符串在另一字符串中最后一次出现的位置(区分大小写);substr函数返回字符串的一部分。
$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
$uploaded_ext = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);//这句的意思是将文件的后缀名赋给$uploaded_ext
$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
$uploaded_tmp = $_FILES[ 'uploaded' ][ 'tmp_name' ];
// 判断是否是图片。strtolower函数将所有字符转换为小写;getimagesize函数用于获取图像的大小及相关信息。
if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&
( $uploaded_size < 100000 ) &&
getimagesize( $uploaded_tmp ) ) {
// 判断能否上传
if( !move_uploaded_file( $uploaded_tmp, $target_path ) ) {
// 不能
echo '<pre>Your image was not uploaded.</pre>';
}
else {
// 能
echo "<pre>{$target_path} succesfully uploaded!</pre>";
}
}
else {
// 上传文件不是图片的反馈信息
echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
}
}
?>
high级别的文件上传可以结合low级别的文件包含进行实验。
上传一个图片马,再用文件包含进行读取即可。
0x05 Impossible级别
代码如下:
<?php
if( isset( $_POST[ 'Upload' ] ) ) {
// 检查token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// 文件信息
$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
$uploaded_ext = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);
$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
$uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];
$uploaded_tmp = $_FILES[ 'uploaded' ][ 'tmp_name' ];
// 将上传的文件进行改名以及确定上传的目录位置。uniqid函数基于以微秒计的当前时间,生成一个唯一的 ID;ini_get函数用于获取一个配置选项的值。sys_get_temp_dir函数用于返回用于临时文件的目录。
$target_path = DVWA_WEB_PAGE_TO_ROOT . 'hackable/uploads/';
//$target_file = basename( $uploaded_name, '.' . $uploaded_ext ) . '-';
$target_file = md5( uniqid() . $uploaded_name ) . '.' . $uploaded_ext;
$temp_file = ( ( ini_get( 'upload_tmp_dir' ) == '' ) ? ( sys_get_temp_dir() ) : ( ini_get( 'upload_tmp_dir' ) ) );
$temp_file .= DIRECTORY_SEPARATOR . md5( uniqid() . $uploaded_name ) . '.' . $uploaded_ext;
// 判断是否为图片
if( ( strtolower( $uploaded_ext ) == 'jpg' || strtolower( $uploaded_ext ) == 'jpeg' || strtolower( $uploaded_ext ) == 'png' ) &&
( $uploaded_size < 100000 ) &&
( $uploaded_type == 'image/jpeg' || $uploaded_type == 'image/png' ) &&
getimagesize( $uploaded_tmp ) ) {
// 将上传的图片进行重新的编码
if( $uploaded_type == 'image/jpeg' ) {
$img = imagecreatefromjpeg( $uploaded_tmp );
imagejpeg( $img, $temp_file, 100);
}
else {
$img = imagecreatefrompng( $uploaded_tmp );
imagepng( $img, $temp_file, 9);
}
imagedestroy( $img );//销毁图像
// 判断是否可以将文件从临时目录转移到web根目录。rename函数重命名文件或目录;getcwd函数用于获取当前的工作目录;
if( rename( $temp_file, ( getcwd() . DIRECTORY_SEPARATOR . $target_path . $target_file ) ) ) {
// 能
echo "<pre><a href='${target_path}${target_file}'>${target_file}</a> succesfully uploaded!</pre>";
}
else {
// 不能
echo '<pre>Your image was not uploaded.</pre>';
}
// 删除所有的临时文件。file_exists函数用于检查文件或目录是否存在。unlink函数用于删除文件。
if( file_exists( $temp_file ) )
unlink( $temp_file );
}
else {
// 上传的文件不符合规则
echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
}
}
// 生成token
generateSessionToken();
?>
0x06 总结
DVWA-File Upload的更多相关文章
- DVWA File Upload 通关教程
File Upload,即文件上传.文件上传漏洞通常是由于对上传文件的类型.内容没有进行严格的过滤.检查,使得攻击者可以通过上传木马获取服务器的webshell权限,因此文件上传漏洞带来的危害常常是毁 ...
- DVWA File Upload level high 通关
由于level 是 high 1.代码审计 <?php if( isset( $_POST[ 'Upload' ] ) ) { // Where are we going to be writi ...
- DVWA 黑客攻防演练(五)文件上传漏洞 File Upload
说起文件上传漏洞 ,可谓是印象深刻.有次公司的网站突然访问不到了,同事去服务器看了一下.所有 webroot 文件夹下的所有文件都被重命名成其他文件,比如 jsp 文件变成 jsp.s ,以致于路径映 ...
- 【DVWA】Web漏洞实战之File Upload
File Upload File Upload,即文件上传漏洞,一般的上传漏洞可能是未验证上传后缀 或者是验证上传后缀被bypass 或者是上传的文件验证了上传后缀但是文件名不重命名. LOW 直接上 ...
- DVWA全级别之File Upload(文件上传)
File Upload File Upload,即文件上传漏洞,通常是由于对上传文件的类型.内容没有进行严格的过滤.检查,使得攻击者可以通过上传木马获取服务器的webshell权限,因此文件上传漏洞带 ...
- DVWA(九):File Upload 全等级文件上传
File Upload 文件上传,通常是由于对上传文件的类型没有进行严格的过滤.限制造成的,一般思路是 通过上传木马获取服务器的webshell(通过网络端口对网站服务器某种程度上的操作权限 也叫网站 ...
- jQuery File Upload 单页面多实例的实现
jQuery File Upload 的 GitHub 地址:https://github.com/blueimp/jQuery-File-Upload 插件描述:jQuery File Upload ...
- jQuery File Upload done函数没有返回
最近在使用jQuery File Upload 上传图片时发现一个问题,发现done函数没有callback,经过一番折腾,找到问题原因,是由于dataType: ‘json’造成的,改为autoUp ...
- kindeditor多图片上传找不到action原来是private File upload成员变量惹得祸
kindeditor多图片上传找不到action原来是private File upload成员变量惹得祸
- 【转发】Html5 File Upload with Progress
Html5 File Upload with Progress Posted by Shiv Kumar on 25th September, 2010Senior Sof ...
随机推荐
- SMTP发邮件(直接可用)实例
string file = "邮件测试.txt";//放在Debug下的一个txt文件. MailAddress from = new MailAddress("自己的邮 ...
- NER命名实体识别,实体级level的评估,精确率、召回率和F1值
pre = "0 0 B_SONG I_SONG I_SONG 0 B_SONG I_SONG I_SONG 0 0 B_SINGER I_SINGER I_SINGER 0 O O O B ...
- all_user_func()详解
来源:https://blog.csdn.net/moliyiran/article/details/83514495 call_user_func — 把第一个参数作为回调函数调用 通过函数的方式回 ...
- 笔记-VUE滚动加载更多数据
来源:https://blog.csdn.net/qq_17281881/article/details/87342403 VUE滚动加载更多数据 data() { return { loading: ...
- tp5中的input助手函数
详见手册:https://www.kancloud.cn/manual/thinkphp5/118044
- css3 文本控制自动换行
text-overflow:ellipsis; white-space:nowrap; overflow:hidden;
- 【JAVA基础】10 Object类
1. Object类概述 是类层次结构的根类 每个类都使用 Object 作为超类 所有类都直接或者间接的继承自该类 所有对象(包括数组)都实现这个类的方法. 2. Object的构造方法 publi ...
- python连接mysql数据表查询表获取数据导入到txt中
import pymysql'''连接mysql数据表查询表获取数据导入到txt中'''#查询结果写入数据到txtdef get_loan_number(file_txt): connect = py ...
- oracle查询当前系统时间前10天的数据
select * from eo_c_order t where t.create_time>systimestamp-interval'1'day; 转载于:https://www.cnblo ...
- 网速慢?NO可能是路由器的原因?
先排除DNS的问题:看这个! 为什么我家300M的网,而且wifi信号满格,还是网速很慢? 这时候不排除是路由器的原因! 第一步首先我们要知道自己家的网关IP: 什么是网关? 网关(Gateway)又 ...