前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NSE代码生成器 | Nmap 脚本

NSE代码生成器 | Nmap 脚本

作者头像
意大利的猫
发布2020-08-20 14:48:14
6230
发布2020-08-20 14:48:14
举报
文章被收录于专栏:漫流砂漫流砂

这一段时间总是出现各种漏洞,我一般用Nmap写的都是渗透测试脚本,基本上都是http请求,每次写都要去修修改改,比较烦,所以我用 Python 写了一个"代码生成器"

代码语言:javascript
复制
"""
    想写一个nmap的脚本http包生成器, Python3里似乎没有能够解析http请求包的库,自己写吧
    http 请求包似乎可以分为三个部分,请求头、中间的配置项、post的数据
    可以使用readlines 的第一个元素来获取请求头

"""
import sys


# 定义一些全局变量
HTTP_METHOD = None
HTTP_PATH = None
HTTP_VERSION = None
HTTP_OPTIONS = []
HTTP_DATA = ""


def make_data(http_req):
    global HTTP_METHOD
    global HTTP_PATH
    global HTTP_VERSION
    global HTTP_OPTIONS
    global HTTP_DATA

    HTTP_METHOD = http_req[0].split()[0]
    HTTP_PATH = http_req[0].split()[1]
    HTTP_VERSION = http_req[0].split()[2]

    # 定位http包的头与数据之间的空行
    blank_flag = 100000
    for i in range(1, len(http_req)):
        if i < blank_flag and http_req[i] != '\n':
            HTTP_OPTIONS.append("".join(http_req[i]))
        elif i < blank_flag and http_req[i] == '\n':
            blank_flag = i
        else:
            HTTP_DATA = HTTP_DATA + http_req[i]


def make_options():
    options_code = """
    local options = {header = {}, content = {}}
    """
    for i in HTTP_OPTIONS:
        key = i.strip().split(':')[0]
        val = i.strip().split(':')[1][1:]
        if key != "Host" and key != "Content-Length":
            options_code = options_code + """options["header"]["{0}"] = "{1}"
        """.format(key, val)
    options_code = options_code + """options["content"] = postdatas"""
    return options_code


# 这个函数用来输出lua格式的代码
def output_lua():
    lua_codes = """
local stdnse = require "stdnse"
local shortport = require "shortport"
local http = require "http"

description = "sth"
author = "test94"
license = "Same as Nmap--See https://nmap.org/book/man-legal.html"
categories = {{"default"}}


prerule = function()
    print("-----------------------------------")
    print("[+] start ... ")
    print("[-] (if port is filtered, nothing will be checked)")
    print("")
end

portrule = shortport.service({{"http", "https", "afs3-callback", "http-proxy"}})

local postdatas = [[
{0}
]]

action = function(host, port)
    local output = stdnse.output_table()
    output.result = "not vulnerable"
    {1}
    
    local req = http.generic_request(host, port, "{2}", "{3}", options)
    return output
end
"""
    # print(lua_codes.format(HTTP_DATA, "header", HTTP_METHOD, HTTP_PATH))
    global HTTP_OPTIONS
    HTTP_OPTIONS = make_options()
    print(lua_codes.format(HTTP_DATA, HTTP_OPTIONS, HTTP_METHOD, HTTP_PATH))


def main(filename):
    f = open(filename, 'r')
    http_req = f.readlines()
    f.close()
    make_data(http_req)
    output_lua()


if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python3 nmap_helper.py http_req.txt")
    else:
        main(sys.argv[1])

使用如下:

  • 把载有 Payload 的http包写入一个文件中,如下:

这是之前通达OA的PoC,就用这个来做测试

  • 执行 python3 nmap_helper.py http_req.txt

可以看到直接生成了发送这个 http 请求的Nmap NSE代码,至于要如何处理返回包,如何判断是否存在漏洞那就是你的事了

如果你希望直接生成文件,执行 python3 nmap_helper.py http_req.txt > poc.nse

  • 我们抓包看一下是否能够发送数据包

追踪一下这个包

很好,没有问题

脚本下载地址:

http://www.my-synology.cn:37980/sharing/ioRM045GX

密码: helper

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NOP Team 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档