购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.2 Web渗透基础

Web渗透与业务逻辑漏洞挖掘不同。Web渗透的目的是:获得系统权限或获得Web服务管理权限,从而直接或间接接管网站服务;而业务逻辑漏洞影响的是业务本身,例如通过修改付款金额实现1分钱购物等,业务逻辑漏洞产生的主要原因是开发者在业务流程的逻辑设计上存在问题。

Web渗透的流程为:Web应用信息收集(CMS版本、开发语言、robots.txt文件等)、历史漏洞搜索、漏洞利用、获取系统权限及数据。

在进行漏洞利用或是漏洞验证的过程中,常常会用到一些专业术语,这里先做一个简单的介绍。

· POC:全称为“Proof of Concept”,中文含义是“概念验证”,常指一段验证漏洞的测试代码。

· EXP:全称为“Exploit”,中文含义是“漏洞利用”,指利用系统漏洞进行攻击的动作。

· Payload:中文含义是“有效载荷”或“载荷”,指成功利用漏洞之后,真正在目标系统执行的代码或指令。

· Shellcode:可以简单翻译为“Shell代码”,是Payload的一种,因其建立正向/反向Shell而得名。

3.2.1 一句话木马概述(WebShell)

在渗透测试过程中,测试者常常会利用WebShell达到控制网站服务器的目的。最简单的WebShell就是一句话木马。一句话木马因其非常简短、通常只有一句话而得名。

我们知道,Shell一般指介于系统内核层与用户层之间的命令执行环境。例如我们可以利用cmd命令执行下发命令,让系统实现对应功能,而WebShell的功能也是如此。

WebShell是以PHP、JSP、ASP或者CGI等网页文件形式存在的一种命令执行环境,也可以将其称作一种网页后门。攻击者在入侵了一个网站后,通常会将后门文件与网站服务器Web目录下正常的网页文件混在一起,然后就可以使用浏览器来访问这些后门,得到一个命令执行环境,以达到控制网站服务器的目的。

例如当网站存在文件上传漏洞时,攻击者就可以把其制作的一句话木马的代码文件上传到服务器上。如果服务器能够正常解析一句话木马文件,那么此时攻击者就可以利用这个文件对网站及服务器进行修改内容、执行系统命令等操作,从而控制服务器。这个过程被称为“获取系统控制权”,也就是人们常说的“网站被黑”或“拿下服务器”。

3.2.2 一句话木马实现原理

以PHP一句话木马为例:<?php@eval($_POST["Alphabug"]);?>(后续一句话木马的密码均为Alphabug)。

假设服务器上存在一句话木马文件shell.php,已知请求参数为“Alphabug”,请求方式为POST。当服务器接收到“Alphabug”参数时,通过eval函数执行“Alphabug”传递参数的内容。简单来说,服务器会把“Alphabug”参数的值,当作代码来执行。假如所传递的参数值为“phpinfo();”,那么PHP代码执行成功后,浏览器就会输出“phpinfo();”执行的内容,如图3-2所示。

图3-2 一句话木马实现原理

几种常见语言的一句话木马代码汇总如下。

a)PHP一句话代码:

b)ASP一句话代码:

c)ASPX一句话代码:

d)JSP一句话代码(部分):

3.2.3 文件上传漏洞

文件上传漏洞产生的原因是后端对用户所上传的附件缺少类型判断、内容判断、后缀判断、文件重命名等操作。

大多数网站都可能存在上传图片、视频、音乐、附件等功能,如果该功能存在漏洞,攻击者就能够利用漏洞点将一句话木马上传到服务器中,通过一句话木马对服务器进行控制。

接下来我们以FeiFeiCMS为例,演示文件上传漏洞在渗透测试中的利用。

案例:FeiFeiCMS文件上传漏洞

在FeiFeiCMS(PHP)网站中,多处存在文件上传功能,经过测试发现该功能存在文件上传漏洞。FeiFeiCMS管理系统如图3-3所示。

图3-3 FeiFeiCMS管理系统

在任意一个文件上传功能处,选择PHP类型的一句话木马文件并上传。按F12调出开发者工具,通过预览“图片”找到木马文件上传的地址,如图3-4所示。

图3-4 文件上传漏洞

找到上传文件所在的地址,如图3-5所示,该地址就是Shell链接的地址。

图3-5 复制Shell链接

复制Shell链接地址后,通过蚁剑进行连接,如图3-6所示。最终实现“利用文件上传漏洞获取系统控制权”的效果。

图3-6 通过蚁剑进行连接

使用蚁剑添加好连接数据后,可以双击该数据条目,进行目录浏览,如图3-7所示。

图3-7 目录浏览

也可以利用蚁剑提供的虚拟终端功能执行命令,如图3-8所示。

图3-8 虚拟终端

3.2.4 SQL注入漏洞

在一些提供了浏览文章或新闻功能的网站中,当网站的文章或新闻比较多的时候,程序员可能会添加“搜索”功能以方便用户进行搜索查询。但是,如果没有处理好用户查询所输入的字符串,那么用户可能输入非预期的恶意字符串,造成SQL注入漏洞。除了搜索功能之外,登录、注册、个人资料、文章栏目等功能都可能存在SQL注入漏洞。

