当前位置:网站首页>【web審計-源碼泄露】獲取源碼方法,利用工具
【web審計-源碼泄露】獲取源碼方法,利用工具
2022-07-05 03:36:00 【黑色地帶(崛起)】
目錄
一、備份文件泄露
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 exploithttps://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(簡單)
dvcs-ripper
下載地址:
Rip Web可訪問(分布式)版本控制系統:SVN,GIT,Mercurial/hg,bzr,...
即使目錄瀏覽關閉,它也可以翻錄存儲庫。
確保將自己置於要下載/克隆存儲庫的空目錄中。
四、hg、CVS、Bazaar/bzr源碼泄漏
4.1、工具:
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文件並遞歸地下載文件到本地。
下載地址:
七、利用漏洞泄露
結合任意文件包含漏洞或者任意文件存在下載漏洞
就可能下載到源碼,並對其進行審計
边栏推荐
- How to make OS X read bash_ Profile instead of Profile file - how to make OS X to read bash_ profile not . profile file
- LeetCode 234. Palindrome linked list
- [groovy] string (string type variable definition | character type variable definition)
- [Yu Yue education] National Open University autumn 2018 8109-22t (1) monetary and banking reference questions
- this+闭包+作用域 面试题
- Kubernetes - identity and authority authentication
- The perfect car for successful people: BMW X7! Superior performance, excellent comfort and safety
- Solve the problem that sqlyog does not have a schema Designer
- Share the newly released web application development framework based on blazor Technology
- Is there any way to change the height of the uinavigationbar in the storyboard without using the UINavigationController?
猜你喜欢
Azkaban installation and deployment
Pat grade a 1119 pre- and post order traversals (30 points)
Talk about the SQL server version of DTM sub transaction barrier function
[system security] ten thousand words summary system virtualization container bottom layer principle experiment
Azkaban实战
[groovy] string (string splicing | multi line string)
Hot knowledge of multithreading (I): introduction to ThreadLocal and underlying principles
IPv6 experiment
The perfect car for successful people: BMW X7! Superior performance, excellent comfort and safety
Port, domain name, protocol.
随机推荐
Idea inheritance relationship
Three line by line explanations of the source code of anchor free series network yolox (a total of ten articles, which are guaranteed to be explained line by line. After reading it, you can change the
There is a question about whether the parallelism can be set for Flink SQL CDC. If the parallelism is greater than 1, will there be a sequence problem?
Anchor free series network yolox source code line by line explanation Part 2 (a total of 10, ensure to explain line by line, after reading, you can change the network at will, not just as a participan
In MySQL Association query, the foreign key is null. What if the data cannot be found?
Tencent cloud, realize image upload
Devtools的简单使用
What is the most effective way to convert int to string- What is the most efficient way to convert an int to a String?
Jd.com 2: how to prevent oversold in the deduction process of commodity inventory?
[groovy] string (string injection function | asBoolean | execute | minus)
Difference between MotionEvent. getRawX and MotionEvent. getX
Yuancosmic ecological panorama [2022 latest]
【web源码-代码审计方法】审计技巧及审计工具
How to make the listbox scroll automatically when adding a new item- How can I have a ListBox auto-scroll when a new item is added?
How can we truncate the float64 type to a specific precision- How can we truncate float64 type to a particular precision?
Sqoop命令
Is there any way to change the height of the uinavigationbar in the storyboard without using the UINavigationController?
[groovy] groovy environment setup (download groovy | install groovy | configure groovy environment variables)
[groovy] string (string splicing | multi line string)
Pat grade a 1119 pre- and post order traversals (30 points)