基于Python3的木马连接工具编写

时间:2022-07-23
本文章向大家介绍基于Python3的木马连接工具编写,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

类似前言一样的废话

上一次的文章中是分析了 Windows系统上 中国菜刀的工作原理,于是突发奇想,便想着用Python3也写一个和菜刀功能一样的程序出来,其实可变的地方还是挺少的,考虑的点只有4个而已,内容中,尤其是正则匹配部分尤其辣眼睛,所以有意见可以提出来,然后我忽略掉就好了

环境搭建

为了方便测试,所以我是在本地的虚拟机搭建一个 apache+php的环境然后在其根目录下放置一个 php一句话木马

开始乱写

首先我们要确定我们连接上木马文件,所需要什么东西

  • 文件url
  • 木马参数

没有这两个就无法建立连接,所以开头的时候先把他安排上

url=str(input("木马url: "))
parameter=str(input("木马参数: "))

接着,开始写执行命令,和之前菜刀的原理一致,通过base64解码传入php语句,然后在其中传入执行语句

为了模拟终端的样子,所以先把获取路径的功能给写了

在php中, dirname()可以用来获取该文件的目录

举个例子,如果文件路径为 /var/www/html/elapse.php那么, dirname()后得到的路径就是 /var/www/html/,是该文件的当前目录

_SERVER['SCRIPT_FILENAME']全局预定义变量可以用来获取当前执行的php的完整路径,于是 dirname()配合 _SERVER['SCRIPT_FILENAME']就可以得到当前文件所在的目录,一开始连接时就cd过去

具体代码如下,因为这里用的也是base64解码的关系,所以会在代码中注释部分base64内容

def path(url,parameter,header):

    # 下面的base64内容$dir=dirname($_SERVER['SCRIPT_FILENAME']); print $dir;
    post_data="eval(base64_decode("JGRpcj1kaXJuYW1lKCRfU0VSVkVSWydTQ1JJUFRfRklMRU5BTUUnXSk7IHByaW50ICRkaXI7"));"    r=requests.post(url,data={parameter:post_data},headers=header)
    return r.text

在上面的代码中,我只需要给它 url(木马的url地址)parameter(木马参数)和无关紧要的header(http头部)

运行一下,成功得到路径,接下来开始写正文部分

根据菜刀中的

php->z0->z1 #z0为执行代码部分 z1为shell,也就是/bin/sh
       ->z2 #z2的内容为执行所需要的命令

首先先先构造一个新的php一句话木马

接着传入本体代码以及shell和执行所需的命令 (因太长,不贴出来,可移步)

但是这里要注意的一点是,command这个命令在传过去的时候,那边需要经过base64解码后才会生效,所以这里我们得将语句拼接完后,将他base64编码

我们拿浏览器测试一下这样是否会生效

为了方便测试,我这里执行的命令只有 id而已

那么,执行成功后,结果有了,需要对数据内容进行筛选,因为为了做到目录切换,命令执行后的数据还包含了当前路径

我这里是写了一个正则,将内容都区分开来

因为最后三个是路径还有两个为空的值,所以最后三个不作为结果输出出来

...
    for i in range(len(result)-3):
        print (result[i]+" ",end="")

命令执行的部分就到这里了,那么现在解决目录切换的问题

在上面的执行结果中,包含了我这条命令执行后所在的位置

所以我将结果return出来,调换掉前面的 file_path作为我开始时cd进去的路径就好了

同时,因为一开始是在该文件的当前目录下,所以一开始的路径不能变,而且用户如果敲回车的话,也会将命令发送过去执行,在那边会报错,所以做一个判断

如果是回车的话,就直接把当前路径返回回去,不放到那边执行了

这个是测试结果

整合后的代码公众号后台留言 Python菜刀即可