中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何通過代碼審計找出網站中的XSS漏洞

發布時間:2021-11-18 16:40:30 來源:億速云 閱讀:331 作者:柒染 欄目:網絡管理

如何通過代碼審計找出網站中的XSS漏洞,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

一、背景

筆者此前錄制了一套XSS的視頻教程,在漏洞案例一節中講解手工挖掘、工具挖掘、代碼審計三部分內容,準備將內容用文章的形式再次寫一此,前兩篇已經寫完,內容有一些關聯性,其中手工XSS挖掘篇地址為快速找出網站中可能存在的XSS漏洞實踐。

這里主要記錄通過代碼審計的方式進行XSS漏洞挖掘,分為了找出關鍵位置,正向審計,反向審計三個部分,審計的系統為permeate滲透測試系統,測試系統的搭建可以參考筆者的第一篇文章。

二、操作概要

1.找出關鍵位置

2.正向審計

3.反向審計

三、找出關鍵位置

打蛇打七寸,說明在關鍵位置做事效率會更高,代碼審計找出漏洞也是同理,因此筆者需要找出XSS關鍵的位置;對于目前的大多數Web應用來說,MVC模式是非常主流的一種形式,因此筆者這里將找到對應的控制器和模板,在這一節當中主要講解找出位置的思路。

3.1 找出控制器

找出控制器的方式通常是通過主入口文件與URL地址兩塊去分析,現在筆者打開首頁,發現URL地址為:

http://permeate.songboy.net/home/index.php

當點擊板塊后,URL地址變成了如下地址:

http://permeate.songboy.net/home/index.php?m=tiezi&a=index&bk=6

從URL地址中可以看到不管首頁還是板塊頁面,都經過URL地址home/index.php,因此筆者接下來便可以通過打開home/index.php文件來查看控制器所存放的位置,打開后代碼如下所示:

<?php
require_once "../core/common.php";
include "./public/header.php";
includeAction("$model","$action");
include "./public/footer.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;
        }
    }

    //如果沒有找到對應的控制器,直接調用模板文件
    $tplFilePath = "./tpl/$model/$action.php";
    if (is_readable($tplFilePath)) {
        require_once $tplFilePath;
        return true;
    }

    echo '控制器或模板文件' . $filePath . '不存在!';
    die;
}

從代碼中可以看出,其控制器文件存放在home/action/下,此時筆者打開此文件夾,可以看到幾個php文件,如下圖所示:

如何通過代碼審計找出網站中的XSS漏洞

回想剛才筆者所看到的URL地址如下:

http://permeate.songboy.net/home/index.php?m=tiezi&a=index&bk=6

聯想起來其控制器文件為tiezi.php,將其打開一看:

<?php

class tiezi
{
    function __construct()
    {

    }

