web常見源碼泄露


前言:git,svn,hg等是代碼控制系統,即開發人員在開發時使用可以提高開發效率的一種類似集成環境的系統。

轉載大佬博文:

一、漏洞成因

在 WEB 安全體系當中,可能你對 SQL 注入,XSS 跨站一些漏洞已經耳熟於心了,而源碼泄露問題對於大部分開發者來說就相對陌生了 , 而源碼泄露導致的問題卻並不少見,在過往的泄露案例當中,不僅是小網站有此問題,在一些大的廠商同樣出現不少,並因此拿到 webshell。

比如在一些小型企業,可能公司並沒有專門的服務器,而是把網站部署在某一個虛擬主機上面,代碼文件比較多的時候 FTP 上傳是比較慢的,於是開發者把代碼先打包壓縮后再上傳,上傳成功后再去服務器解壓,這有雖然解決了上傳速度慢的問題,不過卻留下了一些安全隱患。

壓縮包解壓后如果沒有刪除,當攻擊者發現后就可以把代碼壓縮包下載;因為部署到服務器上的都是源代碼,這個時候攻擊者就可以通過代碼進一步挖掘一些安全漏洞:文件上傳,SQL 注射等。
二、GIT 源碼泄露
1. 漏洞成因

當在一個空目錄執行 git init 時,Git 會創建一個 .git 目錄。 這個目錄包含所有的 Git 存儲和操作的對象。 如果想備份或復制一個版本庫,只需把這個目錄拷貝至另一處就可以了。

該目錄的結構如下所示:

HEAD config* description hooks/ info/ objects/ refs/

在這些結構中 description 文件僅供 GitWeb 程序使用,我們可以無需關心。

    config 文件包含項目特有的配置選項;

    info 目錄包含一個全局性排除(global exclude)文件,用以放置不希望被記錄在 .gitignore 文件中的忽略模式(ignored patterns);

    hooks 目錄包含客戶端或服務端的鈎子腳本(hook scripts)。

而在剩下的四個條目很重要:

    HEAD 文件指示目前被檢出的分支;

    index 文件保存暫存區信息;

    objects 目錄存儲所有數據內容;

    refs 目錄存儲指向數據(分支)的提交對象的指針。

而在發布代碼的時候,如果沒有把 .git 這個目錄刪除,直接發布到了運行目錄中。攻擊者就可以通過這個文件夾,可以用來恢復源代碼。

http://www.localhost.test/.git/config

通常會用到的利用工具 GitHack ,這個工具下載下來之后操作也特別簡單。

GitHack.py    http://www.localhost.test/.git/

它能解析 .git/index 文件,並找到工程中所有的:文件名和文件 sha1,然后去 .git/objects/ 文件夾下下載對應的文件,通過 zlib 解壓文件,按原始的目錄結構寫入源代碼。
2. GIT 源碼泄露  案例

2015 年 5 月,烏雲白帽子 “lijiejie” 提交漏洞 “大眾點評某站點 git 泄漏源代碼”,缺陷編號:wooyun-2015-0117332

