18禁网站免费,成年人黄色视频网站,熟妇高潮一区二区在线播放,国产精品高潮呻吟AV

學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 電腦安全 > 系統(tǒng)安全 >

PHP多字節(jié)編碼漏洞原理與實(shí)現(xiàn)

時(shí)間: 加城1195 分享

  可能很多人不知道多字節(jié)編碼漏洞的本質(zhì)和做法,我們可以用php實(shí)現(xiàn),這篇文章主要介紹了PHP多字節(jié)編碼漏洞小結(jié),需要的朋友可以參考下!

  漏洞本質(zhì):

  php 使用 php_escape_shell_cmd這個(gè)函數(shù)來轉(zhuǎn)義命令行字符串時(shí)是作為單字節(jié)處理的

  而當(dāng)操作系統(tǒng)設(shè)置了GBK、EUC-KR、SJIS等寬字節(jié)字符集時(shí)候,將這些命令行字符串傳遞給MySQL處理時(shí)是作為多字節(jié)處理的

  先看個(gè)簡單的例子

  復(fù)制代碼代碼如下:

  header('Content-type: text/html; charset=gbk');

  //連接MySQL

  $conn = mysql_connect("localhost", "root", "");

  //選擇數(shù)據(jù)庫

  mysql_select_db("test", $conn);

  //設(shè)置字符集編碼

  mysql_query("SET CHARACTER SET 'gbk'", $conn);

  //創(chuàng)建DEMO表如果不存在

  mysql_query("CREATE TABLE IF NOT EXISTS `demo` (

  `uid` int(10) NOT NULL AUTO_INCREMENT,

  `username` varchar(32) NOT NULL,

  `password` varchar(32) NOT NULL,

  PRIMARY KEY (`uid`)

  ) ENGINE=MyISAM DEFAULT CHARSET=gbk AUTO_INCREMENT=1;", $conn);

  //插入個(gè)測試數(shù)據(jù)

  mysql_query("REPLACE INTO `demo` VALUES('','admin','admin888') ",$conn);

  //獲取用戶輸入

  $username = isset($_REQUEST['username']) ? $_REQUEST['username'] : '';

  //執(zhí)行查詢并且DEBUG

  $sql = "SELECT * FROM demo WHERE username = '{$username}' LIMIT 1";

  echo "sql: ".$sql."

  ";

  $res = mysql_query($sql, $conn);

  $row = mysql_fetch_array($res);

  echo "result:

  ";

  var_dump($row);

  ?>

  當(dāng)GPC=OFF時(shí):

  username未經(jīng)任何過濾,這是個(gè)典型的字符型SQL注入

  測試地址:

  http://localhost/gbk.php?username=' or 1%23

  http://localhost/gbk.php?username=' or 0%23

  當(dāng)然很多情況下GPC=OFF時(shí)候都會使用一些函數(shù)來過濾用戶的輸入

  復(fù)制代碼代碼如下:

  // 對用戶傳入的變量進(jìn)行轉(zhuǎn)義操作

  if (!get_magic_quotes_gpc())

  {

  $username = addslashes($username);

  }

  看上去貌似沒問題了,但是由于多字節(jié)編碼問題,同樣還是可以注入的

  測試地址:http://localhost/gbk.php?username=%df%27

  使用mysql_real_escape_string函數(shù)對用戶輸入進(jìn)行轉(zhuǎn)義存在同樣的問題

  目前的很多開源的系統(tǒng)都是通過設(shè)置客戶端的字符集為二進(jìn)制來防止多字節(jié)編碼問題的。

  //使用上面這句來替換DEMO中的 mysql_query("SET CHARACTER SET 'gbk'", $conn);

  mysql_query("SET character_set_connection=gbk, character_set_results=gbk, character_set_client=binary", $conn);

  再次測試:http://localhost/gbk.php?username=%df%27

  OK,這樣一來,多字節(jié)編碼問題就不存在了嗎?不見得

  當(dāng)使用mb_convert_encoding、iconv對字符集進(jìn)行錯(cuò)誤的轉(zhuǎn)換時(shí)候,漏洞再次的出現(xiàn)了(GPC=ON時(shí)問題同樣存在)

  例如:

  $username = iconv('gbk','utf-8',$username);

  或

  $username = mb_convert_encoding($username,'utf-8','gbk');

  來看下T00ls上看到的ECSHOP 2.6.x/2.7.x GBK版本的漏洞吧

  漏洞文件在api/checkorder.php line 28

  復(fù)制代碼代碼如下:

  $sql = "SELECT COUNT(*) ".

  " FROM " . $ecs->table('admin_user') .

  " WHERE user_name = '" . trim($_REQUEST['username']). "' AND password = '" . md5(trim($_REQUEST['password'])) . "'";

  我們來看下$_REQUEST['username'] 的獲取過程

  復(fù)制代碼代碼如下:

  $_REQUEST['username'] = json_str_iconv($_REQUEST['username']);

  json_str_iconv()這個(gè)函數(shù)在includes/lib_base.php中定義,其功能是將非UTF-8編碼的字符串進(jìn)行轉(zhuǎn)換,然后return ecs_iconv('utf-8', EC_CHARSET, $str);

  ecs_inonv這個(gè)函數(shù)也在 includes/lib_base.php中定義,看下函數(shù)吧:

  function ecs_iconv($source_lang, $target_lang, $source_string = '')

  {

  static $chs = NULL;

  /* 如果字符串為空或者字符串不需要轉(zhuǎn)換,直接返回 */

  if ($source_lang == $target_lang || $source_string == '' || preg_match("/[\x80-\xFF]+/", $source_string) == 0)

  {

  return $source_string;

  }

  if ($chs === NULL)

  { require_once(ROOT_PATH . 'includes/cls_iconv.php');

  $chs = new Chinese(ROOT_PATH);

  }

  return $chs->Convert($source_lang, $target_lang, $source_string);

  }

  先是引入了includes/cls_iconv.php這個(gè)文件,然后實(shí)例化了Chinese這個(gè)類,在調(diào)用類的Convert的方法見line 127

  $string = $this->_convert_iconv_mbstring($this->SourceText, $this->config['target_lang'], $this->config['source_lang']);

  又調(diào)用了另外一個(gè)函數(shù)_conver_iconv_mbstring見line 278

  //這里錯(cuò)誤的吧字符集從gbk轉(zhuǎn)為了utf8,所以漏洞產(chǎn)生了

  $return_string = @mb_convert_encoding($string, $target_lang, $source_lang);

  補(bǔ)充:校園網(wǎng)安全維護(hù)技巧

  校園網(wǎng)絡(luò)分為內(nèi)網(wǎng)和外網(wǎng),就是說他們可以上學(xué)校的內(nèi)網(wǎng)也可以同時(shí)上互聯(lián)網(wǎng),大學(xué)的學(xué)生平時(shí)要玩游戲購物,學(xué)校本身有自己的服務(wù)器需要維護(hù);

  在大環(huán)境下,首先在校園網(wǎng)之間及其互聯(lián)網(wǎng)接入處,需要設(shè)置防火墻設(shè)備,防止外部攻擊,并且要經(jīng)常更新抵御外來攻擊;

  由于要保護(hù)校園網(wǎng)所有用戶的安全,我們要安全加固,除了防火墻還要增加如ips,ids等防病毒入侵檢測設(shè)備對外部數(shù)據(jù)進(jìn)行分析檢測,確保校園網(wǎng)的安全;

  外面做好防護(hù)措施,內(nèi)部同樣要做好防護(hù)措施,因?yàn)橛械膶W(xué)生電腦可能帶回家或者在外面感染,所以內(nèi)部核心交換機(jī)上要設(shè)置vlan隔離,旁掛安全設(shè)備對端口進(jìn)行檢測防護(hù);

  內(nèi)網(wǎng)可能有ddos攻擊或者arp病毒等傳播,所以我們要對服務(wù)器或者電腦安裝殺毒軟件,特別是學(xué)校服務(wù)器系統(tǒng)等,安全正版安全軟件,保護(hù)重要電腦的安全;

  對服務(wù)器本身我們要安全server版系統(tǒng),經(jīng)常修復(fù)漏洞及更新安全軟件,普通電腦一般都是撥號上網(wǎng),如果有異常上層設(shè)備監(jiān)測一般不影響其他電腦。做好安全防范措施,未雨綢繆。

  相關(guān)閱讀:提高服務(wù)器安全性的技巧

  1.經(jīng)常更改系統(tǒng)管理員密碼。---->且密碼最好是大小寫都有

  2.定期更新系統(tǒng)補(bǔ)丁。---->開啟自動(dòng)更新,并設(shè)定到晚上重啟。

  3.檢查系統(tǒng)是否多出超級管理員,檢查是否有帳號被克隆在“開始”>運(yùn)行中輸入“cmd”>在輸入 net localgroup administrators

  4.在“開始”>運(yùn)行中輸入“msconfig”檢查隨機(jī)啟動(dòng)的程序和服務(wù),關(guān)掉不必要的隨機(jī)啟動(dòng)程序和服務(wù)。

  5.服務(wù)器上的所有程序盡量安裝程序的最新穩(wěn)定版。

  6.檢查SERVU是否被創(chuàng)建有執(zhí)行權(quán)限的用戶或者對C盤有讀寫權(quán)限的用戶,并且給SERVU設(shè)置一個(gè)登錄密碼。如果需要請給serv_u設(shè)置獨(dú)立啟動(dòng)賬戶。

  7.不要隨意安裝任何的第三方軟件。例如XX優(yōu)化軟件,XX插件之類的,更不要在服務(wù)器上注冊未知的組件。

  8.不要隨意在服務(wù)器上使用IE訪問任何網(wǎng)站,杜絕隱患那是必須的。

  9. 檢查系統(tǒng)日志的“安全性”條目,在右側(cè)查看近期“審核成功”的登錄

  10.不要在服務(wù)器上雙擊運(yùn)行任何程序,不然怎么中了木馬都不知道。

  11.不要在服務(wù)器上用IE打開用戶的硬盤中的網(wǎng)頁,這是危險(xiǎn)的行為。

  12.不要在服務(wù)器上瀏覽圖片,以前windows就出過GDI 的安全漏洞。

  13.及時(shí)的更新病毒庫,查殺病毒。

  14.定時(shí)的查看系統(tǒng)各個(gè)盤符的磁盤權(quán)限,是否為設(shè)定的安全權(quán)限。

  15.確保你自己的電腦安全,如果自己的電腦不安全,服務(wù)器也可能不太安全。


編碼漏洞相關(guān)文章:

1.網(wǎng)絡(luò)安全技術(shù)的總結(jié)

2.解決防火墻規(guī)則順序和插入規(guī)則到指定序號的問題

3.如何解決qq賬號被盜問題

4.網(wǎng)站個(gè)人滲透技巧與防范有哪些

5.簡單木馬分析與防范

4016560