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拿來做字串重組。

image

當pattern 參數為 "\e" 時會出現以下錯誤訊息。

 

 

 

Example 4

 

再胡亂輸入一些測試資料後跳出錯誤訊息,發現此次是透過「assert」進行處理。

 

hacker'.phpinfo().'

 

 

arrow
arrow
    文章標籤
    Code injection PentesterLab
    全站熱搜
    創作者介紹
    創作者 Lung-Yu,Tsai 的頭像
    Lung-Yu,Tsai

    Lung-Yu,Tsai 的部落格

    Lung-Yu,Tsai 發表在 痞客邦 留言(0) 人氣()