在此次案例當中,白帽子發現 URL(http://qq.m.dianping.com/.git/ )可以訪問,於是通過工具 githack 下載里面的文件,下面為 githack.py 執行中的截圖:



源碼被下載下來之后,白帽子打開其中的一個代碼文件可以看到里面的源碼:


三、SVN 導致文件泄露
1. 漏洞成因

SVN 是 Subversion 的簡稱,是一個開放源代碼的版本控制系統,相較於 RCS、CVS,它采用了分支管理系統,它的設計目標就是取代 CVS。互聯網上很多版本控制服務已從 CVS 遷移到 Subversion。

很多網站都使用了 svn 版本控制系統,和使用 git 版本控制器類似,很多開發者網站安全意識不足,代碼放到生產壞境中后,沒有清理 svn 的一些信息,導致 svn 殘留,因此攻擊者可以使用工具 dvcs-ripper 下載網站源碼。

此工具的 Github 地址:https://github.com/kost/dvcs-ripper。

利用命令如下:

rip-svn.pl -v -u http://www.localhost.test/.svn/
2. SVN 源碼泄露案例  案例

2015 年 10 月,烏雲白帽子提交漏洞 “我愛我家某處源碼泄露”。缺陷編號:wooyun-2015-0149331

在我愛我家有一處域名為 data.5i5j.com , 白帽子發現下面的地址可以訪問到:

http://data.5i5j.com/sitemetrics/.svn/entries

白帽子知道使用 svn 版本控制器會在目錄中生成 .svn 文件夾,於是猜測該處存在源碼泄露問題,於是使用工具 dvcs-ripper 對其進行了一番驗證,驗證證實了最初的猜測,並得出了下面的目錄以及代碼文件。



在文件目錄中,發現一個文件名比較敏感,對其打開查看發現里面包含了數據庫地址,用戶名,密碼等信息。


四、DS_Store 文件泄漏
1. 漏洞成因

.DS_Store 文件 MAC 系統是用來存儲這個文件夾的顯示屬性的:比如文件圖標的擺放位置。如果用戶刪除以后的副作用就是這些信息的失去。

這些文件本來是給 Finder 使用的,但它們被設想作為一種更通用的有關顯示設置的元數據存儲,諸如圖標位置和視圖設置。 當你需要把代碼上傳的時候,安全正確的操作應該把 .DS_Store 文件刪除才正確。

因為里面包含了一些目錄信息,如果沒有刪除,攻擊者通過 .DS_Store 可以知道這個目錄里面所有文件名稱,從而讓攻擊者掌握了更多的信息。 

在發布代碼時未刪除文件夾中隱藏的 .DS_store,被發現后,獲取了敏感的文件名等信息。攻擊者可以利用訪問 URL(http://www.localhost.test/.ds_store )的方式來判斷,是否存在DS_store泄露,如果存在泄漏,使用工具:dsstoreexp,就可以輕松的下載出源代碼。

如下面的命令:

ds_store_exp.py http://www.localhost.test/.DS_Store
2. .DS_Store 泄露 案例

2015 年 9 月,烏雲白帽子 “深度安全實驗室” 提交漏洞 “TCL 某網站 DS_Store 文件泄露敏感信息(謹慎使用 Mac 系統)”,缺陷編號:wooyun-2015-091869

在 TCL 可視化系統事業部網站中,把蘋果的隱藏文件 DS_Store 也給搬到生產壞境中 , 導致泄露了目錄結構,從而獲取到后台管理頁面以及數據庫文件。打開文件 http://www.tcl-cctv.com/.DS_Store 可以看到下面的內容。



通過圖中的內容可以看到兩處比較敏感的文件,tel_manage.php 以及 tcl_cctv.sql。於是白帽子通過此處泄露的信息,猜測到網站后台地址為:

http://www.tcl-cctv.com/tcl_manage.php

以及數據庫文件 URL:

http://www.tcl-cctv.com/tcl_cctv.sql

打開數據庫文件對應的 URL,在其中可以找到后台管理員賬戶和密碼:



用戶名:admin 密碼:c5b5ae8bdfccc8beefec ,通過 cmd5.com 解密后,可以得到真實的密碼。



在后台 URL 中,輸入賬號密碼,可以看見下圖已經登錄成功。


五、網站備份壓縮文件
1. 漏洞成因

在網站的升級和維護過程中,通常需要對網站中的文件進行修改。此時就需要對網站整站或者其中某一頁面進行備份。

當備份文件或者修改過程中的緩存文件因為各種原因而被留在網站 web 目錄下,而該目錄又沒有設置訪問權限時,便有可能導致備份文件或者編輯器的緩存文件被下載,導致敏感信息泄露,給服務器的安全埋下隱患。

該漏洞的成因主要有是管理員將備份文件放在到 web 服務器可以訪問的目錄下。

該漏洞往往會導致服務器整站源代碼或者部分頁面的源代碼被下載,利用。源代碼中所包含的各類敏感信息,如服務器數據庫連接信息,服務器配置信息等會因此而泄露,造成巨大的損失。

被泄露的源代碼還可能會被用於代碼審計,進一步利用而對整個系統的安全埋下隱患。

.rar   .zip  .7z   .tar.gz   .bak    .swp   .txt
2. 備份壓縮文件 案例

2014 年 5 月,烏雲白帽子 “Noxxx” 提交漏洞 “百度某分站備份文件泄露”,缺陷編號:wooyun-2014-050622

百度網盟的 URL 地址是:

http://wm123.baidu.com

白帽子無意中發現在 URL 加上域名 +.tar.gz 也就是 URL:

http://wm123.baidu.com/wm123.tar.gz

沒想到就下載了網站源碼;在其源碼中還發現了數據庫的鏈接地址,以及賬號信息,如下圖:


六、WEB-INF/web.xml 泄露
1. 漏洞成因

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

WEB-INF 主要包含一下文件或目錄:

    /WEB-INF/web.xml:Web 應用程序配置文件,描述了 servlet 和其他的應用組件配置及命名規則;

    /WEB-INF/classes/:含了站點所有用的 class 文件,包括 servlet class 和非 servlet class,他們不能包含在 .jar 文件中;

    /WEB-INF/lib/:存放 web 應用需要的各種 JAR 文件,放置僅在這個應用中要求使用的 jar 文件 , 如數據庫驅動 jar 文件;

    /WEB-INF/src/:源碼目錄,按照包名結構放置各個 java 文件;

    /WEB-INF/database.properties:數據庫配置文件。

不過在一些特定的場合卻會讓攻擊者能讀取到其中的內容,從而造成源碼泄露。
2. WEB-INF 目錄配置漏洞 案例

2013 年 2 月,烏雲白帽子 “Asuimu” 提交漏洞 “華為官網 WEB-INF 目錄配置文件導致信息泄露”,缺陷編號:wooyun-2013-022906

在該漏洞中由於目錄權限未做好控制,導致網站配置信息泄露以及源碼泄露問題。

此漏洞的 WEB-INF 目錄位置 URL 為:

http://enterprise.huawei.com/topic/hcc/WEB-INF/

白帽子首先尋找配置文件(web.xml)的位置,通過 web.xml 的位置得到 URL 為:

http://enterprise.huawei.com/topic/hcc/WEB-INF/web.xml



訪問 URL 后,能看到如上圖中的內容,白帽子發現有一個 classes/applicationContext.xml 文件;訪問此文件對應的 URL 后,又從此文件中中找到了數據庫配置文件 db-config.xml 的路徑。



打開 db-config.xml 對應的 URL 后,能看到 mysql 的連接信息,比如 root Huawei!2012 localhost 等等信息。不過因為數據庫限制只能本地連接,所以白帽子並沒有連接上數據庫。



通過此漏洞還下載了部分源碼,比如 URL:

http://enterprise.huawei.com/topic/hcc/login.jsp

對應下圖中的源碼:


七、防御方案

從上面的五種泄露方式可以看出,大部分情況都是代碼上傳后沒有及時清理附帶信息所造成的。

因此我建議代碼發布盡量使用工具 rsync 來發布,因為此工具同步時可以排除一些目錄或者文件,比如要排除所有 .svn 文件,可以如下面的命令行來排除,git 同理。

rsync -avlH --exclude=*.svn  root@192.168.1.100:~/tmp/  /data/version/test/

如果不能生產壞境不能使用 rsync,也給大家幾點小建議:

    Git 在倉庫的根目錄新建一個文件夾,把代碼放入此文件夾中,網站的根目錄應該指向此文件夾。這樣攻擊者就不能訪問到 .git 文件夾的內容了。

    不要直接使用 git 或 SVN 等工具拉去代碼到生產目錄,可以在一個臨時目錄先拉去下來,把其中的一些版本控制器附帶信息都去掉后再同步到生產目錄。

    使用 mac 系統的開發者需要注意不要把 .ds_store 文件上傳上去,因為里面包含在一些目錄信息,會導致文件名稱泄露

    Web 生產目錄中不要存放代碼壓縮文件,這些文件極有可能被攻擊者所發現,而下載下來。
————————————————
版權聲明:本文為CSDN博主「技術雜談哈哈哈」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/GitChat/article/details/79014538


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM