当前位置:网站首页>【web審計-源碼泄露】獲取源碼方法,利用工具

【web審計-源碼泄露】獲取源碼方法,利用工具

2022-07-05 03:36:00 黑色地帶(崛起)

目錄

一、備份文件泄露

1.1、簡介:

1.2、文本備份文件

1.3、整站源碼備份文件

二、Git泄露

2.1、工具(GitHack):

2.2、產生:

2.3、通過特征搜索

2.4、通過.git泄露

分析源碼:

文件:

自定義函數

三、svn泄露

3.1、簡介:

3.2、產生原因:

3.3、工具:

Seay-Svn(簡單)

dvcs-ripper

四、hg、CVS、Bazaar/bzr源碼泄漏

4.1、工具:

dvcs-ripper

五、WEB-INF/web.xml 泄露

5.1、簡介:

5.2、產生原因:

5.3、WEB-INF 主要包含文件或目錄:

5.4、利用:

六、DS_Store 文件泄露

6.1、簡介:

6.2、工具:

ds_store_exp

七、利用漏洞泄露


一、備份文件泄露

1.1、簡介:

備份文件一般是由於維護人員的疏忽,忘記删除而留在服務器中的文件。

攻擊者通過枚舉常見備份文件名,來獲得對應的路徑,並得到關鍵代碼,從而進行源代碼的審計

為了能够找到這些備份文件,一般會使用一些敏感文件掃描工具來進行探測。

一般常見備份文件有:文本備份文件、整站源碼備份文件

文件後綴:.rar   .zip  .7z   .tar.gz   .bak    .swp   .txt   .sql等

1.2、文本備份文件

在Linux系統下會使用諸如vim或gedit等文本編輯器,當編輯器崩潰或因异常退出時會自動備份當前文件;或將實現某功能後的代碼備份後再進行後續開發工作。

可能的備份文件(index.php為例):

.index.php.swp
.index.php.swo
index.php~
index.php.bak
index.php.txt
index.php.old
...

1.3、整站源碼備份文件

會將整站源碼打包,然後放在網站的根目錄下,這時,只要找到這個壓縮包就能開始進行源碼審計了。

常見的整站備份文件名:

www
wwwdata
wwwroot
web
webroot
backup
dist
...


各種壓縮文件後綴名:

.zip
.tar
.tar.gz
.7z
.rar
...

還可利用其他可能泄露目錄結構或文件名的敏感文件來獲取備份文件的比特置,如“.xx_xxx”



二、Git泄露

2.1、工具(GitHack):

GitHack是一個.git泄露利用脚本,通過泄露的.git文件夾下的文件,重建還原工程源代碼。

滲透測試人員、攻擊者,可以進一步審計代碼,挖掘:文件上傳,SQL注射等web安全漏洞。

GitHub - lijiejie/GitHack: A `.git` folder disclosure exploiticon-default.png?t=M5H6https://github.com/lijiejie/GitHack

使用:

python GitHack.py http://www.openssl.org/.git/

2.2、產生:

web在昇級和維護過程中,會對站點文件進行修改,就需要對網站整站或其中一部分進行備份

發布代碼的時候,如果沒有删除.git目錄,就直接發布到服務器,攻擊者通過它來恢複源代碼

備份文件被放在到 web 服務器可訪問的目錄下

2.3、通過特征搜索

當某個網站存在某個明顯特征字符串的時候

就有可能通過GitHub的搜索功能來搜索到該項目

2.4、通過.git泄露

每個git項目的根目錄下都存在一個.git文件夾,作用就是存儲項目的相關信息

工具:GitHack和源碼


分析源碼:

首先在本地建立一個git工程並初始化,然後再commit一次

進入.git目錄下,看看目錄中文件

確定commit對象,查看對象

輸入存在“.git”目錄中的url

接著查看HEAD文件獲取分支的比特置,然後得到分支的hash值

得到hash值後本地初始化一個git,接著通過parseCommit獲取全部對象

最後使用reset重設分支,成功將項目重新建立在本地


文件:

關鍵的文件(一部分):

HEAD:標記當前git在哪個分支中。

refs:標記該項目裏的每個分支指向的commit。

objects:git本地倉庫存儲的所有對象。

git的對象:

commit:標記一個項目的一次提交記錄。

tree:標記一個項目的目錄或者子目錄。

blob:標記一個項目的文件。

tag:命名一次提交。


自定義函數

(1)parseCommit函數:

作用:下載commit對象,將其parent一並下載

代碼:

