摘要:一背景筆者此前錄制了一套的視頻教程,在漏洞案例一節(jié)中講解手工挖掘工具挖掘代碼審計三部分內(nèi)容準備將內(nèi)容用文章的形式再次寫一此前兩篇已經(jīng)寫完,內(nèi)容有一些關(guān)聯(lián)性,其中手工挖掘篇地址為快速找出網(wǎng)站中可能存在的漏洞實踐一本文主要記錄通過代碼審計的方式
一、背景
筆者此前錄制了一套XSS的視頻教程,在漏洞案例一節(jié)中講解手工挖掘、工具挖掘、代碼審計三部分內(nèi)容,準備將內(nèi)容用文章的形式再次寫一此,前兩篇已經(jīng)寫完,內(nèi)容有一些關(guān)聯(lián)性,其中手工XSS挖掘篇地址為快速找出網(wǎng)站中可能存在的XSS漏洞實踐(一)https://segmentfault.com/a/1190000016095198
本文主要記錄通過代碼審計的方式進行XSS漏洞挖掘,分為了找出關(guān)鍵位置,正向?qū)徲?,反向?qū)徲嬋齻€部分,審計的系統(tǒng)為permeate滲透測試系統(tǒng),測試系統(tǒng)的搭建可以參考筆者的第一篇文章。
二、操作概要找出關(guān)鍵位置
正向?qū)徲?/p>
反向?qū)徲?/p> 三、找出關(guān)鍵位置
打蛇打七寸,說明在關(guān)鍵位置做事效率會更高,代碼審計找出漏洞也是同理,因此筆者需要找出XSS關(guān)鍵的位置;對于目前的大多數(shù)Web應(yīng)用來說,MVC模式是非常主流的一種形式,因此筆者這里將找到對應(yīng)的控制器和模板,在這一節(jié)當中主要講解找出位置的思路
3.1 找出控制器找出控制器的方式通常是通過主入口文件與URL地址兩塊去分析,現(xiàn)在筆者打開首頁,發(fā)現(xiàn)URL地址為
http://permeate.songboy.net/home/index.php
當點擊板塊后,URL地址變成了如下地址
http://permeate.songboy.net/home/index.php?m=tiezi&a=index&bk=6
從URL地址中可以看到不管首頁還是板塊頁面,都經(jīng)過URL地址home/index.php,因此筆者接下來便可以通過打開home/index.php文件來查看控制器所存放的位置,打開后代碼如下所示
再次打開../core/common.php文件,代碼如下所示
function includeAction($model, $action) { //判斷控制器是否存在 $filePath = "./action/$model.php"; if (is_readable($filePath)) { require_once $filePath; $class = new $model; if (is_callable(array($class, $action))) { $class->$action(); return true; } } //如果沒有找到對應(yīng)的控制器,直接調(diào)用模板文件 $tplFilePath = "./tpl/$model/$action.php"; if (is_readable($tplFilePath)) { require_once $tplFilePath; return true; } echo "控制器或模板文件" . $filePath . "不存在!"; die; }從代碼中可以看出,其控制器文件存放在home/action/下,此時筆者打開此文件夾,可以看到幾個php文件,如下圖所示
回想剛才筆者所看到的URL地址如下
http://permeate.songboy.net/home/index.php?m=tiezi&a=index&bk=6聯(lián)想起來其控制器文件為tiezi.php,將其打開一看
果然發(fā)現(xiàn)了index方法
3.2 找出模板得到控制器之后,筆者還需要找到模板存放的位置,通常模板與控制器是息息相關(guān),因此可以控制其中找到蛛絲馬跡,比如上面的代碼當中,最后一行代碼為displayTpl函數(shù),從字面意思上可以理解為顯示模板,因此筆者通過PHPStorm的跳轉(zhuǎn)功能直接跳過去查看該函數(shù)的具體流程,找到代碼如下所示
/** * 加載模板文件 * @param $tplPath */ function displayTpl($tplPath, $data = []) { $filePath = "./tpl/$tplPath.php"; if (!is_readable($filePath)) { echo "模板文件" . $filePath . "不存在!"; die; } foreach ($data as $key => $val) { $$key = $val; } require_once $filePath; }在上面代碼當中可以看出模板存放于home/tpl目錄下,通過文件夾打開查看,如下圖所示
3.3 驗證位置通過上面的操作流程已經(jīng)基本確定控制器與模板的位置,但為了防止意外,還是準確驗證一下,在控制器中輸出一個字符串1111111,在模板中輸出字符串222222222,如果按照筆者之前所預(yù)想的,那么這兩組字符串都會被輸出,參考代碼如下
在控制器中加入的測試代碼如下
public function index() { echo "11111111111";在模板文件中加入的測試代碼如下
222222222222222現(xiàn)在會到瀏覽器,在當前頁面單擊鼠標右鍵,選中查看源代碼,如下圖所示
在源代碼當中,搜索字符串11111,果然搜索到字符串,如下圖所示
四、正向?qū)徲?/b>在找到關(guān)鍵位置之后,筆者便可以針對性的去進行代碼審計,XSS的代碼審計主要有兩種方式,正向代碼審計,反向代碼審計;正向代碼審計的意思是從參數(shù)的接收到參數(shù)最后的使用這個流程進行檢查,而反向?qū)徲媱t是相反從變量使用的位置上推到參數(shù)接收
4.1 接收參數(shù)位置首先通過正向方式來進行代碼審計,正向代碼審計是從接收參數(shù)進行排查,因此找到控制器當中,通過編輯器的搜索功能,筆者在控制器文件當中搜索了關(guān)鍵字 $_GET 找到了tiezi.php控制器中的index方法,代碼如下所示
public function index() { $id = $_GET["bk"]; $bk = &$id; //開始分頁大小 $page_size = 15; //獲取當前頁碼 $page_num = empty($_GET["page"]) ? 1 : $_GET["page"]; //中間代碼.................省略 $data["bk"] = $bk; $data["count"] = $count; $data["page_size"] = $page_size; $data["page_count"] = $page_count; $data["page_num"] = $page_num; displayTpl("tiezi/index", $data); }4.2 模板位置是否過濾從上面代碼當中可以看出參數(shù)bk并沒有進行任何過濾,便直接放到了模板當中,這便留下安全隱患,如果在模板當中也沒用進行安全過濾,那么就存在著反射型XSS漏洞,打開模板文件并搜索關(guān)鍵詞bk,代碼如下所示
可以看出,模板中確實沒有進行安全過濾
4.3 漏洞驗證http://permeate.songboy.net/home/index.php?m=tiezi&a=index&bk=6%22%3E%3Cscript%3Ealert(123)%3C/script%3E如下圖所示
五、反向?qū)徲?/b>反向?qū)徲媱t從模板中找出使用了那些變量,并反推變量的來源,以及是否進行了安全過濾
5.1 找出模板中的變量通過PHPStrom編輯器的正則表達式功能匹配變量,正則表達式如下
echo $([a-z]*)這個正則表達式是匹配輸出變量,比如匹配字符echo $zhangsan,用PHPStorm匹配到的結(jié)果如下圖所示
雙擊鼠標左鍵打開對應(yīng)代碼文件/home/search.php,代碼如下所示
在代碼中可以看出變量直接放在模板當中,如果在控制器當中也沒有轉(zhuǎn)義此變量的來源,那么很有可能會存在XSS問題。
5.2 查找變量來源追蹤變量$keyword,找到變量來源
從上面的代碼當中可以看出變量$keywords并沒有進行任何過濾,因此可以篤定此處也存在這XSS漏洞問題
5.3 漏洞驗證從代碼的位置發(fā)現(xiàn)與前面的唯一入口不同,此代碼文件并不是類文件,因此嘗試直接訪問,構(gòu)造出URL地址如下
http://permeate.songboy.net/home/search.php?keywords=%E6%B5%8B%E8%AF%95%3Cscript%3Ealert(123)%3C/script%3E通過火狐瀏覽器訪問此URL地址之后,出現(xiàn)結(jié)果如下圖所示
在提示框當中果然彈出了123的提示
六、新書推薦如果對筆者的Web安全文章較為感興趣,可以關(guān)注筆者更多文章內(nèi)容,新書《PHP Web安全開發(fā)實戰(zhàn)》,現(xiàn)已在各大網(wǎng)點銷售,封面如下圖所示
作者:湯青松
微信:songboy8888
日期:2018-10-09
我的博客即將同步至騰訊云+社區(qū),邀請大家一同入駐:https://cloud.tencent.com/dev...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/29500.html
摘要:一背景筆者月份在慕課網(wǎng)錄制視頻教程跨站漏洞加強安全里面需要講到很多實戰(zhàn)案例,在漏洞挖掘案例中分為了手工挖掘工具挖掘代碼審計三部分內(nèi)容手工挖掘篇參考地址為快速找出網(wǎng)站中可能存在的漏洞實踐一本文主要記錄利用安全工具進行漏洞挖掘部分,分為了設(shè)置代 一、背景 筆者6月份在慕課網(wǎng)錄制視頻教程XSS跨站漏洞 加強Web安全,里面需要講到很多實戰(zhàn)案例,在漏洞挖掘案例中分為了手工挖掘、工具挖掘、代碼審...
摘要:我們做代碼審計之前選好工具也是十分必要的。一審計工具介紹代碼審計系統(tǒng)功能介紹是一款基于開發(fā)的針對代碼安全審計的軟件。自定義審計規(guī)則。黑盒敏感信息泄露一鍵審計。挖掘這種漏洞主要是檢查是否使用了,搜索和。 GitChat 作者:湯青松原文:PHP 開發(fā)者如何做代碼審查?關(guān)注微信公眾號:「GitChat 技術(shù)雜談」 一本正經(jīng)的講技術(shù) 【不要錯過文末彩蛋】 前言 工欲善其事,必先利其器。我們做...
摘要:簡介最近在逛碼云時候發(fā)現(xiàn)靶場系統(tǒng)感覺界面和業(yè)務(wù)場景設(shè)計的還不錯所以過來分享一下同時也是分享一下我平時挖掘漏洞的一些思路吧這篇文章里雖然只簡單介紹其中三種漏洞類型,但也是想是一個拋轉(zhuǎn)引玉吧給安全新手提供一些挖掘思路下載地址地址國內(nèi)地址這篇文章 簡介 最近在逛碼云時候發(fā)現(xiàn)permeat靶場系統(tǒng),感覺界面和業(yè)務(wù)場景設(shè)計的還不錯.所以過來分享一下. 同時也是分享一下我平時挖掘漏洞的一些思路吧,...
摘要:一背景筆者最近在慕課錄制了一套跨站漏洞加強安全視頻教程,課程當中有講到的挖掘方式,所以在錄制課程之前需要做大量實踐案例,最近視頻已經(jīng)錄制完成,準備將這些漏洞的挖掘過程記錄下來,方便自己也方便他人。 一、背景 筆者最近在慕課錄制了一套XSS跨站漏洞 加強Web安全視頻教程,課程當中有講到XSS的挖掘方式,所以在錄制課程之前需要做大量實踐案例,最近視頻已經(jīng)錄制完成,準備將這些XSS漏洞的挖...
閱讀 2959·2023-04-25 17:46
閱讀 3588·2021-11-25 09:43
閱讀 1092·2021-11-18 10:02
閱讀 3051·2021-10-14 09:43
閱讀 2767·2021-10-13 09:40
閱讀 1524·2021-09-28 09:35
閱讀 2184·2019-08-30 15:52
閱讀 3154·2019-08-30 14:06