任意代碼命令執行漏洞

代碼執行:

  • 原理:
  • 當應用在調用一些能將字符串轉化成代碼的函數時,沒有考慮用戶是否能夠控制這個字符串,將造成代碼注入漏洞。
  • 在php中:
  • eval
  • assert
  • preg_replace(‘/*/e', '$ret = "\\1";',$data);
  • 在asp中:
  • eval
  • exevute
  • executeglobal
  • 在jsp中:
  • jsp中沒有php中的eval函數,但是可以使用反射機制,使用基於反射機制的表達式引擎,如0GNL,SpEL,MVEL等。

代碼執行漏洞:

  • 1、由於thinkphp存在代碼執行漏洞,我們可以使用谷歌語法來搜索這類網站。
  • 2、學習代碼審計,自己找一些代碼執行漏洞。

簡單的代碼執行:

  • <?php
  •     $data = $_GET[‘data’];
  •     eval("\$ret = strtolower(\"$data\");");
  •     echo $ret;
  • ?>

利用方式:

  • http://localhost/?data=${phpinfo();}

代碼執行的防禦方法:

  • 1、使用json保存數組,當讀取時就不需要使用eval了。
  • 2、對於必須使用eval的地方,一定嚴格處理用戶數據(白名單、黑名單)。
  • 3、字符串使用單引號包括可控代碼,插入前使用addslashes轉義(addslashes、魔數引號、htmlspecialchars、 htmlentities、mysql_real_escape_string)。
  • 4、放棄使用preg_replace的e修飾符,使用preg_replace_callback()替換(preg_replace_callback())。
  • 5、若必須使用preg_replace的e修飾符,則必用單引號包裹正則匹配出的對象(preg_replace+正則)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章