Linux 判断文件成功上传,Kali Linux系统利用DVWA靶场进测试文件上传漏洞:

文件上传漏洞:漏洞原因是由于开发人员或者网站运维人员的一些失误导致用户上传的文件可以被服务器当作脚本执行文件解析执行,但是想要成功利用这个漏洞至少需要满足三个条件:1.有效上传点;2.上传文件能够被解析执行;3.上传文件能够被访问到.

Low安全级别源代码:

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?

if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {

// No

$html .= '

Your image was not uploaded.
';

}

else {

// Yes!

$html .= "

{$target_path} succesfully uploaded!
";

}

}

?>

9b4bbd39b14b

图片发自简书App

菜刀连接成功:

9b4bbd39b14b

图片发自简书App注:可以看到确实没做什么过滤,文件路径DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/"再加上文件名即可绕过.

MediumA安全级别源代码:

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

$html .= '

Your image was not uploaded.
';

}

else {

// Yes!

$html .= "

{$target_path} succesfully uploaded!
";

}

}

else {

// Invalid file

$html .= '

Your image was not uploaded. We can only accept JPEG or PNG images.
';

}

}

?>

9b4bbd39b14b

图片发自简书App注:红色圈中首先获取了文件类型,保存再$uploaded_type里面,然后再判断这个变量是否符合条件,这个变量实际上就是存储的mime类型.

先试试直接上传脚本:

9b4bbd39b14b

图片发自简书App注:可以看到只允许上传jpeg或者png的图片来绕过这个限制,限制上传php文件路径:1.前端:利用js判断;2.后端:a.判断文件名后缀;b.判断mime类型;c.判断文件内容。首先看看是否是前端JavaScript判断,由于使用的是Chrome浏览器,所以设置一下禁用JavaScript,这样一来页面中JavaScript就不在生效,但是当攻击者尝试上传文件任然不成功,这就说明不是JavaScript限制了攻击者操作.注:chrome禁用js方法:设置----->高级------->隐私设置和安全性----->内容设置------>禁用js注:如果后台是使用文件名来判断,那么也就无法让服务器直接将脚本解析,因为现在php版本是5.4,所以以前盛传的文件名%00阶段也不可用了,例如:文件名为1.php%00.jpg,可以绕过后台文件后缀检查,但是在服务器解析是会解析成1.php,原因是%00截断了后面的字符,但是这个方法利用其它5.3.29版本的php没有复现出来,可能或许需要更低版本的php,下面就试试绕过看看是不是后台对mime类型进行判断,这个时候需要用到抓包进行辨别.

BurpSuite抓包结果:

9b4bbd39b14b

图片发自简书App

修改Mime类型:

9b4bbd39b14b

图片发自简书App

成功绕过:

9b4bbd39b14b

图片发自简书App

菜刀连接:

9b4bbd39b14b

图片发自简书App

High安全级别源代码:

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  = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);

$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];

$uploaded_tmp  = $_FILES[ 'uploaded' ][ 'tmp_name' ];

// Is it an image?

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

$html .= '

Your image was not uploaded.
';

}

else {

// Yes!

$html .= "

{$target_path} succesfully uploaded!
";

}

}

else {

// Invalid file

$html .= '

Your image was not uploaded. We can only accept JPEG or PNG images.
';

}

}

?>

9b4bbd39b14b

图片发自简书App注:可以看出对文件名后缀以及文件内容进行了判断,实际上getimagesize()函数进行了文件内容的判断.

尝试上传失败:

9b4bbd39b14b

图片发自简书App

判断文件图片类型:

$type    = $_FILES['image']['tmp_name'];

//文件名

//$type    = $this->getImagetype( $type );

$filetype = ['jpg', 'jpeg', 'gif', 'bmp', 'png'];

if (! in_array($type, $filetype))

{

return "不是图片类型";注:如上若用户修改文件后缀为png、jpeg等无法满足限制时,解决方案是采用判断文件的二进制流信息,代码如下:

public function getImagetype($filename)

//判断图片上传格式是否为图片

{

$file = fopen($filename, 'rb');

$bin  = fread($file, 2);

//只读2字节

fclose($file);

$strInfo  = @unpack('C2chars', $bin);

$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);

// dd($typeCode);

$fileType = '';

switch ($typeCode) {

case 255216:

$fileType = 'jpg';

break;

case 7173:

$fileType = 'gif';

break;

case 6677:

$fileType = 'bmp';

break;

case 13780:

$fileType = 'png';

break;

default:

$fileType = '只能上传图片类型格式';

}

// if ($strInfo['chars1']=='-1' AND $strInfo['chars2']=='-40' ) return 'jpg';

// if ($strInfo['chars1']=='-119' AND $strInfo['chars2']=='80' ) return 'png';

return $fileType;

//return返回文件后缀

}

