業務漏洞挖掘筆記
業務漏洞挖掘筆記
多年的實戰業務漏洞挖掘經驗,為了讓今后的業務漏洞挖掘工作更清晰,以及盡可能的把重復性的工作自動化、半自動化,所以花費很大精力做了這個筆記。
具體操作流程:
得到測試目標-目標資產范圍確定-資產收集-資產管理-資產分類-具體業務功能理解-業務漏洞測試-邏輯漏洞測試-提交報告
資產管理
很多文章和大佬都講過,滲透測試的本質就是信息收集,收集到的信息越多,發現漏洞的概率越大,這些信息被稱為資產。
那么常規的資產收集手段,思路已經千篇一律了,圍繞著子域名和IP收集,其實資產收集的核心思想是,確定資產范圍,確定資產范圍就需要先分析出資產特征,然后通過各種手段全網尋找符合特征的資產,這叫做資產識別,把收集到的資產分類編輯的具有較高可用性,叫做資產管理。
如當你要去干一個目標之前,首先第一步肯定是要知道目標是啥,了解目標是做什么的,憑借安全測試人員的常識和經驗分析目標存在那些特征,來確定資產范圍來收集符合特征的資產 就是資產收集。
目標資產
確定資產范圍/目標畫像
需要收集到的信息
- 域名、子域名
- 網頁內容特征信息
- ICP備案信息
- WHOIS聯系信息
- SSL/TLS證書信息
- DNS解析信息
- WHOIS-NAMESERVER信息
- IP以及同IP其他端口和站點服務類型和版本等基礎信息
- C段、B段、等相關ip段
- 目標全名、介紹、招股書、所在地/聯系方式/郵箱/電話/github
- 目標負責人、法人、管理員、員工 姓名/所在地/聯系方式/郵箱/電話
- 客戶端應用windows/android/ios/mac/公眾號/小程序
- 其他
收集這些信息、會大大增加挖到業務漏洞的成功率,但是遇到中大型政企相關目標,他們的業務是很多 業務線很長,通過手工去收集管理,無疑是個體力活,但有很多的資產收集工具,稍微能幫助安全測試人員降低些工作量,我用的都是自己開發的,哈哈哈,如圖。

功能資產
收集到資產后,就要進行資產管理、資產分類,以便于安全測試,更好的可視化,可以幫助快速定位到風險點。