    public function index()
    {
        .....
        $data['count'] = $count;
        $data['page_size'] = $page_size;
        $data['page_count'] = $page_count;
        $data['page_num'] = $page_num;
        displayTpl('tiezi/index', $data);
    }

果然發現了index方法。

3.2 找出模板

得到控制器之后,筆者還需要找到模板存放的位置,通常模板與控制器是息息相關,因此可以控制其中找到蛛絲馬跡,比如上面的代碼當中,最后一行代碼為displayTpl函數,從字面意思上可以理解為顯示模板,因此筆者通過PHPStorm的跳轉功能直接跳過去查看該函數的具體流程,找到代碼如下所示:

/**
 * 加載模板文件
 * @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目錄下,通過文件夾打開查看,如下圖所示:

如何通過代碼審計找出網站中的XSS漏洞

3.3 驗證位置

通過上面的操作流程已經基本確定控制器與模板的位置,但為了防止意外,還是準確驗證一下,在控制器中輸出一個字符串1111111,在模板中輸出字符串222222222,如果按照筆者之前所預想的,那么這兩組字符串都會被輸出。

在控制器中加入的測試代碼如下:

public function index()
{

    echo '11111111111';

在模板文件中加入的測試代碼如下:

222222222222222
<?php
$get = $_GET;
?>
<section class="section">

現在會到瀏覽器,在當前頁面單擊鼠標右鍵,選中查看源代碼,如下圖所示:

如何通過代碼審計找出網站中的XSS漏洞

在源代碼當中,搜索字符串11111,果然搜索到字符串,如下圖所示:

如何通過代碼審計找出網站中的XSS漏洞

四、正向審計

在找到關鍵位置之后,筆者便可以針對性的去進行代碼審計,XSS的代碼審計主要有兩種方式,正向代碼審計,反向代碼審計;正向代碼審計的意思是從參數的接收到參數最后的使用這個流程進行檢查,而反向審計則是相反從變量使用的位置上推到參數接收。

4.1 接收參數位置

首先通過正向方式來進行代碼審計,正向代碼審計是從接收參數進行排查,因此找到控制器當中,通過編輯器的搜索功能,筆者在控制器文件當中搜索了關鍵字 $_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 模板位置是否過濾

從上面代碼當中可以看出參數bk并沒有進行任何過濾,便直接放到了模板當中,這便留下安全隱患,如果在模板當中也沒用進行安全過濾,那么就存在著反射型XSS漏洞,打開模板文件并搜索關鍵詞bk,代碼如下所示:

<div class="post-list-controller"><div ><a class="btn btn-primary" href="fatie.php?bk=<?php echo $bk ?>">發帖</a></div>

可以看出,模板中確實沒有進行安全過濾。

4.3 漏洞驗證

http://permeate.songboy.net/home/index.php?m=tiezi&a=index&bk=6%22%3E%3Cscript%3Ealert(123)%3C/script%3E

如下圖所示:

如何通過代碼審計找出網站中的XSS漏洞

五、反向審計

反向審計則從模板中找出使用了那些變量,并反推變量的來源,以及是否進行了安全過濾。

5.1 找出模板中的變量

通過PHPStrom編輯器的正則表達式功能匹配變量,正則表達式如下:

echo \$([a-z]*)

這個正則表達式是匹配輸出變量,比如匹配字符echo $zhangsan,用PHPStorm匹配到的結果如下圖所示:

如何通過代碼審計找出網站中的XSS漏洞

雙擊鼠標左鍵打開對應代碼文件/home/search.php,代碼如下所示:

如何通過代碼審計找出網站中的XSS漏洞

在代碼中可以看出變量直接放在模板當中,如果在控制器當中也沒有轉義此變量的來源,那么很有可能會存在XSS問題。

5.2 查找變量來源

追蹤變量$keyword,找到變量來源:

<?php
include "public/header.php";
include "../core/common.php";

$keywords = $_REQUEST['keywords'];
if (!empty($keywords)) {
    $where = " where title like '%$keywords%' ";

從上面的代碼當中可以看出變量$keywords并沒有進行任何過濾,因此可以篤定此處也存在這XSS漏洞問題。

5.3 漏洞驗證

從代碼的位置發現與前面的唯一入口不同,此代碼文件并不是類文件,因此嘗試直接訪問,構造出URL地址如下:

http://permeate.songboy.net/home/search.php?keywords=%E6%B5%8B%E8%AF%95%3Cscript%3Ealert(123)%3C/script%3E

通過火狐瀏覽器訪問此URL地址之后,出現結果如下圖所示:

如何通過代碼審計找出網站中的XSS漏洞

在提示框當中果然彈出了123的提示。

關于如何通過代碼審計找出網站中的XSS漏洞問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

xss
AI

石狮市| 隆安县| 郁南县| 卓尼县| 凤凰县| 普兰店市| 耒阳市| 沛县| 内乡县| 家居| 安义县| 治县。| 岐山县| 收藏| 江川县| 元阳县| 鹤山市| 古蔺县| 禄丰县| 资讯| 汕头市| 舟山市| 梅河口市| 宁远县| 灯塔市| 新和县| 于都县| 南开区| 峨边| 博爱县| 清水河县| SHOW| 修水县| 宜君县| 健康| 宁德市| 临高县| 遂平县| 小金县| 孟连| 兴城市|