濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > PHP中的變量覆蓋漏洞深入解析

PHP中的變量覆蓋漏洞深入解析

熱門標(biāo)簽:百度商鋪地圖標(biāo)注 新河科技智能外呼系統(tǒng)怎么樣 釘釘打卡地圖標(biāo)注 常州地圖標(biāo)注服務(wù)商 福州人工外呼系統(tǒng)哪家強(qiáng) 注冊(cè)400電話申請(qǐng) 地圖標(biāo)注平臺(tái)怎么給錢注冊(cè) 衡水外呼系統(tǒng)平臺(tái) 安裝電銷外呼系統(tǒng)

1.extract()變量覆蓋

1.extract()

extract() 函數(shù)從數(shù)組中將變量導(dǎo)入到當(dāng)前的符號(hào)表。

該函數(shù)使用數(shù)組鍵名作為變量名,使用數(shù)組鍵值作為變量值。針對(duì)數(shù)組中的每個(gè)元素,將在當(dāng)前符號(hào)表中創(chuàng)建對(duì)應(yīng)的一個(gè)變量。

該函數(shù)返回成功設(shè)置的變量數(shù)目。

extract(array,extract_rules,prefix)

參考引用:https://www.runoob.com/php/func-array-extract.html

eg:

?php
extract($_GET); 

echo $name.'br>';
echo $age.'br>';
echo $phone.'br>';

//GET傳參:?name=xiaohuaage=22phone=112323123

//結(jié)果:
// xiaohua
// 22
// 112323123
?>

2.CTF中extract()導(dǎo)致的變量覆蓋

?php
$flag='flag.php';
extract($_GET); 
if(isset($ceshi))
{
 $content=trim(file_get_contents($flag));
if($ceshi==$content)
{
 echo'flag{xxxxxxx}';
}
else
{
 echo'Oh.no';
}
}
?>

我們大致分析是要求我們GET傳參進(jìn)去值會(huì)經(jīng)過extract()函數(shù)下來會(huì)有兩個(gè)if 第一個(gè)if判斷 ceshi這個(gè)變量是否存在 存在則繼續(xù)執(zhí)行if里面的

使用file_get_contents()讀取flag變量里面的文件傳遞給content變量 之后再進(jìn)行判斷傳進(jìn)來ceshi變量的值等不等于$content如果等于則打印出flag!

這里我們構(gòu)造因?yàn)橥ㄟ^extract()函數(shù)我們傳進(jìn)的值會(huì)變成一個(gè)變量 例如我們GET傳入 ceshi=1 則會(huì)存在$ceshi=1 所以我們構(gòu)造GET傳參pyaload:

GET傳參payload:$ceshi=$flag= 

這樣再程序中會(huì)有兩個(gè)為空的變量而$flag=空 則覆蓋了上面的$flag中的值 這樣進(jìn)行判斷 都是空的所以為真則得到flag

3.漏洞修復(fù)

不要使用。。。。
參考 官方文檔 修改extract_rules 里面的值為EXTR_SKIP eg:

extract($_GET,EXTR_SKIP); 

2.PHP動(dòng)態(tài)變量覆蓋

1.動(dòng)態(tài)變量覆蓋

PHP動(dòng)態(tài)變量是指一個(gè)變量名的變量名可以動(dòng)態(tài)的設(shè)置和使用,一個(gè)變量獲取另一個(gè)變量的值作為這個(gè)變量的變量名。

?php
$bar= "a";
$Foo="Bar";
$World="Foo";
$Hello="world";
$a="Hello";

echo $a; //hello
echo $$a; //world
echo $$$a; //foo
echo $$$$$a; //Bar
echo $$$$$$a; //a
echo $$$$$$$a; //hello
echo $$$$$$$$a; //world

?>

CTF中的動(dòng)態(tài)變量覆蓋

https://www.cnblogs.com/xhds/p/12586928.html CTF中的動(dòng)態(tài)變量覆蓋

3.漏洞修復(fù)

避免使用這個(gè)

3.parse_str()變量覆蓋

1.parse_str()

parse_str() 函數(shù)把查詢字符串解析到變量中。

注釋:如果未設(shè)置 array 參數(shù),由該函數(shù)設(shè)置的變量將覆蓋已存在的同名變量。

注釋:php.ini 文件中的 magic_quotes_gpc 設(shè)置影響該函數(shù)的輸出。如果已啟用,那么在 parse_str() 解析之前,變量會(huì)被 addslashes() 轉(zhuǎn)換。

parse_str(string,array)

參考引用:https://www.runoob.com/php/func-string-parse-str.html

eg:

?php
parse_str("name=xiaohuaage=22");
echo $name."br>";
echo $age;
?>
//xiaohua
//22

2.CTF中parse_str()導(dǎo)致的變量覆蓋