完整限制上传代码:

$imgurl = "http://www.php10086.com/wp-content/themes/inove/img/readers.gif";

//方法1:strrchr()函数查找字符串在另一个字符串中最后一次出现的位置:

echo $ext = strrchr($imgurl,'.');

echo '


';

//方法2:strrpos()函数如需进行大小写不敏感的查找字符串在另一个字符串中最后一次出现的位置

echo $ext1 = substr($imgurl,strrpos($imgurl, '.'));

echo '


';

//方法3:explode()把字符串分割成数组,取数组最后一个键值

echo(@end(explode(".",$imgurl)));

echo '


';

//方法4:pathinfo(path,options)函数以数组的形式返回文件路径信息,包括以下数组元素:[dirname]、[basename]、[extension],可能的值:PATHINFO_DIRNAME – 只返回dirname、PATHINFO_BASENAME – 只返回basename、PATHINFO_EXTENSION – 只返回extension

echo pathinfo($imgurl,PATHINFO_EXTENSION);

print_r(pathinfo($imgurl));

echo '


';

//方法5:getimagesize获取图片大小

$imginfo= getimagesize($imgurl);

print_r($imginfo);

echo end($imginfo);

echo '


';

//方法6:get_headers获取http报头信息,如果图片路径是一个标准URL路径,那么可以使用get_header这个函数返回http报头

$imghttp = get_headers($imgurl,true);

print_r($imghttp);

echo '


';

//方法7:使用gd类库函数exif_imagetype()读取一个图像的第一个字节并检查其签名,如果发现了恰当的签名则返回一个对应的常量,否则返回FALSE,返回值和getimagesize()返回数组中的索引2的值一样

echo exif_imagetype($imgurl);总结:比较主流使用的方法是方法1,如果考虑安全问题的话可以使用方法5,因为方法5可以判断这个文件是否为图像文件,可以避免有人把非法程序伪造成图片文件.注:若不能上传,试试用medium方法,抓包改为mime类型,还是爆出了同样的错误,说明这次不是判断的mime类型了,或者是不止判断了mime类型,猜想可能是对文件的内容进行了判断,可能必须要内容也是图片才行,一般后台判断一个文件是不是图片都是判断一个文件的前几位数据是通过bom头进行判断的,具体说一下利用方法,Windows系统cmd命令行打开,键入如下命令:

copy 文件1.jpg/b+文件2.php/a 新文件.jpg:

9b4bbd39b14b

图片发自简书App

根据两个指定的文件生成一个新文件,再查看生成文件内容:

9b4bbd39b14b

图片发自简书App注:可以看到一句话被添加到了文件末尾,现在把刚刚生成的图片后缀名改为php,这样就可以绕过后端对文件头的检查,现在试试上传还是被拦截了,看来真的不止对文件内容进行了判断,带有后缀名的验证,现在还要把后缀名改为jpg或者png,这样一改确实是可以上传了,但是访问的时候不能被解析为php,再加上之前的%00截断不能用,其他利用方法都是配合着文件包含来执行getshell.

9b4bbd39b14b

