日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【网络安全】代码审计-zzcms2021前台写shell?

發布時間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【网络安全】代码审计-zzcms2021前台写shell? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本次是對zzcms2021前臺一個可能的寫配置文件的點進行分析(已交cnvd,不知道收不收呀),為什么說是可能,各位師傅往下看就好啦

【學習資料】

從官網下載最新源碼后,本地搭建環境進行分析

主要利用在/3/ucenter_api/api/uc.php中

在/3/ucenter_api/api/uc.php中,通過get傳參code,再將_authcode解密后的code利用parse_str解析并賦值給$get


跟進到_authcode函數:

function _authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {$ckey_length = 4;$key = md5($key ? $key : UC_KEY);$keya = md5(substr($key, 0, 16));$keyb = md5(substr($key, 16, 16));$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';$cryptkey = $keya.md5($keya.$keyc);$key_length = strlen($cryptkey);$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;$string_length = strlen($string);$result = '';$box = range(0, 255);$rndkey = array();for($i = 0; $i <= 255; $i++) {$rndkey[$i] = ord($cryptkey[$i % $key_length]);}for($j = $i = 0; $i < 256; $i++) {$j = ($j + $box[$i] + $rndkey[$i]) % 256;$tmp = $box[$i];$box[$i] = $box[$j];$box[$j] = $tmp;}for($a = $j = $i = 0; $i < $string_length; $i++) {$a = ($a + 1) % 256;$j = ($j + $box[$a]) % 256;$tmp = $box[$a];$box[$a] = $box[$j];$box[$j] = $tmp;$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));}if($operation == 'DECODE') {if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {return substr($result, 26);} else {return '';}} else {return $keyc.str_replace('=', '', base64_encode($result));}}

對傳參進行加密,可以看到若$key為空的話,則為UC_KEY
搜索UC_KEY

這樣就可以進行加密傳參
但是這里需要通過一個判斷,在傳參中加入time()就可以通過

接著通過 post=xmlunserialize(filegetcontents(′php://input′));獲取post,因為這里沒有過濾,所以就發生了寫入
然后進入if判斷

如果傳入的action操作在數組里,則實例化uc_note()類并調用action操作。因為post沒有被過濾,所以選擇一個接受post的方法
在updateapps中

傳入UCAPI=post[‘UC_API’],通過正則匹配

$configfile = preg_replace("/define\('UC_API',\s*'.*?'\);/i", "define('UC_API', '$UC_API');", $configfile);

將config.inc.php中define(‘UC_API’, ‘http://demo.zzcms.net’) ;進行替換

可以看出,這樣便可以構造$UC_API=’);phpinfo();//進行閉合
但是這里有個尷尬的地方就是,源碼里的正則寫錯了,/define(‘UC_API’,\s’.?’);/i中;的前面少了個空格,導致匹配不到config.inc.php里面的define(‘UC_API’, ‘http://demo.zzcms.net’) ;
不過按照源碼想實現的功能應該是可以寫入的
在正則的地方添加空格后走一遍的流程
首先構造code傳參

接著將poc添加并post

可以看到已經將phpinfo寫入


關注我,持續更新!!!
私我獲取【網絡安全學習資料·攻略

總結

以上是生活随笔為你收集整理的【网络安全】代码审计-zzcms2021前台写shell?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。