[1]-bwapp-文件上传无法保存-问题&解决方案

一、问题描述

1.参考

  1. apache2 404解决
  2. apache2文件配置结构
  3. 文件无法移动更改权限

2.本机环境

  1. 物理机:windows10
  2. 虚拟化软件:vmware17
  3. 虚拟系统:centos7.9
  4. docker容器:Docker version 20.10.23, build 7155243

3.问题描述

  1. bwapp简介:一款网络安全靶场练习环境
  2. 报错复现
    bug:Unrestricted File Upload
    level:low
    现象:upload后,点击链接,无文件
  3. 完整过程
    初始化环境,登录后,选择文件上传漏洞时,上传webshell后发现,前端能够回显文件存放地址,如下图
    image-20230123230525976
    但,点击here地址时,报错如下,其他文件也同:
    image-20230123230604654

二、问题排查

1.解决方法

  1. 进入docker容器

    # 1.确定运行的docker容器,以确定bwapp的container id
    docker container list -a
    # 2.反弹shell的方式进入docker内部,7732277baf1f为1中所确定的container id
    docker exec -it 7732277baf1f bash
    
  2. 查看apache错误日志,确定错误原因

    # 1.搜索apache2错误日志
    root@7732277baf1f:/# find . -name "error.log"
    ./var/log/mysql/error.log
    ./var/log/apache2/error.log #就是这个
    # 2.查看日志内容
    root@7732277baf1f:/# cat ./var/log/apache2/error.log -n
         7  [Fri Jan 20 06:41:28.255411 2023] [:error] [pid 455] [client 192.168.20.1:4516] PHP Warning:  move_uploaded_file(): Unable to move '/tmp/phpSgfVv4' to 'images/shell.php30' in /app/unrestricted_file_upload.php on line 34, referer: http://192.168.20.130/unrestricted_file_upload.php
    
  3. 更改权限
    参考:https://www.itbaoku.cn/post/752548/PHP-Warning-move_uploaded_file()-unable-to-move

    # 更改权限
    sudo chown -R www-data:www-data /var/www/html/
    
  4. 测试是否成功
    文件成功上传
    image-20230123235112957

  5. 测试能否执行php指令
    测试能执行php指令,并返回
    image-20230123235345294

2.处理过程

  1. 初步推断
    根据前端显示,此时信息过于模糊,暂不确定问题范围

  2. 确定文件是否成功上传
    此时自然需要确定该文件是否被成功上传至指定目录,可在url中进入images目录下,发现并没有上传的文件shell.php30,断定文件未成功上传
    image-20230123231119610

  3. 暂无思路,求助搜索引擎
    此时,一直到文件未成功上传,利用搜索引擎,控制好关键词,寻求解决思路。
    此阶段,在CSDN中看到有人遇到同样问题,但需要会员才能看,嗯,贫穷的我决定再探一探。
    耗费大量时间,没找到共享的、免费的现成解决方法。

  4. 更改思路,自力更生
    既然没有现成答案,那边自己来排查。既然上传失败,则问题可能出在与文件上传有关的函数上,通过搜索,得知apache配置文件可能有需要的东西。

  5. 缩小范围,找到关键配置文件
    根据此博文,告知方法为修改访问权限、修改conf/httpd.conf文件某段内容。
    初次尝试修改访问权限,无果(后确定,权限给错地点了)
    修改指定配置文件,配置内容,发现为apache2故对应地点为/var/apache2/apache2.conf

  6. 配置一致,灵光一现,确定问题根源

    发现apache2.conf文件内容配置没有不妥的地方,搭眼顺带扫了一眼整个配置内容,看到ErrorLog: The location of the error log file,启发从错误日志入手。
    利用find 命令,找到apache对应错误日志。

    image-20230123233207218
    在日志中发现错误原因如下:

    [Mon Jan 23 14:20:56.312204 2023] [:error] [pid 36] [client 192.168.20.1:3308] PHP Warning:  move_uploaded_file(): Unable to move '/tmp/phpdHBnPf' to 'images/shell.php30' in /app/unrestricted_file_upload.php on line 34, referer: http://192.168.20.130/unrestricted_file_upload.php
    

    至此发现问题根源在于,文件上传时先放置于tmp文件下,但在传输结束后,移动至正式文件目录的过程中,失败。根据日志信息,最终找到解决方法,参见:https://www.itbaoku.cn/post/752548/PHP-Warning-move_uploaded_file()-unable-to-move

3.总结

  1. 加深文件上传理解
    明白文件从client到server的指定目录时的整个过程为,服务器先接收来自客户端发送的文件,并将其先放置于tmp文件夹下,接收完成后,再利用move_uploaded_file()函数,将临时文件移动至指定目录为正式文件
  2. 明确排错流程
    初步判断---搜索---查看对应错误日志---确定错误原因----寻求解决方式---解决问题
  3. 认识日志重要
    此次不仅仅解决了问题,而且还明确的知道了错误的根源,重要的思想在于日志上,这为日后处理疑难问题做好铺垫。
posted @ 2023-01-24 00:07  缪白(Miubai)  阅读(414)  评论(2编辑  收藏  举报