日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP-代码审计-变量覆盖

發布時間:2024/6/3 php 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP-代码审计-变量覆盖 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當你的才華

還撐不起你的野心時

那你就應該靜下心來學習


?

? ? ? ?代碼審計學習線上實驗,都是CE一邊實操,一邊整理的筆記,方便以后翻看時,可快速查閱。

目錄

變量覆蓋漏洞

一、簡介

? extract()函數

? parse_strc()函數

? import_request_variables()函數

二、漏洞利用

三、漏洞防范

?extract()函數防御

parse_str()函數防御

import_request_variables()函數防御


變量覆蓋漏洞

? ? ? ?變量覆蓋指的是用我們自定義的參數值替換程序原有的變量值,一般變量覆蓋漏洞需要結合程序的其它功能來實現完整的攻擊

一、簡介

變量覆蓋漏洞大多數由函數使用不當導致,經常引發變量覆蓋漏洞的函數有:extract(), parse_str()和import_request_variables()

通常來說,單獨的變量覆蓋漏洞很難有利用價值,需要和其他漏洞結合起來才能完成攻擊

?

? extract()函數

先看看extract()函數說明:

  • extract(array,extract_rules,prefix)
  • 函數從數組中將變量導入到當前的符號表,即將數組中的鍵值對注冊成函數,使用數組鍵名作為變量名,使用數組鍵值作為變量值
  • 該函數的變量覆蓋隱患就出在第二個參數上面:

    • 當第二個參數為空或者EXTR_OVERWRITE時,變量注冊如果遇到沖突會直接覆蓋掉原變量。

    • 當第二個變量為EXTR_IF_EXISTS時,僅當原變量已存在是對其進行更新,否則不注冊新變量。

    extract.php 代碼如下:

  • <?php
  • header("Content-Type: text/html; charset=utf-8");
  • $a = 1;
  • print_r("extract()執行之前:\$a = ".$a."<br />");
  • $b = array('a'=>'2');
  • extract($b);
  • print_r("extract()執行之后:\$a = ".$a."<br />");
  • ?>
  • 打開瀏覽器輸入:http://192.168.161.133/VariCover/extract.php

    可以看到extract()函數執行之后,將變量$a的值覆蓋

    ?

    ? parse_strc()函數

    說明:

  • parse_str(string,array)
  • 函數把查詢字符串解析并注冊為變量,主要用于頁面之間傳值(參數)
  • 該函數在注冊變量之前不會驗證當前變量是否已存在,如果存在會直接覆蓋。

    parse_str.php

  • <?php
  • $a = 1;
  • print_r("parse_str()執行之前:\$a = ".$a."<br />");
  • parse_str("a=2");
  • print_r("parsr_str()執行之后:\$a = ".$a."<br />");
  • ?>
  • 打開瀏覽器,輸入url:http://192.168.161.133/VariCover/extract.php

    ?

    ? import_request_variables()函數

    說明:

  • import_request_variables ( string $types , string $prefix )
  • 將 GET/POST/Cookie 變量導入到全局作用域中, types 參數指定需要導入的變量, G代表GET,P代表POST,C代表
  • COOKIE
  • import_request_variables.php

  • <?php
  • $a = 1;//原變量值為1
  • import_request_variables('GP'); //傳入參數是注冊變量
  • print_r($a); //輸出結果會變成傳入參數
  • ?>
  • ? ? 值得注意的是:import_request_variables()函數函數只能用在 PHP4.1 ~ PHP5.4之間,額外以上三種函數,使用時請格外注意,否則非常容易出現變量覆蓋漏洞。

    ?

    二、漏洞利用

    ? ? ? ?我們應該已經理解了變量覆蓋是怎么發生的,但是否還在疑惑這種漏洞是如何利用的?又會造成怎樣的危害呢??正如之前所說,單獨的變量覆蓋漏洞不易實現完整的攻擊,但是這種漏洞的利用上限非常高,配合上其他漏洞,會有意想不到的效果。 比如,齊博CMS變量覆蓋導致sql注入漏洞、metinfo變量覆蓋漏洞導致任意文件包含,有興趣的同學可以自行百度了解詳情,這里就點到為止

    ?

    三、漏洞防范

    ?extract()函數防御

    將extract.php中extract()函數第二個參數修改為extr_skip:

  • <?php
  • header("Content-Type: text/html; charset=utf-8");
  • $a = 1;
  • print_r("extract()執行之前:\$a = ".$a."<br />");
  • $b = array('a'=>'2');
  • extract($b,extr_skip);
  • print_r("extract()執行之后:\$a = ".$a."<br />");
  • ?>
  • 再加載該頁面,可以看到變量沒有再被覆蓋

    ?

    parse_str()函數防御

    parse_str()函數的防范,只能我們自己添加判斷語句,比如:

  • <?php
  • header("Content-Type: text/html; charset=utf-8");
  • $a = 1;
  • print_r("parse_str()執行之前:\$a = ".$a."<br />");
  • if(!isset($a)){
  • parse_str("a=2");
  • }
  • print_r("parsr_str()執行之后:\$a = ".$a."<br />");
  • ?>
  • 再加載該頁面,可以看到變量不再會被覆蓋

    ?

    import_request_variables()函數防御

    ? ? ? ?此函數是非常危險的函數,在PHP5.5之后已被官方刪除!假如你任然在使用低版本的PHP環境,也建議你避免使用此函數.


    我不需要自由,只想背著她的夢

    一步步向前走,她給的永遠不重


    ?

    總結

    以上是生活随笔為你收集整理的PHP-代码审计-变量覆盖的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。