声明:该笔记为up主 泷羽sec 的课程笔记,本节链接:链接
警告:此教程仅作学习用途,若有用于非法行为的,概不负责
靶机下载地址:https://download.vulnhub.com/dc/DC-2.zip
攻击机_ip:192.168.31.208
DC-2_ip:未知
网络:桥接模式
信息收集
①、nmap探测主机存活
nmap -sP 192.168.31.0/24
②、arp-scan探测主机存活
arp-scan -l
🔑 通过上述扫描可获得DC-2靶机IP:192.168.31.14
③、端口扫描
找到靶机后对端口进行扫描,发现开放了80、7744端口
nmap -p- -v 192.168.31.14
-p-
:这个参数告诉nmap扫描目标主机上的所有可能的端口(从1到65535)。-p
参数后面紧跟的短横线-
表示扫描所有端口。
-v
:这个参数是verbose
的缩写,意味着详细模式。使用这个参数,nmap会提供更详细的扫描输出,包括扫描过程中的额外信息和统计数据。
nmap -sS -p- 192.168.31.14
-sS
:这个参数指定了扫描类型为SYN扫描(也称为半开扫描)。这是一种常用的扫描技术,它发送一个SYN包到目标端口,并等待SYN-ACK响应。如果收到RST包,则认为端口是关闭的;如果收到SYN-ACK包,则认为端口是开放的。这种扫描方式不会完成TCP三次握手的全过程,因此不会在目标主机上建立真正的连接,这使得它在扫描时比较隐蔽。
④、网页信息收集
访问http服务80端口,进入web界面,在其中发现一个flag
查看Flag得到flag1
根据提示信息,大致意思就是你可能需要cewl
这款工具
🔑 Cewl是一款采用Ruby开发的应用程序,可以给他的爬虫指定URL地址和爬取深度,还可以添加外部链接,接下来Cewl会给你返回一个字典文件,你可以把字典用到类似John the Ripper
这样的密码破解工具中。
dirb扫描一下目录,看目录扫描结果,这是一个wordpress
网站,有一个后台界面wp-admin
尝试使用sql万能密码注入,发现没用
用admin进行登录,burp拦截登录响应,登录失败
根据flag1给的提示,我们就需要使用到cewl这个工具了
我们将扫描结果重定向到passwd.txt
(就是保存文件或者使用cewl
的自带的-m
参数)
cewl http://dc-2/ > passwd.txt
🔑 cewl
:这是一个用于生成密码字典的工具,它通过爬取指定网站的文本内容,提取出单词列表,这些单词可以用于密码破解尝试。
得到密码字典后,需要使用wpscan
枚举可能的用户名
🔑 WPScan
是一个扫描 WordPress
漏洞的黑盒子扫描器,它可以为所有 Web
开发人员扫描 WordPress
漏洞并在他们开发前找到并解决问题。
wpscan --url http://dc-2/ -e u
-e
或--enumerate
:这个参数用于枚举信息,可以指定不同的选项来获取 WordPress 网站的不同信息,如插件、主题和用户信息等。
u
:这是枚举参数的一个选项,代表枚举用户名。使用-e u
可以列出 WordPress 网站上的所有用户或者尽可能发现的用户信息。
一共扫描出来三个用户admin,jerry,tom可以使用。
此时我们已经有了用户名和密码字典,
使用wpscan
爆破账号密码,指定刚刚我们生成的用户字典users.txt
和密码字典passwd.txt
wpscan --url http://dc-2/ -U user.txt -P passwd.txt
爆破成功,得到以下两组用户名及密码
Username: jerry, Password: adipiscing
Username: tom, Password: parturient
随便选一个进行登录,都能成功登录,但登录成功后的界面有所不同,用jerry进行登录边栏有pages,而用tom登录则没有
用jerry登录成功后,在边栏pages中找到flag2
这个提示并没有什么作用
文件上传
在边栏Media处发现可以上传文件,尝试上传php文件,提示被禁止了
尝试上传图片文件,发现可以上传,但提示:无法创建目录wp-content/uploads/2024/12。它的父目录是否可以被服务器写入?
系统渗透
端口扫描的时候有一个7744
端口
用ssh
默认22端口是拒绝服务的,指定7744端口的时候让我们输入密码,那可以猜测7744就是ssh
服务端口了
使用前面得到的两组账号密码进行登录尝试,使用jerry连接失败,使用tom连接成功
ls查看当前目录下文件发现flag3.txt,尝试使用cat进行读取,提示rbash
🔑 rbash,即受限 Bash Shell,是 Bash shell 的一个受限版本,旨在限制用户对某些命令和功能的访问,以增强系统的安全性。当用户以 rbash 登录系统时,他们无法执行可能危害系统或其他用户的任务。
以下是 rbash 的一些主要限制:
用户无法使用
cd
命令更改目录,只能在自己的主目录中操作。某些命令(如
exec
、set
和unset
)受到限制,阻止用户更改 shell 的环境。用户无法更改可能影响其他用户或系统设置的环境变量。
在 rbash 中,用户无法重定向输入或输出,这使得执行可以访问或操作指定区域之外的文件的命令变得更加困难。
查看可用的命令:compgen -c
🔑
compgen -c
是一个 Bash 内置命令,用于列出所有可用的命令、别名和函数。这个命令可以根据不同的参数生成匹配单词的候选补全列表。在没有指定任何参数的情况下,compgen -c
会显示当前用户环境中所有可用的命令、别名和函数。
发现vi命令可用,使用vi flag3.txt
读取文件内容
提示中提到了tom、jerry、su
我们去/etc/passwd,看看能不能添加一个”root“用户
ls -l /etc/passwd
查看文件权限,发现无法进行添加
想要切换到home目录查看,但cd不能直接使用,不过我们可以使用ls
查看后,在/home/jerry下发现flag4.txt,使用vi进行读取
提示我们使用git
离开这里,应该就是让我们用git
提权
查看文件flag4.txt所属,是jerry的,这里直接跳过,没什么作用
看看刚刚的flag3.txt,所属用户为tom
尝试用它提权试试
执行shell
这里直接"提权"成功了
虽然"提权"成功,但并没有什么作用
查看环境变量:export -p
🔑
export -p
是一个在 Unix 和类 Unix 系统中使用的 shell 命令,用于显示所有当前会话中已设置的环境变量及其值。这个命令会列出所有通过export
命令设置的环境变量,这些变量对当前会话和所有子进程都是可见的。
rbash逃逸
我们通过修改环境变量,之后使用jerry / adipiscing登录
tom@DC-2:~$ export PATH=$PATH:/bin/ #直接添加环境变量 -rbash: PATH: readonly variable #rbash tom@DC-2:~$ tom@DC-2:~$ BASH_CMDS[x]=/bin/bash;x #把/bin/bash给x,# 这里修改了BASH_CMDS的值后并不能直接使用su命令 tom@DC-2:~$ whoami x: whoami: command not found tom@DC-2:~$ export PATH=$PATH:/bin/ #添加环境变量 tom@DC-2:~$ export PATH=$PATH:/usr/bin/ tom@DC-2:~$ su jerry #su 正常使用 Password: jerry@DC-2:/home/tom$
此时我们是jerry权限,还是进不去root
查看当前suid可用命令/文件
find / -perm -u=s -type f 2>/dev/null
这里有一个sudo可以用,rbash逃逸
中的必要条件
🔑
sudo -l
是一个用于列出当前用户可以执行的sudo
命令的命令。具体来说,
sudo -l
的输出会显示:
用户可以执行的命令。
用户可以切换到哪些用户或组来执行命令。
任何特定的限制或条件,例如是否需要密码。
git提权
sudo git help config !/bin/bash 或 !'sh' #完成提权 # 或者 sudo git -p help !/bin/bash #输入!/bin/bash 即可打开一个用户为root的shell
方法2
🔑 在使用sudo git -p help
时,可尝试调整一下终端大小,将终端调小一些,以便能够输入!/bin/bash
,否则命令会直接结束,无法进行输入,如下图所示