前言
这次我们练习的靶机是从vulnhub下载的靶机Gigachad:1,该靶机的难易程度为简单。
下载地址为https://www.vulnhub.com/entry/gigachad-1,657/。
首先下载下来,导入虚拟机。官网建议使用的虚拟机为Virtualbox,但是我平时用的VMware,所以这次练习就用VMware做演示。
导入虚拟机
导入虚拟机后把网络连接改为NAT连接模式。桥接模式和NAT模式都是可以的,这里不使用桥接模式是为了避免扫描到C段的其他物理主机。
NAT模式下,虚拟机与物理机所在的网段不同,物理机和虚拟机同时连接在一个虚拟路由器上。
在桥接模式下,物理机与虚拟机都在同一个网段,他们都同时连接在一个虚拟交换机上。
更详细的的内容可以自行百度。
然后打开虚拟机Gigachad。提示让我们输入账号和密码登陆,但是我们不知道密码。我们现在的目的就是通过漏洞获取到它的密码。首先我们需要找到这台靶机的IP地址。
活力全开,对C段进行存活主机扫描。
nmap -sn --min-parallelism 100 --min-hostgroup 256 192.168.119.0/24
-sn 代表存活主机扫描,不进行端口测探。
–min-parallelism 代表调整探测报文的并行度,也就是在扫描同一台主机时会发送很多个探测数据包,这个参数指定的数即nmap一次至少要发多少个数据包。
–min-hostgroup 代表调整并行扫描组的大小,也就是一次性同时对多少台主机进行扫描。
更详细内容可以参考:https://zhuanlan.zhihu.com/p/322244582,关于nmap的一些性能参数的学习
配置网络
扫描没有发现靶机的IP,应该是没有分配到IP地址,我们需要打开靶机的终端看一下网络配置。首先重新启动靶机,在出现下面这个界面时按e。
按e后就进入了配置页面,注意那个ro quiet
,我们要把它修改为 rw signie init=/bin/bash
,然后按Ctrl+X
启动系统。
ro 代表read only,只读模式。
rw 代表read write,读写模式。
signie init= 代表启动系统后自动运行的程序。
/bin/bash 是系统shell的位置。
然后就成功的调出了shell,我们执行 ifconfig
看一下ip,系统提示没发现这个命令。我们换另一个命令 ip address
查看一下ip,果然网卡ens33
是没有自动分配到IP地址。
ip address 这个命令类似于路由器和交换机里的命令,可以省略一部分命令,例如
ip a
也是可以的。
查看一下网络的配置,发现配置的网卡是 enp0s3
,但是我们在靶机中之发现有网卡 ens33
,所以把 enp0s3
改成 ens33
。
cat /etc/network/interfaces
vi /etc/network/interfaces
:wq
修改完成之后保存,并重启网络。
/etc/init.d/networking restart
再次查看ip时发现已经分配到了IP地址。下面就重启靶机,还是用nmap扫描出靶机的地址。
获取shell
通过nmap的C段扫描我们已经知道靶机的IP地址为 192.168.119.124
,下面我们就针对性的对这个IP进行扫描。
nmap -A --min-parallelism 100 192.168.119.124
-A 代表扫描综合性扫描,会扫描出很多内容。
注意下图红色框中内容,这句话的意思是说明ftp可以匿名登陆。
尝试一下匿名登陆ftp服务器。该ftp客户端匿名登陆的方式是在输入用户名时输入 anonymous
,在输入密码是直接按回车即可。登陆后查看一下服务器上的文件,发现了chadinfo。
ftp 192.168.119.124
anonymous
ls
把chadinfo下载下来,查看 一下这个文件的类型,发现是一个zip压缩文件。
file chadinfo
解压该压缩文件,并查了文件里面的内容。
unzip chadinfo
r
chadinfo_out
file chadinfo_out
cat chadinfo_out
这个文件里面给出了账号 chad
,还有提示去 /drippinchad.png
这个页面。
有提示:why yes,this is my favorite place to relax.how could you tell?他说这个地方是他最喜欢去的地方。我也不知道这是啥地方,直接上google。
仙女塔?尝试用这个密码通过ssh登陆靶机。尝试一下这个这两个单词的各种组合,最后发现密码是 maidenstower
。
ssh chad@192.168.119.124
登陆成功,现在有了普通用户权限并成功获取第一个flag。
cat user.txt
提权
查看一下哪些命令能用超级用户权限,执行 sudo -l
,发现没有这个命令。
查看一下内核的版本,根据经验应该可以使用suid提权。
suid提权详细内容可以参考:https://cloud.tencent.com/developer/article/1600994
uname -a
尝试寻找一下有suid权限的文件。
find / -perm -u=s -type f -exec ls -la {
} \; 2>/dev/null
-perm 是代表按指定权限搜索。
-u=s 其中u代表当前用户的权限,s代表suid权限,-号代表至少需要满足指定的权限,可以有更多的权限,但是不能少了这个指定权限。关于这个参数更详细的内容可以参考:https://blog.csdn.net/weixin_44061169/article/details/105784760
-tpye 代表搜索指定的类型,f代表文件。
-exec 代表搜索完后执行指定的命令,其中{}代表所搜到的结果,命令以;为结束标识。更详细内容可以参考:https://www.pianshen.com/article/86691137271/
2>/dev/null 代表将不显示错误信息,详细介绍已经在前面的博客讲了,可以参考我前面的博文。
搜索出来这么多文件,我通过 strings
命令以文本的形式显示每个二进制文件,但是经过分析后没有看出可以利用的文件。然后我通过搜索引擎逐个搜索每一个文件,发现s-nail-privesep
可以用来提权。在msf的漏洞库里面搜索一下有么有这个文件的利用程序。
searchsploit s-nail
发现有一个利用脚本,位于/usr/share/exploitdb/exploits/multiple/local/
中,但是这个s-nail程序的版本需要小于14.8.16
。我们查看一下靶机上这个程序的版本 s-nail -V
。
版本为14.8.6
,这个版本的程序应该是有这个漏洞的,把这个利用文件上传到靶机。
scp /usr/share/exploitdb/exploits/multiple/local/47172.sh chad@192.168.119.124:/tmp/
这个是上传命令,如果将本地文件与服务器的位置反过来就是下载命令。注意是在本地执行这条命令,而不是已经连接ssh的命令窗口。
上传已经成功,下面就执行这个文件吧。
cd /tmp./47172.sh
执行失败,提示 /bin/sh^M bad interpreter
,很明显这个是换行符不兼容导致的。在这个文件里的换行符是 \r\n
,而这个系统能识别的换行符是 \n
,我已我们需要将 /r/n
转换成 /n
。首先用vi查看一个这个文件里面显示了什么。
vi 47172.sh
在每一行的结尾出现了 ^M
,这不是 ^
与 M
的组合,而是一个控制字符,只占一个字节,表示的就是windows中的 \r
。现在可以通过下面这条命令把这些字符去掉。
sed -i "s/\r//" 47172.sh
其中参数i中的参数指定内容的格式是
"s/字符1/字符2/"
,也就是把指定文件中的字符1替换成字符2。
查看一下文件发现 ^M
已经没有了,下面可以执行该文件了。
./47172.shwhoami
提权成功,现在可以查看root的flag了。
cat /root/root.txt
需要注意的是,该网站随便访问一个地址后就会生成一个新页面。如果你用目录扫描软件扫描过该网站,则
/var
这个盘全部占满,导致没有剩余空间来执行提权程序。所以我们需要修改一下代码,把提权程序的活动目录改为/tmp即可。
参考文献
[1] https://zhuanlan.zhihu.com/p/322244582,关于nmap的一些性能参数的学习
[2] https://www.pianshen.com/article/86691137271/,Find 命令详解
[3] https://blog.csdn.net/weixin_44061169/article/details/105784760,find 查找指定权限的文件
[4] https://cloud.tencent.com/developer/article/1600994,Linux下利用SUID提权
[5] http://blog.chinaunix.net/uid-27034868-id-3375746.html,文件从windows到linux如何解决中多余的^M