function parseCommit {
        echo parseCommit $1
        downloadBlob $1
        tree=$(git cat-file -p $1| sed -n '1p' | awk '{print $2}')
        parseTree $tree
        parent=$(git cat-file -p $1 | sed -n '2p' | awk '{print $2}')
        [ ${#parent} -eq 40 ] && parseCommit $parent
}


(2)parseTree函數:

作用:下載tree對象,並列出tree下的所有對象,分類為tree或者blob後處理

代碼:

function parseTree {
        echo parseTree $1
        downloadBlob $1
        while read line
        do
        type=$(echo $line | awk '{print $2}')
        hash=$(echo $line | awk '{print $3}')
        [ "$type" = "tree" ] && parseTree $hash || downloadBlob $hash
        done < <(git cat-file -p $1)
}


(3)downloadBlob函數:

作用:下載與hash對應的文件

function downloadBlob {
        echo downloadBlob $1
        mkdir -p ${1:0:2}
        cd $_
        wget -q -nc $domain/.git/objects/${1:0:2}/${1:2}
        cd ..
}



三、svn泄露

3.1、簡介:

Subversion(SVN) 是一個開源的版本控制系統, 也就是說 Subversion 管理著隨時間改變的數據。 這些數據放置在一個中央資料檔案庫(repository) 中。 這個檔案庫很像一個普通的文件服務器, 不過它會記住每一次文件的變動。 這樣你就可以把檔案恢複到舊的版本, 或是瀏覽文件的變動曆史。

在使用SVN管理本地代碼過程中,會自動生成一個名為.svn的隱藏文件夾,其中包含重要的源代碼信息。

3.2、產生原因:

網站管理員在發布代碼時,沒有使用‘導出’功能,而是直接複制代碼文件夾到WEB服務器上,這就使.svn隱藏文件夾被暴露於外網環境,可以利用.svn/entries文件,獲取到服務器源碼。

3.3、工具:

Seay-Svn(簡單)

http://www.vuln.cn/wp-content/uploads/2015/10/Seay-Svn.raricon-default.png?t=M5H6http://www.vuln.cn/wp-content/uploads/2015/10/Seay-Svn.rar


dvcs-ripper

下載地址:

GitHub - kost/dvcs-ripper: Rip web accessible (distributed) version control systems: SVN/GIT/HG...icon-default.png?t=M5H6https://github.com/kost/dvcs-ripper

‎Rip Web可訪問(分布式)版本控制系統:SVN,GIT,Mercurial/hg,bzr,...‎

‎即使目錄瀏覽關閉,它也可以翻錄存儲庫。‎

‎確保將自己置於要下載/克隆存儲庫的空目錄中。‎



四、hg、CVS、Bazaar/bzr源碼泄漏

4.1、工具:

dvcs-ripper

下載地址:

GitHub - kost/dvcs-ripper: Rip web accessible (distributed) version control systems: SVN/GIT/HG...icon-default.png?t=M5H6https://github.com/kost/dvcs-ripper

‎Rip Web可訪問(分布式)版本控制系統:SVN,GIT,Mercurial/hg,bzr,...‎

‎即使目錄瀏覽關閉,它也可以翻錄存儲庫。‎

‎確保將自己置於要下載/克隆存儲庫的空目錄中。‎



五、WEB-INF/web.xml 泄露

5.1、簡介:

WEB-INF是Java的WEB應用的安全目錄,客戶端無法訪問,只有服務端才可以可以訪問,如果想在頁面中直接訪問其中的文件,必須通過web.xml文件對要訪問的文件進行相應映射才能訪問。

5.2、產生原因:

在使用網絡架構的時候,對靜態資源的目錄或文件的映射配置不當,從而引發的安全問題,導致web.xml等文件能够被讀取

5.3、WEB-INF 主要包含文件或目錄:

(1)/WEB-INF/web.xml :

Web應用程序配置文件(描述servlet和其他的應用組件配置及命名規則)

(2)/WEB-INF/database.properties:

數據庫配置文件

(3)/WEB-INF/classes/:

存放Java類文件(.class),包含所有的 Servlet 類和其他類文件,類文件所在的目錄結構與他們的包名稱匹配

(4)/WEB-INF/lib/ :

用來存放打包好的庫(.jar),即web應用需要的各種JAR文件

(5)/WEB-INF/src/ :

源碼目錄,存放源代碼(.asp和.php等)

5.4、利用:

通過找到 web.xml 文件,推斷 class 文件的路徑,找到 class 文件,再通過反編譯 class 文件,得到網站源碼。



六、DS_Store 文件泄露

6.1、簡介:

.DS_Store是Mac下Finder用來保存如何展示文件/文件夾 的數據文件(即文件夾的顯示屬性的,和比文件圖標的擺放比特置),每個文件夾下對應一個


把代碼上傳的時候,安全正確的操作應該把 .DS_Store 文件删除,如果未删除,.DS_Store將會上傳部署到服務器,可能造成文件泄漏(目錄結構、備份文件、源代碼文件)

6.2、工具:

ds_store_exp

是一個 .DS_Store 文件泄漏利用脚本,它解析.DS_Store文件並遞歸地下載文件到本地。

下載地址:

GitHub - lijiejie/ds_store_exp: A .DS_Store file disclosure exploit. It parses .DS_Store file and downloads files recursively.icon-default.png?t=M5H6https://github.com/lijiejie/ds_store_exp



七、利用漏洞泄露

結合任意文件包含漏洞或者任意文件存在下載漏洞

就可能下載到源碼,並對其進行審計

原网站

版权声明
本文为[黑色地帶(崛起)]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/186/202207050304262546.html