Python黑客-写一个轻量级反向Shell脚本

CARBON 2018-04-12

Hello,老少爷们,大家晚上好。

看起来大家对“黑客”的热情实在是不小啊,看来都想把电脑玩6嘛,那今天咱来讲一讲反向Shell(不知道什么是Shell的出去面壁思过5分钟...)

Shell大家肯定都不陌生,说白了就是命令行执行,诸如windows下面的cmd linux下的控制台。那什么是反向Shell呢?

反向Shell:

反向shell(Reverse shell)是往远程机器发送shell命令的技术,当受害机处在防火墙等其它东西后面时,通过技术手段很难进行远程连接,所以就通过反向Shell让远程受害机主动连接你。

对于反向Shell十分有名的管理工具比如说NC,这在linux里面十分流行,不过在发行版本当中,为了安全考虑很多都去掉了-e选项。

要做什么:

那今天呢,我们就写这么一个类似于NC的远程管理工具,先上个样本图:

Python黑客-写一个轻量级反向Shell脚本

前期准备工作呢,很简单,两台电脑(虚拟机即可)python环境(对于大家说windows没装python玩不了这种情况 我推荐你直接通过软件编译成exe,这样的话就可以实现跨平台利用了。)

前期我们先分析一下原理:

既然是远程连接,那我们考虑的第一点就是socket编程了,这点没得说,我们建立在socket的基础上,通过server端给客户端(受害者)传递命令行参数,使远程受害主机执行。这样就达到我们的目标了。

几个关键点讲解:

这里我就不把代码完全从头讲到尾了,咱只挑几个重点,不然的话从0基础开始讲的话,那得讲到猴年马月~

socket的两种类型(SOCK_STREAM和SOCK_DGRAM区别):

SOCK_STREAM 是有保障的(即能保证数据正确传送到对方)面向连接的SOCKET,多用于资料(如文件)传送。

SOCK_DGRAM 是无保障的面向消息的socket , 主要用于在网络上发广播信息(如视频语音)。

SOCK_STREAM是基于TCP的,数据传输比较有保障。SOCK_DGRAM是基于UDP的,专门用于局域网,基于广播

SOCK_STREAM 是数据流(UDP),一般是tcp/ip协议的编程,SOCK_DGRAM分是数据包,是udp协议网络编程

由上我们知道UDP是不稳定的,有可能在发数据的时候造成丢包,这样的话我们如果给客户端发一条指令万一收不到、收不全,那岂不是没的玩了对吧。而TCP是稳定的,它会等待着数据传送完成,丢包了会继续发送,一直到收到为止。所以我们还是用TCP是比较合理的。

subprocess.popen()的使用:

python2.4版本之后,可以用subprocess这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回值。

subprocess的出现目的为替代其他几个老的模块或者函数,比如:os.system os.spawn* os.popen* popen2.* commands.*等

subprocess模块中只定义了一个类: Popen。可以使用Popen来创建进程,并与进程进行复杂的交互。它的构造函数如下:

subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

Python黑客-写一个轻量级反向Shell脚本

参数args可以是字符串或者序列类型(如:list,元组),用于指定进程的可执行文件及其参数。如果是序列类型,第一个元素通常是可执行文件的路径。我们也可以显式的使用executeable参数来指定可执行文件的路径。

参数stdin, stdout, stderr分别表示程序的标准输入、输出、错误句柄。他们可以是PIPE,文件描述符或文件对象,也可以设置为None,表示从父进程继承。

如果参数shell设为true,程序将通过shell来执行。

代码实现:

上面那两点介绍完了之后我们就开始先搭建一个socket,运行起来先可以通讯再说~

客户端:(这个是基于UDP的)

Python黑客-写一个轻量级反向Shell脚本

(客户端代码)

连接到10.0.0.100端口1111

Python黑客-写一个轻量级反向Shell脚本

(服务端)

通过上面我们看出,很简单的一个socket,我们先来测试一下!

Python黑客-写一个轻量级反向Shell脚本

测试成功!受发消息正常。那么我们开始写带命令行的。

Python黑客-写一个轻量级反向Shell脚本

(客户端代码)

Python黑客-写一个轻量级反向Shell脚本

(服务端代码)

以上图片为源码,并且鄙人简单的做了一些小注释,我们来看看运行效果:

Python黑客-写一个轻量级反向Shell脚本

OK,执行dir命令,打印出了文件,大功告成!客户端运行命令为:

clent.py 10.0.0.100(IP)

如果大家不想敲代码,鄙人直接附上网盘链接吧:

链接:https://pan.baidu.com/s/1sly7h4FfCVV52_2I1wNF9Q 密码:nl4v

相关推荐