這些信息在安全測試時都是需要去測試的點和很可供參考的信息,如:
- 一個組建應用突然爆出0day,可以快速第一時間定位到目標資產中存在該組建的資產。
- 租用若干vps,7x24小時爆破目標資產中可以爆破弱密碼的資產。
- 租用若干vps,7x24監控資產變化,以便發現高風險的點。
資產監控
僅僅是收集到這些資產是不夠的,要持續監控業務的變化,在職業刷src或者apt攻擊者的角度,單單過一遍剛收集到的資產是不能滿足持續性業務漏洞挖掘;從職業刷src的角度,過一遍收集的資產,已經發現了所有漏洞并已經提交后修復,或者用當前漏洞測試方法并沒發現有漏洞,這樣業務是安全的,但這個安全是在當下時間的,企業要發展、要解決當前問題,就會出新業務、或者不斷的修復更新舊問題,這就是業務的變化,通過持續性監控業務變化,最快速度的發現變化,對變化進行安全測試、漏洞挖掘。有經驗的刷src的同學都知道,新業務和剛更新過的業務發現漏洞概率都很高。
業務變化主要分為三類:
- web業務的變化
- IP和端口的變化
- 客戶端軟件的更新迭代
那么資產監控這么大的工作量,靠手工是不可能的必須要靠代碼實現,至少半自動化、甚至自動化。
漏洞
業務面臨的風險
數據被竊取、權限被控制、業務不能正常運行。
- 機器權限
- 功能權限
- 相關應用服務權限
- 數據泄露
什么是漏洞?
一個產品的實現、總會有很多邏輯包括在內,如一個網購網站,他需要的功能,
- 商品展示、商品分類搜索、商品購買等。
- 網站后臺管理 商品管理、訂單處理、相關反饋處理等。
- 個人用戶管理、用戶注冊、用戶登錄處理、用戶個人資料編輯、收獲地址管理、訂單管理等。
這是一個最基礎的網購平臺網站,單純用技術角度來描述,你買一件商品 其中用到經過多少技術。
我要開個網購網站,最基礎的 首先要有一個域名、一臺服務器、服務器上裝相關web服務軟件,如apache(web服務軟件)+php(web腳本語言)+mysql(數據庫)。
界面展示,需要前端開發做界面展示、前端程序員需要掌握的技術、html+css+javascript+ps等,為了適配移動端或者技術進階需要html5+css3+jquery還有一些前端常用的框架vue\bootstrap\AngularJS\webpack等,還要盡量讓前端瀏覽器處理更快 首屏速度更快,還要有一定的設計能力,讓界面看著更美觀嗎,用戶打開瀏覽器看見的頁面就是通過這些技術實現。
后端開發、根據業務場景情況、最優選擇一個適合業務的后端開發語言,如phpodejs\jsp\aspx\asp\其他web cgi等,就選php吧,資深后端程序員必須框架開發,請參考 PHP的25種框架 目前國內php最火框架ThinkPHP,后端開發主要為了實現 業務邏輯、如那些表單操作多的功能,商品搜索、用戶登錄注冊、購買、個人信息修改、商品修改等功能,都需要通過前端頁面通過http/s協議傳輸到后端 通過php之類后端開發語言進行處理。
數據庫建設,根據業務場景情況、最優選擇一個適合業務的數據庫,數據庫分為sql數據庫、如MySQL\SQL server\Oracle\PostgrcSQL等,nosql數據庫Mongodb\Redis等,用戶的提交的數據就保存在這些數據庫里,如賬號密碼、個人信息、訂單信息等,管理員存放的商品信息 也都在數據庫里,通過腳本語言的邏輯處理調用數據庫里的數據 展示到前端頁面。
選擇一個靠譜的web服務、如apache\iis\Nginx\Lighttpd\Tomcat等其他web服務軟件,還要考慮并發、擴容、災備等相關技術問題,面對1w用戶 10w用戶 100萬的用戶 1000萬乃至上億,都有最優不同的應對方式方法策略,當然這都是架構師、全棧程序員考慮的問題,我們web黑盒測試的漏洞挖掘選手,只需要考慮,這些流程 這些點上,那些地方最容易 最常出現漏洞?
因為有了功能,所以有了漏洞,需要用到數據庫的web業務就很有可能出現sql注入,需要有文件操作或系統命令執行的地方,就會出現命令注入或任意文件操作的漏洞,信息管理系統自然存在信息泄露的風險....
話歸正題、什么是漏洞?比如一個登陸功能,我通過技術手段,未經許可登陸進其他用戶或者管理員賬號,那么這其中肯定是存在漏洞的,漏洞列表如下....
黑盒測試相關漏洞

如圖所見,大多數技術相關漏洞都是因為注入非法字符串導致出現漏洞,xss是js代碼注入,js可以控制當前瀏覽器頁面;sql注入是注入的sql命令,sql是操作數據庫的語言;命令注入,操作系統命令可以控制機器; 就因為用戶輸入的非法字符串,被不安全代碼處理,讓 操作系統/編程語言/數據庫/瀏覽器 理解執行后,導致出現了漏洞。
- Xss
echo $_GET[ 'xss' ]; ?>
- Sql
$id=$_GET["id"];
if (isset($id)){
//$statement = $link->prepare("SELECT * FROM users where id=".$id);
$result = mysqli_query($link,"SELECT * FROM users where user_id=".$id);
if (!$result) {
printf("Error: %s", mysqli_error($link));
exit();
}
while($row = mysqli_fetch_array($result)){
echo $row['first_name'];
echo "
";
}
}else {
echo '{"text":"error"}';
}
?>
- Ssrf
ini_set("display_errors", "On");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $_GET['url']);
#curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
#curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
curl_exec($ch);
curl_close($ch);
?>
- 服務端通過內網訪問用戶輸入的url鏈接就是ssrf
- 文件讀取
- Xxe
- xml注入
- 邏輯漏洞
- 命令注入
/*
命令注入案例
*/
if( isset( $_GET[ 'Submit' ] ) ) {
// Get input
$target = $_REQUEST[ 'cmd' ];
// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ls ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'dir ' . $target );
}
// Feedback for the end user
echo "
{$cmd}
";
}
?>
- 代碼注入
- php/nodejs/jsp/aspx/asp/python/golang/c/c++等等編程語言的寫入與拼接。
- 信息泄露
- 上傳漏洞
- 上傳可執行文件到可執行目錄,或者被服務端執行。
那么這些漏洞都是由http協議傳輸,測試漏洞存在的第一步,修改請求參數值,重放判斷響應包是否與正常請求的響應包有所不同,如:
正常