图片发自简书App

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Kali Linux是一种流行的渗透测试和网络安全工具,而DVWA(Damn Vulnerable Web App)是一个专门设计用于安全演练和学习的虚拟靶场。下面是Kali DVWA靶场教程的概述。 首先,我们需要在Kali Linux上安装DVWA。这可以通过在终端中使用命令“apt-get install dvwa”来完成。安装完成后,我们可以通过在终端中键入“dvwa”命令来启动DVWA。 接下来,打开浏览器并输入“localhost/dvwa”来访问DVWA的Web界面。在首次访问时,我们将被引导到创建一个数据库的页面。我们需要输入数据库的名称、用户名和密码,然后点击“创建/重置”按钮。 在成功创建数据库后,我们将被重定向到登录页面。默认情况下,用户名和密码都设置为“admin”。输入这些信息后,我们就可以登录DVWA了。 登录后,我们将看到DVWA的主页面。在这里,我们可以选择不同的漏洞类别和安全级别。DVWA提供了各种不同类型的漏洞,包括SQL注入、XSS(跨站脚本)、命令注入等。 我们可以根据自己的需求和技术水平来选择不同的漏洞和安全级别。较低的安全级别将提供一些提示和帮助,而较高的安全级别则更加严格。选择一个漏洞后,我们可以尝试利用漏洞行渗透测试,并学习安全防护措施。 DVWA还提供了一些辅助功能,如渗透测试工具、Payloads(有效负载)等。这些工具可以帮助我们更好地理解和研究渗透测试的概念和技术。 总而言之,Kali DVWA靶场教程为我们提供了一个安全的测试环境,用于实践和学习渗透测试和网络安全技术。通过使用不同的漏洞和安全级别,我们可以提高自己的技术水平,并学习如何防范和应对安全威胁。 ### 回答2: kali dvwa靶场教程是一种用于学习和实践网络安全知识的教学实验环境。它结合了Kali Linux操作系统DVWA(Damn Vulnerable Web Application)漏洞应用程序。 首先,我们需要安装Kali Linux操作系统Kali Linux是一款专门用于渗透测试和网络安全的Linux发行版。可以从官方网站上下载并按照指示行安装。安装完成后,我们需要设置root密码和更新系统。 之后,我们需要安装DVWA应用程序。DVWA是一个致力于提供不安全的Web应用程序的教学平台,旨在帮助学习者了解和学习不同类型的网络攻击和防御。通过git clone命令将DVWA项目克隆到本地,并将其配置为Kali Linux的Web服务器。 接下来,我们需要启动Kali LinuxDVWA应用程序。打开终端,并在终端中输入"service apache2 start"命令来启动Apache服务器。然后,我们可以在浏览器中输入"http://localhost/dvwa"来访问和配置DVWA应用程序。 在DVWA的界面上,我们可以选择不同的安全级别,从低到高,以逐步对应用程序测试和攻击。我们可以使用Kali Linux中的各种渗透工具,如Metasploit、nmap、Burp Suite等来测试和攻击。 最后,我们需要按照教程和指导行实践和学习。通过分析和理解DVWA应用程序中的漏洞和弱点,实施相应的安全措施和防御机制,从而提高我们的网络安全意识和技能。 总之,kali dvwa靶场教程是一个强大的学习工具,可以帮助我们了解和学习网络安全知识,并提供了实践和测试网络攻击和防御的实验环境。通过合理利用这个教程,我们可以不断提升自己的网络安全技能和意识。 ### 回答3: Kali DVWA靶场教程是一种用于安全测试和教育目的的虚拟漏洞应用程序。它提供了许多常见的Web应用程序漏洞,使安全专业人员能够在不损害真实系统的情况下行实践和学习。 首先,你需要将Kali Linux操作系统安装在你的电脑上。Kali Linux是一个专门为渗透测试和网络安全而设计的操作系统。你可以从官方网站上下载并按照说明行安装。 完成安装后,你需要下载和安装DVWA(Damn Vulnerable Web Application)。这是一个虚拟的Web应用程序,包含了各种漏洞,如SQL注入、跨站脚本攻击等。你可以从DVWA的官方网站上获取安装包并按照说明行安装。 安装完成后,你可以通过在浏览器中输入“localhost/dvwa”来访问DVWA。这将带你DVWA的登录页面。默认情况下,用户名为“admin”,密码为空。 登录后,你可以开始漏洞测试和实践。在DVWA中,你可以选择不同的安全级别,从低到高逐渐增加漏洞的难度。你可以选择一个具体的漏洞,例如SQL注入,然后通过尝试不同的攻击和绕过技术来测试系统的弱点。 在完成测试后,你可以通过DVWA提供的修复功能来修补漏洞。这将帮助你学习如何保护Web应用程序免受常见的攻击。 总结来说,Kali DVWA靶场教程是一个能够提供安全测试和教育资料的虚拟漏洞应用程序。通过在Kali Linux中安装和使用DVWA,你可以学习不同的Web应用程序漏洞,并掌握相应的修复技术,以提高系统的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值