基于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菜刀
即可
- 使用12c PDB整合环境的总结 (r10笔记第66天)
- 【Go 语言社区】Redis(ZADD)简单排名
- C得到文件的大小
- 【Go 语言社区】Go语言实现选择法排序实例
- 【Go 语言社区】Go语言转换所有字符串为大写或者小写的方法
- Go语言按字节截取字符串的方法
- Go语言中字符串的查找方法小结
- 优化算法——遗传算法
- 每秒执行6000的简单SQL优化(一)(r10笔记第62天)
- 【Go 语言社区】在golang里实现类似try catch 的异常处理机制
- 每秒执行6000的简单SQL优化(二) (r10笔记第65天)
- 【Go 语言社区】GO语言练习:网络编程 ICMP 示例
- Golang的json操作
- 【Go 语言社区】golang协程——通道channel阻塞
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter 拖拽排序组件 ReorderableListView
- 女神节 | 程序员如何低调而又不失逼格
- Flutter 拖拽控件Draggable看这一篇就够了
- 面试官:你精通多少种语言的Hello World?
- Flutter 裁剪类组件 最全总结
- Flutter Form表单控件超全总结
- 你知道吗,Flutter内置了10多种Button控件
- Flutter 日期时间DatePicker控件及国际化
- 强大的Flutter App升级功能
- 你知道吗,Flutter内置了10多种show
- 还记得第一个看到的Flutter组件吗?
- 150多个Flutter组件详细介绍送给你
- Flutter 学习路线图
- Flutter 强大的MediaQuery控件
- 基于web的图书管理系统设计与实现