基于python的直连shell和反射shell
0x00 前言
每次对服务器进行了渗透和提权之后,下一步就该维持权限(留后门),方便我们下次执行命令,留一个后门比起每次重新从webshell进入,一是降低被发现的概率,二是免去繁琐的操作,三是如果web漏洞被修补webshell被查杀,有时候我们放进去隐藏较好的后门并没有被查杀,我们仍然可以控制这台机器。
这里介绍两个可以通过netcat连接的python版shell。
0x01 需要的库
- os: os模块提供了非常丰富的方法用来处理文件和目录。
- subprocess: subprocess是Python 2.4中新增的一个模块,它允许你生成新的进程,连接到它们的 input/output/error 管道,并获取它们的返回(状态)码。我们这里主要使用subprocess.call()函数,执行指定的命令,并返回命令执行状态。
- socket: Python 提供了两个基本的 socket 模块。第一个是 Socket,它提供了标准的 BSD Sockets API。第二个是 SocketServer,它提供了服务器中心类,可以简化网络服务器的开发。
- optparse: optparse模块用来处理命令行参数,使我们在统一管理时更方便。
0x02 直连型shell
先贴代码:
1 |
|
这段代码的作用是,创建一个在2333端口监听任意ip的socket,如果监听到连接,就打开一个/bin/bash进程提供给目标ip执行命令。
我们要使用他时,只需在目标服务器执行
1 |
|
然后在我们自己的机器使用netcat输入:
1 |
|
就可以连接服务器执行命令,演示效果如下,主机是kali,靶机是ubuntu:
0x03 反射型shell
有时我们并不能直接访问目标服务器,这个时候可以通过反射shell来连接,也就是在我们本机使用netcat创建监听,然后让服务器上主动连接我们:
先贴要放在服务器端的代码:
1 |
|
我们在服务端执行此代码,通过命令行参数传入我们本机的ip和监听端口,然后创建向传入的ip和端口的socket连接,再重定向shell之后通过subprocess.call调用/bin/bash来执行命令。
我们要使用它时,首先在本机输入:
1 |
|
然后在服务端运行:
1 |
|
就可以连接服务器执行命令,演示效果如下,主机是kali,靶机是ubuntu:
0x04 总结
除了python,其他语言也能实现这些功能,具体使用哪种语言根据目标系统存在的环境来选择,而linux系统都是集成了python环境的,所以这里用python做例子。
在留后门的过程中,重点并不是写出这个shell,而是如何隐藏它不被发现,下一次有时间会总结一下隐藏shell的各种方式。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!