您好,登錄后才能下訂單哦!
svn 搜索技巧
圖1
git 搜索技巧
圖2
從svn的結(jié)構(gòu)圖可以看到一個目錄text-base,這里有我們源文件的備份,比如要下載somedomain/phpinfo.php,直接訪問目錄somedomain/.svn/text-base/phpinfo.php.text-base,一般的服務(wù)器既不會阻止該目錄也不會解釋該后綴,我們就可以直接讀到本地來?,F(xiàn)在只是訪問最頂層的文件信息,那怎么遍歷呢?這里面就有.svn/entries,這個文件包含著該基礎(chǔ)目錄下所有的文件和目錄,直接遞推查找就行。
svn在1.6之后引入了wc.db來管理文件,該文件位于.svn/wc.db。普通文件位置:somedomain/.svn/pristine/"XX"/"CHECKSUM".svn-base,CHECKSUM是文件的sha1值,xx則是他的前兩位。那這個CHECKSUM去哪找呢?就是我們剛才提到的wc.db,這是一個sqlite數(shù)據(jù)庫。數(shù)據(jù)庫的大體結(jié)構(gòu)如下:
$ sqlite3 wc.db .tables
ACTUAL_NODE NODES PRISTINE WC_LOCK
EXTERNALS NODES_BASE REPOSITORY WORK_QUEUE
LOCK NODES_CURRENT WCROOT
$ sqlite3 wc.db 'select local_relpath, checksum from NODES'
index.php|$sha1$4e6a225331f9ae872db25a8f85ae7be05cea6d51
scripts/menu.js|$sha1$fabeb3ba6a96cf0cbcad1308abdbe0c2427eeebf
style/style.js|$sha1$2cc5590e0ba024c3db77a13896da09b39ea74799
$ sqlite3 wc.db 'select local_relpath, ".svn/pristine/" || substr(checksum,7,2) || "/" || substr(checksum,7) || ".svn-base" as alpha from NODES;'
index.php|.svn/pristine/4e/4e6a225331f9ae872db25a8f85ae7be05cea6d51.svn-base
scripts/menu.js|.svn/pristine/fa/fabeb3ba6a96cf0cbcad1308abdbe0c2427eeebf.svn-base
style/style.js|.svn/pristine/2s/2cc5590e0ba024c3db77a13896da09b39ea74799.svn-base
第一步下載wc.db,然后從NODES表中找到文件名和其sha1值,最后構(gòu)造下載鏈接。
首先從git/config信息里面可以得到倉庫地址
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@git.jingdigital.net:root/pcb001.git
[branch "master"]
remote = origin
merge = refs/heads/master
基本上三步走:
(1)下載.git/index文件,這是一種git特有的格式,在該文件中包含著文件名和文件SHA1值。
(2)根據(jù)該文件SHA1值到objects目錄下載相應(yīng)文件,具體路徑somedomain/.git/objects/"XX"/"CHECKSUM"
(3)zlib解壓文件,按照原始目錄寫入源代碼。
有了前面這些基礎(chǔ),就可以通過泄漏的信息來還原代碼,能還原代碼的話就可以干很多事了。最常見就是代碼中泄漏email地址,數(shù)據(jù)庫連接方式,調(diào)試接口,一些第三方key的泄漏。另外還可以對你感興趣的目標進行代碼審計,發(fā)現(xiàn)注入,命令執(zhí)行等等。
(1)從文件讀取80ip段數(shù)據(jù),設(shè)最大并發(fā)16,最大連接數(shù)60,這個時候的帶寬基本控制在600KB,利用周末時間跑了一天即可跑完。
(2)設(shè)置pycurl的一些參數(shù),如PROXY,MAXREDIRS=0,這樣就不跳轉(zhuǎn)了,nosignal=1 這個參數(shù)必須為1,這是pycurl的一個bug,中間測試的過程中就是因為參數(shù)未加,導(dǎo)致跑了半天結(jié)果中途掛了。
(3)請求/.git/config信息,如果200,返回的類型為text/plain并且存在repositoryformatversion字段。請求/.svn/entries,如果200,Content-Type為text/plain,并且dir存在于返回值。其實這個是有誤的,因為在svn大于1.6的情況下,在返回值中只有一個簡單的數(shù)字,并不存在dir,所以掃描結(jié)果中基本上沒有1.6以上的結(jié)果。
在掃描的結(jié)果中分析出現(xiàn)的url,有些.svn/entries返回200,但是首頁確是有問題,還有發(fā)現(xiàn)某些ip不在中國。于是寫了腳本去請求這些url的首頁,并且從一個ip查詢網(wǎng)站去查詢ip地址歸屬。
在525萬80端口數(shù)據(jù)中,跑出6000條結(jié)果,相當于千分之一的概率,另外還未包括前面對svn 1.6判斷有誤的分析,所以這個概率還是很高的。
簡單的分析了git信息的泄漏,總共有接近600條數(shù)據(jù),去除在國外的和首頁不正常的,能達到250多,其中差不多一半的都是在阿里云的ip上,這些公司一般都是創(chuàng)業(yè)公司。在這些泄漏的代碼中sql注入一般很少。
svn的話,一般都是一些比較老的網(wǎng)站,這主要可能還是我前面的判斷邏輯有點小問題。注入問題比較嚴重。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。