Example 1
從網址來看系統是直接存取名為hacker.png的圖片檔案,一般而言Example 1 都是未進行驗證。
在PHP網頁中字串通常會用單引號亦或是雙引號包覆,輸入「'"'」倘若有進行字串串接時有機會破壞其串接結構。由下圖可發現Server端使用eval() 函數。
※"eval"的參數將會視同PHP處理,所以可以額外添加指令
. system('uname -a');
Example 2
由錯誤訊息 「 usort() expects parameter 2 to be a valid callback, no array or string given in /var/www/codeexec/example2.php on line 22 」可以得知,伺服器端是透過PHP 的usort() 函數進行資料排序,而非SQL語法的 order by。然而在PHP開發中經常會透過"create_function" 動態產生排序方法。
create_function 函數的 Source Code 如下 :
ZEND_FUNCTION(create_function)
{
[...]
eval_code = (char *) emalloc(eval_code_length);
sprintf(eval_code, "function " LAMBDA_TEMP_FUNCNAME "(%s){%s}", Z_STRVAL_PP(z_function_args), Z_STRVAL_PP(z_function_code));
eval_name = zend_make_compiled_string_description("runtime-created function" TSRMLS_CC);
retval = zend_eval_string(eval_code, NULL, eval_name TSRMLS_CC);
[...]
由原始碼中可發現,輸入的參數會放置到{ }(大括號)之中,因此可以透過此一特性,來完成 "Code injection"。
?order=id);}system('uname%20-a');//
Example 3
.
在不知道這題目地的情況下,偷看原始碼一探究竟。發現其主要是將new 、pattern、 base拿來做字串重組。
當pattern 參數為 "\e" 時會出現以下錯誤訊息。
Example 4
再胡亂輸入一些測試資料後跳出錯誤訊息,發現此次是透過「assert」進行處理。
hacker'.phpinfo().'
文章標籤
全站熱搜
留言列表