寻找测试目标:
google hack: Index of /.svn
svnExploit工作原理
判断svn版本号
通过根目录下的entries文件来判断
版本号>1.7的话,
版本号<1.7的话,
版本号小于1.7的情况:
解析元数据:
.svn/entries
包含了项目的文件和文件夹列表。
可以解析这个文件来获取文件列表file_list
和路径列表dir_list
。
循环解析元数据:
上面收集了文件夹列表,进入每个文件夹继续解析元数据entries
文件
现在有了整个项目结构了
下载文件
.SVN-BASE files store a base copy of a file
在每个文件后面加上.svn-base
,然后请求对应的url就可以下载文件
版本号大于1.7的情况:
下载数据库文件
下载/.svn/wc.db
连接数据库文件
从Node
表中查询出
-
相对路径
-
文件类型
-
校验值
下载文件
如果一个文件的checksum
为 0a781ca8d6e963590f208608e3d80f52307a116d
那么其对应的url则为: domain/.svn/pristine/checksum前两位数
/checksum
加上.svn-base
即https://domain/.svn/pristine/0a/0a781ca8d6e963590f208608e3d80f52307a116d.svn-base
题外话:
在测试svnExploit的时候,发现有点小问题.提了个pr.
优化:
-
1.thread-unsafe的Generator改用thread-safe的queue
-
2.兼容Py2