?php
error_reporting(0);
$flag="flag{xiaohua-2020}";
if (empty($_GET['id'])) {
 show_source(__FILE__);
 die();
} else {
 $a = "www.xiaohua.com";
 $id = $_GET['id'];
 @parse_str($id); //
 if ($a[0] != 'QNKCDZO'  md5($a[0]) == md5('QNKCDZO')) {
  echo $flag;
 } else {
  exit("no no");
 }
}
?>

分析代碼 判斷GET傳入的id值是否為空為空的話輸出源碼終止程序,否則的話則接收id值 經(jīng)過parse_str() 然后呢if判斷 $a[0] 的值要不等于QNKCDZO

但$a[0]的md5值要等于QNKCDZO這里可以采用Hash比較缺陷來解決這一步 下來就是傳入變量覆蓋$a[0]的值 因?yàn)橛衟arse_str所以我們可以構(gòu)造payload:

payload:http://127.0.0.1/test.php?id=a[0]=s878926199a 

3.漏洞修復(fù)

為了防止變量覆蓋,盡量使用指定輸出變量方式

4.import_request_variables()變量覆蓋

1.import_request_variables()

(PHP 4 >= 4.1.0, PHP 5 5.4.0)

import_request_variables—將 GET/POST/Cookie 變量導(dǎo)入到全局作用域中

將 GET/POST/Cookie 變量導(dǎo)入到全局作用域中。如果你禁止了register_globals,但又想用到一些全局變量,那么此函數(shù)就很有用。

import_request_variables ( string $types [, string $prefix ] ) : bool

參考引用:https://www.php.net/manual/zh/function.import-request-variables.php

2.CTF中import_request_variables()導(dǎo)致的變量覆蓋

?php
$num=0;
//include 'flag.php';
import_request_variables('gp'); //導(dǎo)入get和post中變量

if($num=="xiaohua"){
 echo 'flag{ xiaohua-2020-3-28}';
 // echo $flag.php;
}else{
 echo "NO!";
}
?> 

//payload:http://127.0.0.1/test.php?num=xiaohua
//flag{ xiaohua-2020-3-28}

3.漏洞修復(fù)

盡量不要使用....

5.PHP全局變量覆蓋

1.register_globals

當(dāng)register_globals全局變量設(shè)置開啟時(shí),傳遞過來的值會(huì)被直接注冊(cè)為全局變量而使用,這會(huì)造成全局變量覆蓋

在PHP5.3之前 默認(rèn)開啟 PHP5.3默認(rèn)關(guān)閉 PHP5.6及5.7已經(jīng)被移除

2.CTF中全局變量覆蓋

測試環(huán)境:php5.2.17

?php
if ($num){
 echo "flag{xiaohua-2020-3-28}";
}
?> 
//payload:http://127.0.0.1/test.php?num=1
//flag{xiaohua-2020-3-28}

3.漏洞修復(fù)

關(guān)閉register_globals=off 或者使用5.6以上版本。。

到此這篇關(guān)于PHP中的變量覆蓋漏洞深入解析的文章就介紹到這了,更多相關(guān)PHP中的變量覆蓋漏洞內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • PHP網(wǎng)站常見安全漏洞,及相應(yīng)防范措施總結(jié)
  • phpcmsv9.0任意文件上傳漏洞解析
  • phpMyAdmin通過密碼漏洞留后門文件
  • PHP5.0 TIDY_PARSE_FILE緩沖區(qū)溢出漏洞的解決方案
  • 由php中字符offset特征造成的繞過漏洞詳解
  • PHP-CGI遠(yuǎn)程代碼執(zhí)行漏洞分析與防范
  • 你不知道的文件上傳漏洞php代碼分析
  • PHP序列化/對(duì)象注入漏洞分析
  • PHP常見漏洞攻擊分析
  • PHP編程中的常見漏洞和代碼實(shí)例
  • 詳解各種PHP函數(shù)漏洞

標(biāo)簽:遼陽 柳州 鷹潭 鶴崗 克拉瑪依 白城 唐山 六安

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP中的變量覆蓋漏洞深入解析》,本文關(guān)鍵詞  PHP,中的,變量,覆蓋,漏洞,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP中的變量覆蓋漏洞深入解析》相關(guān)的同類信息!
  • 本頁收集關(guān)于PHP中的變量覆蓋漏洞深入解析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    辰溪县| 伊宁县| 渝北区| 达拉特旗| 金华市| 灵寿县| 衡水市| 宣城市| 西华县| 利辛县| 莎车县| 龙里县| 柘城县| 台山市| 邵东县| 贺兰县| 河北区| 宝应县| 阿鲁科尔沁旗| 武夷山市| 陇西县| 南安市| 定远县| 清远市| 疏勒县| 安阳县| 凌云县| 静乐县| 北安市| 文昌市| 天祝| 大理市| 墨脱县| 平湖市| 柳林县| 定西市| 隆林| 罗甸县| 淅川县| 孟州市| 扬州市|