😘😘😘😘😘😘点击查看服务器
介绍:
文件上传漏洞是指用户上传了一个可执行的脚本文件比如(php、jsp、xml、cer等文件),而WEB系统没有进行检测或逻辑做的不够安全。导致用户将恶意的文件上传到了对方服务器当中了
代码审计
//经典if判断
//提交值非空
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' ] );
// Can we move the file to the upload folder?
//这个是将我们上传的文件移动到一个目录里面,就是有一个上传的目标
//move_uploaded_file — 将上传的文件移动到新位置
if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
// No
//没有成功显示图片未上传
echo 'Your image was not uploaded.
';
}
else {
// Yes!
//成功显示图片上传
echo "{$target_path} succesfully uploaded!
";
}
}
?>
我们看了这个代码
照成文件上传漏洞的非常大的关键是没有对类型进行过滤
为什么怎么说呢
首先我们上传一张图片是可以的,但是如果我们上传一个木马文件呢,可以吗一样是可以的,找出能上传木马文件的原因就再去对文件的类型没有进行严格的判断和过滤
那么LOW级别就分成简单了
直接上传一个木马文件就可以了
我们通过哥斯拉生成一个php的木马
因为没有什么拦截的直接上传
那么这个木马呢
ip+/hackable/uploads/NB.php
回显无异常
访问正常
我们用哥斯拉测试连接一下
OK
代码审计
//经典if判断
//提交值非空
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?
//这个是将我们上传的文件移动到一个目录里面,就是有一个上传的目标
//move_uploaded_file — 将上传的文件移动到新位置
//类型判断必须是图片类型的
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
//没有上传成功显示Your image was not uploaded.
echo 'Your image was not uploaded.
';
}
else {
// Yes!
//上传成功显示,上传成功
echo "{$target_path} succesfully uploaded!
";
}
}
else {
// Invalid file
//如果你上传的不是image/jpeg图片类型的文件会提示
//Your image was not uploaded. We can only accept JPEG or PNG images.
//类型无效
echo 'Your image was not uploaded. We can only accept JPEG or PNG images.
';
}
}
?>
我们直接提交php文件会显示
Your image was not uploaded. We can only accept JPEG or PNG images.
不是JPEG和PNG类型的文件所以无效
首先我们可以通过抓包去修改文件的类型
我们可以用burp来解决问题
我们先把NB.php改成NB.jpeg
先上传
数据包抓一下
怎么改呢
首先他规定的类型是我们再把图片类型改成php后缀的
任何再把数据包放行了
我们会发现
成功的上传进去了
访问一下
再测试连接一下
测试没有问题
连接一下
OK
代码分析
//经典if判断
//提交值非空
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_ext是文件的后缀名
$uploaded_ext = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);
$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
$uploaded_tmp = $_FILES[ 'uploaded' ][ 'tmp_name' ];
// Is it an image?
//这里限制上传的文件的后缀名必须以 jpg 、jpeg 或 png 结尾,同时大小<100000,同时上传的文件必须是有效的图片格式(不只是以图片的格式结尾,而且文件内容是图片格式的)
if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&
( $uploaded_size < 100000 ) &&
getimagesize( $uploaded_tmp ) ) {
// Can we move the file to the upload folder?
//移动文件
if( !move_uploaded_file( $uploaded_tmp, $target_path ) ) {
// No
//没有上传成功显示
//Your image was not uploaded.
//你的图片未上传
echo 'Your image was not uploaded.
';
}
else {
// Yes!
//上传成功显示,上传成功
echo "{$target_path} succesfully uploaded!
";
}
}
else {
// Invalid file
//如果你上传的不是image/jpeg图片类型的文件会提示
//Your image was not uploaded. We can only accept JPEG or PNG images.
//类型无效
echo 'Your image was not uploaded. We can only accept JPEG or PNG images.
';
}
}
?>
所以我们在文件头部加上了jpg格式的 GIF89
或者
copy 666.png /b + 1.txt /a 888.png
(//666是图片,1.txt是一句话木马所在的文件,888是复制完成之后的图片命名)