[6]-文件上传基本原理-bwAPP环境搭建

一、文件上传漏洞定义及原理

1.定义

  1. 关键词:绕过
  2. 文件上传
    大部分web应用都具有的功能,如上传图片、附件、头像等
  3. 文件上传漏洞
    开发者验证不充足(包含前后端),导致用户可以上传恶意文件,如木马、病毒、恶意脚本或Webshell等

2.原理

  1. 最简单环境下使用-----webshell----利用可以执行命令的函数
    PHP的eval函数:可以执行一个字符串,并认为其为php代码,攻击者传输php指令到webshell,执行并返回结果。
    当然,作为防火墙,eval函数属于明显的特征,一般都会被拦截。

  2. 最简单的一句话木马
    如果你讲本句话放到window中,大概率报毒,并会给你删除

    image-20230121093108311

    解释一句,写文档时不要直接讲该代码写入markdown中,杀毒工具检测到特征会删除本篇文章。

二、靶场搭建

1.vmware+bee-box搭建

  1. 注意:此方法较为稳妥,故首选该方法,而且测试样例也多,但依旧存在不少问题,多多百度吧~

  2. 本来打算使用Apache+mysql+php的方式搭建靶场的,结果看到有博客说有vm虚拟机版的,可以省很多事,
    博客:https://cloud.tencent.com/developer/article/1180474

  3. bee-box安装,参考:https://blog.csdn.net/qq_40606798/article/details/82502257

  4. 更改地址-----(没必要了,找网盘)

    https://nchc.dl.sourceforge.net/project/bwapp/bee-box/bee-box_v1.6.7z
    https://liquidtelecom.dl.sourceforge.net/project/bwapp/bee-box/bee-box_v1.6.7z
    
  5. 修改配色:https://blog.csdn.net/liaowenxiong/article/details/120902344 ----(没必要了,我试过了,源太老,下载或者更新源很慢,Ubuntu8.04)

    # 查看当前版本
    cat /etc/issue
    # 修改源 
    
  6. 解释下,3-5没必要做了,3太慢,4改后需要old源,依旧太慢,血泪史。
    下载安装bee-box后,修改键盘为china,删除原有键盘布局
    输入ip a指令,确定bee-box的ip地址,即可在物理机Firefox进行操作

