0X01 Main Point
- 1.基于SMB的爆破工具accacheck
- 2.用于枚举Windows和Samba主机中的数据工具enum4linux
- 3.
smbmap
枚举靶机的共享资源 - 4.无线数据包破解工具aircrack-ng的使用
- 5.PATH环境变量提权
- 6.fcrackzip暴力破解zip密码
0X02 前期嗅探和端口探测
arp-scan -l #扫描得到靶机IP

nmap -sV -A -p- 192.169.0.6 #扫描靶机开放端口

看到smb,第一想到的就是永恒之蓝了吧,Windows的MS-17-010大家都不陌生了,但这是Ubuntu的系统,一时之间不知道如何利用,先放一边,从80端口入手:
整个页面没有任何实质东西可以利用,但是注意:

提示 GET smb free。 =>猜想有一个smb账号,且是空密码
但是ssh连接发现不对劲,先dirb
扫目录,

发现几个
200
的目录都没什么用。。。
转向Samba:
Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
使用enum4linux
查询靶机的用户信息:

果然查到了smb用户,这里推测就是空密码连接,当然不放心可以直接利用acccheck工具进行爆破
Acccheck是一款针对微软的SMB协议的探测工具(字典破解用户名和密码)
(https://github.com/qashqao/acccheck.git)
命令格式:
acccheck [-t{IP}|-T{FILE}][-p,-P,-u,-U,-v]
#以下两个选项必须使用一个来确定目标
-t #使用单个ip地址目标
-T #使用包含多个ip地址的文件
#常用选项
-p #单个密码
-P #密码字典文件
-u #单个用户名
-U #用户字典文件
-v #输出详细破解内容

smb用户使用的空密码,我们先使用
smbmap
探测共享资源名称及权限:
发现print\$目录
是可读的
,可以直接smbclient
查看print$目录
,这里本来想使用smbmap -x
参数来执行bash,但是:
smbclient查看
print$
目录
发现都是空目录,无语。。发现
..
设备,猜测可能是指向了该用户的/home/smb
的目录,重新连接:
果然,直接
get
,将两个文件下载下来之后,发现需要密码
这里使用fcrackzip来进行爆破,字典可以用kali自带的
/usr/share/wordlists/rockyou.txt
fcrack -D -p /usr/share/wordlists/rockyou.txt -u safe.zip #-u指定zip格式

打开zip后发现有一个user.cap的数据包,wireshark打开后发现是无线数据包,

之前看破解wifi密码时就有看到
aircrack-ng
这个工具,同样是kali自带的,我们使用它来破解无线数据包密码,wifi用户名可以看到是blackjax:
aircrack-ng -w /usr/share/wordlists/rockyou.txt user.cap #-w指定字典路径

有用户名,有密码,开放了ssh端口(2525),我们直接ssh连接:

0x03提权
查看内核发现是ubuntu 16.04,并且是4.4.0-142-generic的终端,没有发现这个版本的终端有可以利用内核提权的脚本,那先查看SUID位的文件吧。
find / -perm -u=s -type f 2>/dev/null

运行这个可执行程序发现:

是不是类似使用了
netstat
命令,在Windows下使用这个命令:
那么什么叫环境变量提权呢?
有些应用程序使用了system等函数调用了系统命令,但是没有使用绝对路径而是使用env命令从环境变量中进行查找,这就可能通过修改环境变量来进行权限提升,而PATH是Linux和类Unix操作系统中的环境变量,它指定可执行程序的所有bin和sbin存储目录。当用户在终端上运行任何命令时,它会向shell发送请求以在PATH变量中搜索可执行文件来响应用户执行的命令。超级用户通常还可以使用/sbin和/usr/sbin以便于执行系统管理的命令。
当然我们怎么会知道netscan这个可执行程序到底是不是使用了system()函数中的netstat
并且使用的env
命令来从环境变量中进行查找呢?

可以看到的确执行了系统命令
netstat
,那我们可以尝试修改环境变量提权:
cd /tmp #只有/tmp目录下可写
echo "/bin/sh" > netstat #将/bin/sh写入netstat
chmod +x netstat #赋予可执行权限给netstat
echo $PATH #查看当前环境变量
export PATH=/tmp:$PATH
该环境变量提权的思路就是:
重新设置环境变量在/tmp目录下,则我们在使用/usr/bin/netscan
时使用的系统命令会定位到/tmp
路径下的netstat
可执行程序,而内容已被我们篡改,因为netscan是SUID权限,即运行时有root权限,所以我们借这个SUID位执行我们设置的netstat
,即我们以root身份打开了一个/bin/sh
,成功提权。
参考:https://www.anquanke.com/post/id/146799

成功得到root.txt,即第二个flag标志
注:zip爆破还能使用john
,但是需要先获得中间Hash文件,再用john爆破hash
zip2john safe.zip > force #获取hash文件
john force -w /usr/share/wordlists/rockyou.txt 对这个hash文件使用john爆破