[6]-文件上传基本原理-bwAPP环境搭建
一、文件上传漏洞定义及原理
1.定义
- 关键词:绕过
- 文件上传
大部分web应用都具有的功能,如上传图片、附件、头像等- 文件上传漏洞
开发者验证不充足(包含前后端),导致用户可以上传恶意文件,如木马、病毒、恶意脚本或Webshell等
2.原理
最简单环境下使用-----webshell----利用可以执行命令的函数
PHP的eval
函数:可以执行一个字符串,并认为其为php代码,攻击者传输php指令到webshell,执行并返回结果。
当然,作为防火墙,eval
函数属于明显的特征,一般都会被拦截。最简单的一句话木马
如果你讲本句话放到window中,大概率报毒,并会给你删除解释一句,写文档时不要直接讲该代码写入markdown中,杀毒工具检测到特征会删除本篇文章。
二、靶场搭建
1.vmware+bee-box搭建
注意:此方法较为稳妥,故首选该方法,而且测试样例也多,但依旧存在不少问题,多多百度吧~
本来打算使用Apache+mysql+php的方式搭建靶场的,结果看到有博客说有vm虚拟机版的,可以省很多事,
博客:https://cloud.tencent.com/developer/article/1180474bee-box安装,参考:https://blog.csdn.net/qq_40606798/article/details/82502257
更改地址-----(没必要了,找网盘)
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
修改配色:https://blog.csdn.net/liaowenxiong/article/details/120902344 ----(没必要了,我试过了,源太老,下载或者更新源很慢,Ubuntu8.04)
# 查看当前版本 cat /etc/issue # 修改源
解释下,3-5没必要做了,3太慢,4改后需要old源,依旧太慢,血泪史。
下载安装bee-box后,修改键盘为china,删除原有键盘布局
输入ip a
指令,确定bee-box的ip地址,即可在物理机Firefox进行操作
2.centos7+docker安装靶场
注意:现存大部分docker bwapp镜像存在问题,我在部署过程中遇到了
文件上传后无法保存到服务器
的问题,这里做一个docker安装bwapp镜像记录,如此方法不成,建议立即用vm+bee-box方式。(2023/1/23日更正,问题已解决,详看:https://www.cnblogs.com/Miubai-blog/articles/17065714.html)这里下载最小化的centos即可,本文使用centos镜像配置为
CentOS-7-x86_64-Minimal-2207-02.iso
网络配置
使用nmtui
命令,选择Edit
,然后移动到Automatically connect
空格选中,使其能够自动获取ip
安装
ifconfig
等常用的网络配置命令yum install net-tools.x86_64
配置yum源
这里一直没能成功,便没有配置,速度也还行。安装docker
过程参考菜鸟教程,使用daocloud
脚本一键安装curl -sSL https://get.daocloud.io/docker | sh
docker安装完成后
还源步骤如下:进入daemon.json
然后写入网易镜像,阿里也行,保存后,重启docker即可# 切换国内源 vi /etc/docker/daemon.json { "registry-mirrors": ["https://hub-mirror.c.163.com/"] } service docker restart
拉取镜像
注:本节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,运行完这条命令后,访问响应的网址即可
docker常用命令
# 查看有哪些pull的镜像 docker image ls # 查看有哪些在运行 docker ps -a # 启动某个容器 docker start xxx # xxx 就是上一步获得的 container id,运行完这条命令后,访问响应的网址即可 # 关闭某个容器 docker stop xxx # cnetos7 重启docker systemctl restart docker # 其他的可以边做边学
初始化数据库
在浏览器中输入url# 格式 ip:port/install.php # 如:本文 192.168.20.30:80/install.php
注册用户
输入完成后,注册用户后即可正常使用,
Bwapp默认账密登入:bee/bug
3.Windows + Docker安装
- Windows 10家庭版安装指南
安装步骤
先安装wsl,因为家庭版没有
Hyper-V
再在Microsoft store下载Linux发行版,如ubuntu或者kali等等
安装docker-desktop
修改docker路径到D盘
修改image路径到D盘
修改源为国内如阿里等,进行加速
参考博文:
- 总结:
不建议家庭版装,麻烦,相比之下还不如手动vmware+ubuntu+docker来的简单,因为这种配置都比较常规化,学习成本低。此外,由于个人电脑环境原因,使用wsl费力不讨好,cpu和内存全爆,所以最后我采取远程shell的方式,将靶机与本机分离。
4.cnetos7 +宝塔 +bwapp
固定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
基础设置完成后,配置基础服务,然后下载bwapp,部署即可,这里不想再写了。
5.总结----上述安装血泪史
搭建环境是,首先想到采用window+docker模式,踩过了许多坑,最终搭建完成,发现占用内存极其严重,虽然不甘心,但还是弃置该方案。
次级方案就是
vmware+Ubuntu+docker
,发现,根本无法换apt-get
源,后续排查过程后发现属于网络问题,但源的问题已经导致我最终放弃该方案然后,在启用
vmware+cnetos7+docker
的方式,因为自身对于cnetos7
使用较为熟练,顺嘴一体,之所以先采用Ubuntu
是考虑到cnetos已经结束开源,不再维护。
此方式确实成功了,期间也遇到很多问题,其中最难受的莫过于网络问题导致多次pull
bwapp。因为邻居家的网络,直到开热点才成功pull镜像,此时已经耗费两天时间。😭😭
真正测试时又发现,提供的docker镜像有问题,上传文件无法保存。😭😭上一步失败后,又发现bwapp原来可以单独安装,此时我想到可以采用的解决方法有:
centos7+apache+mysql+bwapp
这种方法太费事了,包括cnetos7+宝塔+bwapp
弃置windows+phpstudy+bwapp
这种方式,其实是所有搭建过程中,我认为最简便的,推荐,但我考虑到自身特殊性,弃置。- 搜集资料过程中,发现还可以安装
bee-box
,而且所提供的漏洞更多最终采用
vmware+bee-box
本打算在sourceforge
下载,4kb的龟速劝退,然后找了个网盘地址,刚好此时已经接近凌晨,手机网盘下了一晚上,下完了。最后---发现有在线版的---可以再mituan.zone直接使用
网址:https://mituan.zone/#/account/login
嗯,这是最后才发现的环境推荐
- 优先采用
mituan.zone
网站,采取在线方式进行学习,难度⭐- 次可采用
windows+phpstudy+bwapp
,自建,难度⭐⭐- 再次采用
vmware+cnetos7+docker+bwapp
,自建,但存在白费功夫概论,难度⭐⭐⭐- 再次可采用
vmware+centos7+宝塔+bwapp
,自建,难度⭐⭐⭐⭐- 万不得已采用
windows+wsl+docker+bwapp
,自建不推荐,麻烦各种问题,解决方案少,难度⭐⭐⭐⭐⭐总结:
此次,搭建靶场环境,可谓是血泪史,从白费了不少功夫,基本上把所有常见服务都弄了一遍,总结此次环境搭建过程,收获一下教训:
- 靶场(或是以后的软件)搭建前一定要先了解清楚
- 先思考能有的搭建方式,不能亦步亦趋
- 明确第一时间任务,不要耗费不必要的时间在非主要任务上。
收获:
- 熟练Linux操作
- 加深对于相关配置文件了解
- 加深对于docker的认知
三、实际场景运用
1.简单的文件上传漏洞
制作webshell
第一节第2小结原理中讲解了webshell原理,这里只需要利用该原理制作并上传即可,这里注意选择bug为Unrestricted File Upload
,并选择漏洞等级为low
进行测试。
上传完成后,根据返回链接,即可利用
关于此处,为何返回为空,因为构造的函数是处理POST
的请求,而通过url
访问采用的是GET
请求,因此,返回的为空白。我们可以利用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成功运行。
解释
上文构造的访问中,echo getcwd();
其中echo
属于属于php语法,相当于c语言的pringf()
;getcwd()
同样也是php语言的函数,作用是放回当前工作目录,详见https://www.runoob.com/php/func-directory-getcwd.html
另外需要指定所有指令,指派给hacker
字段,因为一句话木马中写的取的参数是hacker
2.集成环境--中国菜刀
- 简介
webshell利用的一个集成环境工具,工作在windows平台下- 使用
这里不做介绍,github上有,是否带毒自行斟酌
3.其他类型的一句话木马
- 原理
与上文相似,都是调用这种较为危险的函数,- 写法
与上文相似,依据后端语言不同,其函数和语法存在微妙差异
本文来自博客园,作者:缪白(Miubai),转载请注明原文链接:https://www.cnblogs.com/Miubai-blog/articles/17063683.html