2.centos7+docker安装靶场

  1. 注意:现存大部分docker bwapp镜像存在问题,我在部署过程中遇到了文件上传后无法保存到服务器的问题,这里做一个docker安装bwapp镜像记录,如此方法不成,建议立即用vm+bee-box方式。(2023/1/23日更正,问题已解决,详看:https://www.cnblogs.com/Miubai-blog/articles/17065714.html)

  2. 这里下载最小化的centos即可,本文使用centos镜像配置为CentOS-7-x86_64-Minimal-2207-02.iso

  3. 网络配置
    使用nmtui命令,选择Edit,然后移动到Automatically connect空格选中,使其能够自动获取ip
    image-20230120203604370

  4. 安装ifconfig等常用的网络配置命令

    yum install net-tools.x86_64
    
  5. 配置yum源
    这里一直没能成功,便没有配置,速度也还行。

  6. 安装docker
    过程参考菜鸟教程,使用daocloud脚本一键安装

    curl -sSL https://get.daocloud.io/docker | sh
    
  7. docker安装完成后
    还源步骤如下:进入daemon.json然后写入网易镜像,阿里也行,保存后,重启docker即可

    # 切换国内源
    vi /etc/docker/daemon.json
    {
     "registry-mirrors": ["https://hub-mirror.c.163.com/"]
    }
    service docker restart
    
  8. 拉取镜像
    注:本节6、7均摘自老师课件

    # 拉取镜像
    docker pull raesene/bwapp
    docker run -d -p 80:80 raesene/bwapp 
    # 根据课程中的演示搭建好 bWAPP 实验环境后,以后再启动 bWAPP
    docker container list -a # 查看 container id
    docker start xxx # xxx 就是上一步获得的 container id,运行完这条命令后,访问响应的网址即可
    
  9. docker常用命令

    # 查看有哪些pull的镜像
    docker image ls
    # 查看有哪些在运行
    docker ps -a
    # 启动某个容器
    docker start xxx # xxx 就是上一步获得的 container id,运行完这条命令后,访问响应的网址即可
    # 关闭某个容器
    docker stop xxx
    # cnetos7 重启docker
    systemctl restart docker
    # 其他的可以边做边学
    
  10. 初始化数据库
    在浏览器中输入url

    # 格式
    ip:port/install.php
    # 如:本文
    192.168.20.30:80/install.php
    
  11. 注册用户
    输入完成后,注册用户后即可正常使用,
    Bwapp默认账密登入:bee/bug
    image-20230120205504347

3.Windows + Docker安装

  1. Windows 10家庭版安装指南
    安装步骤
  • 先安装wsl,因为家庭版没有Hyper-V

  • 再在Microsoft store下载Linux发行版,如ubuntu或者kali等等

  • 安装docker-desktop

  • 修改docker路径到D盘

  • 修改image路径到D盘

  • 修改源为国内如阿里等,进行加速

参考博文:

  1. 总结:
    不建议家庭版装,麻烦,相比之下还不如手动vmware+ubuntu+docker来的简单,因为这种配置都比较常规化,学习成本低。此外,由于个人电脑环境原因,使用wsl费力不讨好,cpu和内存全爆,所以最后我采取远程shell的方式,将靶机与本机分离。

4.cnetos7 +宝塔 +bwapp

  1. 参考:https://cloud.tencent.com/developer/article/1638192

  2. 固定cnetos7 ip
    参考:https://cloud.tencent.com/developer/article/1754259,执行vi /etc/sysconfig/network-scripts ifcfg-ens33 获取本机网卡、ip地址和本机网关:

    # 这里获得网卡为ens33,本机ip和掩码为 192.168.20.130/24
    [root@localhost ~]# ip a
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:58:a0:42 brd ff:ff:ff:ff:ff:ff
        inet 192.168.20.130/24 brd 192.168.20.255 scope global noprefixroute dynamic ens33
           valid_lft 1092sec preferred_lft 1092sec
        inet6 fe80::cbc5:2061:a5d2:15a5/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    # 下文这里获得本机网关为 192.168.20.2
    [root@localhost ~]# cat /etc/resolv.conf
    # Generated by NetworkManager
    search localdomain
    nameserver 192.168.20.2
    

    执行vi /etc/sysconfig/network-scripts/ifcfg-ens33

    成功的配置修改如下:

    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=static
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=ens33
    UUID=64bff8d0-57f6-4dd3-a65a-bb907d61bb87
    DEVICE=ens33
    ONBOOT=yes
    
    IPADDR=192.168.20.130
    NETMASK=255.255.255.0
    GATEWAY=192.168.20.2
    DNS1=8.8.8.8
    DNS2=8.8.4.4
    

    其中,主要修改内容如下:

    # 修dhcp为static
    BOOTPROTO=static
    # 修改为yes,部分已经默认为yes则可以不改,如本文
    ONBOOT=yes
    # 添加静态ip地址,本机ip上文获取的
    IPADDR=192.168.20.130
    # 添加掩码,同样上文获得
    NETMASK=255.255.255.0
    # 填写网关 #本机网关
    GATEWAY=192.168.20.2 #本机网关
    # 不添加dns可能无法联网
    DNS1=8.8.8.8
    DNS2=8.8.4.4
    

    重新启动网络服务,出现ok字样即可

    service network restart
    

    image-20230120230504598

  3. 基础设置完成后,配置基础服务,然后下载bwapp,部署即可,这里不想再写了。

5.总结----上述安装血泪史

  1. 搭建环境是,首先想到采用window+docker模式,踩过了许多坑,最终搭建完成,发现占用内存极其严重,虽然不甘心,但还是弃置该方案。

  2. 次级方案就是vmware+Ubuntu+docker,发现,根本无法换apt-get源,后续排查过程后发现属于网络问题,但源的问题已经导致我最终放弃该方案

  3. 然后,在启用vmware+cnetos7+docker的方式,因为自身对于cnetos7使用较为熟练,顺嘴一体,之所以先采用Ubuntu是考虑到cnetos已经结束开源,不再维护。
    此方式确实成功了,期间也遇到很多问题,其中最难受的莫过于网络问题导致多次pullbwapp。因为邻居家的网络,直到开热点才成功pull镜像,此时已经耗费两天时间。😭😭
    真正测试时又发现,提供的docker镜像有问题,上传文件无法保存。😭😭

  4. 上一步失败后,又发现bwapp原来可以单独安装,此时我想到可以采用的解决方法有:

    • centos7+apache+mysql+bwapp这种方法太费事了,包括cnetos7+宝塔+bwapp弃置
    • windows+phpstudy+bwapp这种方式,其实是所有搭建过程中,我认为最简便的,推荐,但我考虑到自身特殊性,弃置。
    • 搜集资料过程中,发现还可以安装bee-box,而且所提供的漏洞更多
  5. 最终采用vmware+bee-box
    本打算在sourceforge下载,4kb的龟速劝退,然后找了个网盘地址,刚好此时已经接近凌晨,手机网盘下了一晚上,下完了。

  6. 最后---发现有在线版的---可以再mituan.zone直接使用
    网址:https://mituan.zone/#/account/login
    嗯,这是最后才发现的

  7. 环境推荐

    • 优先采用mituan.zone网站,采取在线方式进行学习,难度⭐
    • 次可采用windows+phpstudy+bwapp,自建,难度⭐⭐
    • 再次采用vmware+cnetos7+docker+bwapp,自建,但存在白费功夫概论,难度⭐⭐⭐
    • 再次可采用vmware+centos7+宝塔+bwapp,自建,难度⭐⭐⭐⭐
    • 万不得已采用windows+wsl+docker+bwapp,自建不推荐,麻烦各种问题,解决方案少,难度⭐⭐⭐⭐⭐
  8. 总结:
    此次,搭建靶场环境,可谓是血泪史,从白费了不少功夫,基本上把所有常见服务都弄了一遍,总结此次环境搭建过程,收获一下教训:

    • 靶场(或是以后的软件)搭建前一定要先了解清楚
    • 先思考能有的搭建方式,不能亦步亦趋
    • 明确第一时间任务,不要耗费不必要的时间在非主要任务上。

    收获:

    • 熟练Linux操作
    • 加深对于相关配置文件了解
    • 加深对于docker的认知

三、实际场景运用

1.简单的文件上传漏洞

  1. 制作webshell
    第一节第2小结原理中讲解了webshell原理,这里只需要利用该原理制作并上传即可,这里注意选择bug为Unrestricted File Upload,并选择漏洞等级为low进行测试。
    image-20230121090244836

  2. 上传完成后,根据返回链接,即可利用
    image-20230121090509656
    关于此处,为何返回为空,因为构造的函数是处理POST的请求,而通过url访问采用的是GET请求,因此,返回的为空白。

  3. 我们可以利用curl工具,手工构造测试案例,

    curl -d "hacker=echo getcwd();" http://192.168.0.105/bWAPP/images/shell.php
    /var/www/bWAPP/images
    curl -d "hacker=echo get_current_user();" http://192.168.0.105/bWAPP/images/shell.php
    www-data
    

    结果如下,则表明webshell成功运行。
    image-20230121093235977

  4. 解释
    上文构造的访问中,echo getcwd();其中echo属于属于php语法,相当于c语言的pringf()getcwd()同样也是php语言的函数,作用是放回当前工作目录,详见https://www.runoob.com/php/func-directory-getcwd.html
    另外需要指定所有指令,指派给hacker字段,因为一句话木马中写的取的参数是hacker

2.集成环境--中国菜刀

  1. 简介
    webshell利用的一个集成环境工具,工作在windows平台下
  2. 使用
    这里不做介绍,github上有,是否带毒自行斟酌

3.其他类型的一句话木马

  1. 原理
    与上文相似,都是调用这种较为危险的函数,
  2. 写法
    与上文相似,依据后端语言不同,其函数和语法存在微妙差异
posted @ 2023-01-21 11:28  缪白(Miubai)  阅读(365)  评论(0编辑  收藏  举报