異常

這是一個很典型的sql報錯注入判斷方式。
當然,判斷是否存在漏洞依據很多,大體分為:
- 響應內容
- 響應時間
- Dnslog/Httplog判斷
- 瀏覽器Dom渲染后的Html
- 瀏覽器DevTools Console
根據實際情況,選擇最適合的判斷方式,其實常見的、標準化的http傳參方式,完全可以依照以上列舉的規則,做出一個減輕工作量漏洞測試工具,如下圖

- 通過修改請求參數值后追加 單雙引號 逐個重放,遍歷每個參數,確認那個參數會引起響應異常。
- 對異常的參數,通過修改請求參數值后追加payload 來檢測命令注入、ssrf、代碼注入、sql注入、信息泄露等漏洞。
- 如果響應Content-Type=html,用瀏覽器重放請求來檢測domxss、和抓取dom渲染后頁面url、domain等相關信息。
對于一些點擊,和頁面的表單,其實打開瀏覽器挖洞時 你可以加個參數--remote-debugging-port=9222 然后遠程調試 可以做一些,便捷的工具,如自動表單填寫,自動點擊頁面等功能,輔助測試,減少不必要的重復工作。
調試瀏覽器

自動表單填寫

對于常規的業務場景,從目標范圍確定,資產收集到漏洞檢測,盡可能的規范化,流程化,工具化,做黑客絕對不應該是整天去手工修改http通信里的參數,在url里加單引號 加</span></code><span style="letter-spacing: 2px;font-size: 14px;">,修改id遍歷,能不能酷一點 做個帥一點的黑客?</span><br></section><p style="text-align: center;"><img class="rich_pages js_insertlocalimg wxw-img" data-ratio="0.8972477064220183" data-s="300,640" src="https://mmbiz.qpic.cn/mmbiz_jpg/83e7tQTo0wP2OPdFMQLfibYIzzrcD7NQpLC6xyW2CE66Yru9O1YEz8ibA8hxPg92hGKUkmjCVJm29CIku9TmyvNg/640?wx_fmt=jpeg" data-type="jpeg" data-w="545" style=""></p><section style="font-family: 'Monospaced Number', 'Chinese Quote', -apple-system, system-ui, 'Segoe UI', Roboto, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size: 15px;letter-spacing: 0.75px;text-align: start;white-space: normal;background-color: rgb(255, 255, 255);line-height: 1.75em;"><br><span style="font-size: 14px;letter-spacing: 2px;">一直幻想著通過自動化挖洞躺賺的一天....</span></section><p><span style="display: none;line-height: 0px;">?</span></p><section class="mp_profile_iframe_wrp"><mpprofile class="js_uneditable custom_select_card mp_profile_iframe" data-pluginname="mpprofile" data-id="Mzg5NDMzNjYxOA==" data-headimg="http://mmbiz.qpic.cn/mmbiz_png/83e7tQTo0wMkqsZicPejWmM2kXgKjD1BLLSyPaIOpDt0JjyTnopoibJTSeh88sNy6P0Xpmx2UQdVdaQ6t2dAkzcg/0?wx_fmt=png" data-nickname="網絡安全編程與黑客程序員" data-alias="" data-signature="網絡安全編程與黑客程序員技術社區,記錄網絡安全與黑客技術中優秀的內容,傳播網絡安全與黑客技術文化,分享典型網絡安全知識和案例!未知攻,焉知防。攻防兼顧,方知安全!程序員改變世界!" data-from="0"></mpprofile></section>