接下来我们以KKCMS为例,演示SQL注入漏洞在渗透测试中的利用。

案例:KKCMS SQL注入漏洞

访问某网站,可以注意到网站的网址形如/xxx?xxx=1这种形式(如图3-9所示),在这种情况下该网站可能存在SQL注入漏洞。

图3-9 KKCMS

为了验证这个想法,在传递的参数处输入“and 1=1”(如图3-10所示)和“and 1=2”,如图3-11所示进行测试,判断是否存在漏洞。结果发现当输入“and 1=2”时页面异常,说明这里存在注入类型为布尔注入的SQL注入漏洞。

图3-10 SQL注入漏洞检测

图3-11 SQL注入漏洞检测

这时,可以通过手工注入依次得到这个网站的数据库、数据表及数据,但也可以选择一种更简单更实用的方法,即利用Kali自带的sqlmap工具实现自动化注入。利用sqlmap工具判断注入点,如图3-12所示。若需要输入参数,按Enter键选择默认参数即可。

图3-12 sqlmap工具

从sqlmap结果中可以看到该网站存在布尔盲注和时间盲注这两种类型的SQL注入漏洞,如图3-13所示。

图3-13 sqlmap结果

判断出存在SQL注入漏洞后,就可以利用sqlmap获取数据库、数据表及数据中的管理账号密码了。首先使用sqlmap中的--dbs参数获取数据库名,命令如下,结果如图3-14所示。

图3-14 获取数据库名

在获取数据库名后,使用-D指定数据库名称,使用--tables参数获取该数据库中的数据表名,命令如下,结果如图3-15所示。

图3-15 获取数据表名

在得到数据表名后,使用-D指定数据库名,-T指定数据表名,使用--dump将该表中的数据导出,从而读取账号密码,命令如下,结果如图3-16所示。

图3-16 读取账号密码

获得数据库中存放的用户密码“e10adc3949ba59abbe56e057f20f883e”。这是密文,需要对其进行解密。使用CMD5网站进行解密,得到明文为123456,如图3-17所示。

图3-17 CMD5解密

最终得到用户名为admin,密码为123456。通过前面讲过的信息收集方法可以找到后台地址为/admin/。用刚刚获得的用户名密码进行登录测试,成功登录后台,如图3-18所示。

图3-18 KKCMS后台

3.2.5 RCE漏洞

RCE(Remote Code/Command Execute)漏洞为远程代码/命令执行漏洞,是最危险的漏洞类型之一。这种漏洞出现的原因是没有在用户输入的地方做处理或过滤不严格,导致攻击者可以在不对设备进行物理访问的情况下,在本地网络或Internet上的目标系统中远程运行恶意代码。RCE漏洞可能导致服务器失去对系统或其单个组件的控制,以及可能导致敏感数据被盗。

接下来我们以Discuz为例,演示RCE漏洞在渗透测试中的利用。

案例:Discuz 7.x/6.x RCE漏洞

打开存在Discuz RCE漏洞的网站,如图3-19所示。

图3-19 存在漏洞的网站

随便打开一个帖子,如图3-20所示。使用Burp Suite抓包,如图3-21所示。

图3-20 打开一个帖子

图3-21 用Burp Suite抓包

将抓到的请求数据包发送到Repeater(重复发包)模块,如图3-22所示。

图3-22 发送到Repeater模块

编辑请求数据包里cookie的值,使用公开Payload,测试代码能否被执行。Payload为:

在这串Payload中,var_dump(md5(1))的作用是为了测试PHP代码能否被成功执行,其中var_dump()函数是用于输出变量类型及内容,md5()函数是将字符串进行MD5算法加密。观察是否会将1的md5值进行输出,从而判断能否进行代码执行。

发送含有测试Payload的请求包,可以看到响应包里1的md5值被输出,如图3-23所示,从而可以证实此处能够利用漏洞进行代码执行。

图3-23 测试发包

确定漏洞能够成功利用后,可以利用system()函数执行命令,如图3-24所示。

Payload为:

使用GET方式传递参数:1=id

图3-24 执行命令

利用file_put_contents()函数,写入一句话木马,如图3-25所示。

Payload为:

使用GET方式传递参数:

传递参数中的“PD9waHAgZXZhbCgkX1BPU1RbMV0pPz4=”是一句话木马进行Base64编码后的结果。测试时之所以需要将一句话木马进行Base64编码,再利用base64_decode()函数进行Base64解码后写入,是因为如果直接写入一句话木马,可能会被一些安全设备或安全软件拦截。

图3-25 写入WebShell

WebShell写入成功后,使用蚁剑进行连接,如图3-26所示。

图3-26 使用蚁剑进行连接

使用蚁剑连接成功,接着就可以进行文件管理、虚拟终端等操作,如图3-27所示。

图3-27 文件管理 4tfnmc6BbP/g16WqC9mjw0tv+5gy0HQy8jWktJvMo0dqtoD8sZF5ShvyVG81QITb

点击中间区域
呼出菜单
上一章
目录
下一章
×