a dcerpc scanner under development


import socket 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1',135))
s.send(bytes.fromhex('05000b03100000007400000002000000d016d016000000000200000000000100c4fefc9960521b10bbcb00aa0021347a00000000045d888aeb1cc9119fe808002b1048600200000001000100c4fefc9960521b10bbcb00aa0021347a000000002c1cb76c12984045030000000000000001000000'))
s.send(bytes.fromhex('050000031000000018000000020000000000000000000500'))

core code is as above


from scapy.fields import (
    LEShortField,
    PacketLenField,
    PacketListField,
    StrFixedLenField
)

from scapy.packet import (
    Packet
)
# issubclass(IP,Packet)->True
from uuid import (
    UUID
)
# 通用唯一标识符版本一
from scapy.layers.dcerpc import (
    DceRpc5Request,
    DceRpc5,
    DceRpc5Bind
)
from scapy.layers.msrpce.all import (
    find_dcerpc_interface
)
from scapy.all import hexdump
class WBZ7j(Packet):
    name = "WBZ7j"
    fields_desc = [
        LEShortField("cn_ctx_id", 0),
        LEShortField("cn_num_trans_items", 1),        
        StrFixedLenField("abstract_syntax", b"", length=20),  
        PacketListField(
        name="cn_bind_trans", 
        default=[], 
        pkt_cls=lambda: StrFixedLenField("ts", b"", length=20), count_from=lambda pkt: pkt.cn_num_trans_items)
    ]
cn_bind_to_uuid = find_dcerpc_interface('IObjectExporter').uuid.bytes_le
# IObjectExporter对象导出器方法 用端点映射器查找一个远程过程调用接口
# ServerAlive2操作和是5
cn_bind_trans_id = list((UUID('8a885d04-1ceb-11c9-9fe8-08002b104860').bytes_le+bytes.fromhex('02000000'),))
# 生成器表达式
item0 = WBZ7j(cn_ctx_id=0, cn_num_trans_items=1, abstract_syntax=cn_bind_to_uuid, cn_bind_trans=cn_bind_trans_id)
cn_bind_trans_id = list((UUID('6cb71c2c-9812-4540-0300-000000000000').bytes_le+bytes.fromhex('01000000'),))
item1 = WBZ7j(cn_ctx_id=1, cn_num_trans_items=1, abstract_syntax=cn_bind_to_uuid, cn_bind_trans=cn_bind_trans_id)
context_list = [item0, item1]  
pkt = DceRpc5(
    rpc_vers=5,
    rpc_vers_minor=0,
    ptype=11,
    pfc_flags=0x03,
    endian=1,
    encoding=0,
    float=0,
    reserved1=0,
    reserved2=0,
    frag_len=116,
    auth_len=0,
    call_id=2,
    auth_verifier=None,
    auth_padding=None,
    vt_trailer=None
    )
"""
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    RPC VERS   | RPC VERS MINOR|     PTYPE     |   PFC FLAGS   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ENDIAN|ENCODIN|     FLOAT     |   RESERVED1   |   RESERVED2   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            FRAG LEN           |            AUTH LEN           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            CALL ID                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         AUTH VERIFIER         |          AUTH PADDING         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           VT TRAILER          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
"""
hexdump(pkt)
a = DceRpc5Bind(
    max_xmit_frag=5840,
    max_recv_frag=5840,
    assoc_group_id=0x00000000,
    n_context_elem=2,
    reserved=0,
    context_elem=context_list
)
hexdump(a)
a=bytes(a)
print(bytes(pkt).hex()+a.hex())
pkt = DceRpc5(
    rpc_vers=5,
    rpc_vers_minor=0,
    ptype=0,
    pfc_flags=0x03,
    endian=1,
    encoding=0,
    float=0,
    reserved1=0,
    reserved2=0,
    frag_len=24,
    auth_len=0,
    call_id=2,
    auth_verifier=None,
    auth_padding=None,
    vt_trailer=None
    )
c=DceRpc5Request(
    alloc_hint=0,
    cont_id=0,
    opnum=5,
    object=None
)
hexdump(pkt)
hexdump(c)
print(bytes(pkt).hex()+bytes(c).hex())

I dont want to explain too much

评论

此博客中的热门博文

制作Windows远控(序言一)

制作Windows远控(序言二)