Kali Linux Web 滲透測試秘籍 第八章 中間人攻擊

第八章 中間人攻擊

作者:Gilberto Najera-Gutierrez

譯者:飛龍

協議:CC BY-NC-SA 4.0

簡介

中間人(MITM)攻擊是一種攻擊類型,其中攻擊者將它自己放到兩方之間,通常是客戶端和服務端通信線路的中間。這可以通過破壞原始頻道之后攔截一方的消息并將它們轉發(有時會有改變)給另一方來實現。

讓我們觀察下面這個例子:

Alice 連接到了 Web 服務器上,Bob打算了解 Alice 正在發送什么信息。于是 Bob 建立 MITM 攻擊,通過告訴服務器他是 Alice,并且告訴 Alice 他是服務器。現在,所有 Alice 的請求都會發給 Bob,Bob 會將它們轉發給服務器,并對服務器的響應做相同操作。這樣,Bob 就能夠攔截、讀取或修改所有 Alice 和服務器之間的流量。

雖然 MITM 攻擊并不特定與 Web 攻擊,了解如何執行它們,以及如何防止它們,對于任何滲透測試者都非常重要,因為它們可以用于偷取密碼,劫持會話,或者執行 Web 應用中的非授權操作。

這一章中,我們會建立起中間人攻擊,并使用它來獲得信息,以及執行更加復雜的攻擊。

8.1 使用 Ettercap 執行欺騙攻擊

地址解析協議(ARP)欺騙可能是最常見的 MITM 攻擊。它基于一個事實,就是 ARP 并不驗證系統所收到的響應。這就意味著,當 Alice 的電腦詢問網絡上的所有設備,“IP 為 xxx.xxx.xxx.xxx 的機器的 MAC 地址是什么”時,它會信任從任何設備得到的答復。該設備可能是預期的服務器,也可能是不是。ARP 欺騙或毒化的工作方式是,發送大量 ARP 響應給通信的兩端,告訴每一端攻擊者的 MAC 地址對應它們另一端的 IP 地址。

這個秘籍中,我們會使用Ettercap 來執行 ARP 欺騙攻擊,并將我們放到客戶端和服務器之間。

準備

對于這個秘籍,我們會使用第一章配置的客戶端虛擬機,和vulnerable_vm。客戶端的 IP 是 192.168.56.101,vulnerable_vm 是 192.168.56.102。

操作步驟

  1. 將兩個虛擬機打開,我們的 Kali Linux(192.168.56.1)主機是攻擊者的機器。打開終端窗口并輸入下列命令:

    ettercap –G 
    

    從 Ettercap 的主菜單中,選擇Sniff | Unified Sniffing

  2. 在彈出的對話框中選擇你打算使用的網絡接口,這里我們選擇vboxnet0,像這樣:

  3. 既然我們嗅探了網絡,下一步就是識別哪個主機正在通信。訪問主菜單的Hosts之后選擇Scan for hosts

  4. 從我們發現的主機中,選擇我們的目標。從Hosts菜單欄中選擇Hosts list

  5. 從列表中選擇192.168.56.101,并點擊Add to Target 1

  6. 之后選擇192.168.56.102,之后點擊Add to Target 2

  7. 現在我們檢查目標:在Targets菜單中,選擇Current targets

  8. 我們現在準備好了開始欺騙攻擊,我們的位置在服務器和客戶端中間,在Mitm菜單中,選擇ARP poisoning

  9. 在彈出的窗口中,選中Sniff remote connections,然后點擊OK

這就結束了,我們現在可以看到在客戶端和服務端之間的流量。

工作原理

在我們鍵入的第一個命令中,我們告訴 Ettercap 啟動 GTK 界面。

其它界面選項為-T啟動文本界面,-C啟動光標(以 ASCII 文本),-D運行為守護進程,沒有界面。

之后,我們啟動了 Ettercap 的嗅探功能。統一模式意味著我們會通過單一網絡接口接受并發送信息。當我們的目標通過不同網絡接口到達時,我們選擇橋接模式。例如,如果我們擁有兩個網卡,并且通過其一連接到客戶端,另一個連接到服務端。

在嗅探開始之后,我們選擇了目標。

事先選擇你的目標

單次攻擊中,選擇唯一必要主機作為目標非常重要,因為毒化攻擊會生成大量網絡流量,并導致所有主機的性能問題。在開始 MITM 攻擊之前,弄清楚那兩個系統會成為目標,并僅僅欺騙這兩個系統。

一旦設置了目標,我們就可以開始 ARP 毒化攻擊。Sniffing remote connections意味著 Ettercap 會捕獲和讀取所有兩端之間的封包,Only poison one way在我們僅僅打算毒化客戶端,而并不打算了解來自服務器或網關的請求時(或者它擁有任何對 ARP 毒化的保護時)非常實用。

8.2 使用 Wireshark 執行 MITM 以及捕獲流量

Ettercap 可以檢測到經過它傳播的相關信息,例如密碼。但是,在滲透測試的時候,它通常不足以攔截一些整數,我們可能要尋找其他信息,類似信用卡的號碼,社會安全號碼,名稱,圖片或者文檔。擁有一個可以監聽網絡上所有流量的工具十分實用,以便我們保存和之后分析它們。這個工具是個嗅探器,最符合我們的目的的工具就是 Wireshark,它包含于 Kali Linux。

這個秘籍中,我們會使用 Wireshark 來捕獲所有在客戶端和服務端之間發送的封包來獲取信息。

準備

在開始之前我們需要讓 MITM 工作。

操作步驟

  1. 從 Kali Applications菜單的Sniffing & Spoofing啟動 Wireshark,或者從終端中執行:

    wireshark 
    
  2. 當 Wireshark 加載之后,選項你打算用于捕獲封包的網卡。我們這里選擇vboxnet0,像這樣:

  3. 之后點擊Start。你會立即看到 Wireshark 正在捕獲 ARP 封包,這就是我們的攻擊。

![](http://upload-images.jianshu.io/upload_images/118142-bb0922f1fc8ecbf0.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  1. 現在,來到客戶端虛擬機,瀏覽http://192.168.56.102/ dvwa,并登陸 DVWA。

  2. 在 Wireshark 中的info區域中,查找來自192.168.56.101192.168.56.102,帶有 POST /dvwa/login.php 的 HTTP 封包。

    如果我們瀏覽所有捕獲的封包,我們會看到一個封包對應授權,并會看到我們可以以純文本獲得用戶名和密碼。

    使用過濾器

    我們可以在 Wireshark 中使用過濾器來只展示我們感興趣的封包。例如,為了只查看 登錄頁面的 HTTP 請求,我們可以使用:http. request.uri contains "login"

    如果我們查看 Ettercap 的窗口,我們也能看到用戶名和密碼,像這樣:

    通過捕獲客戶端和服務端之間的流量,攻擊者能夠提取和利用所有類型的敏感信息,例如用戶名、密碼、會話 Cookie、賬戶號碼、信用卡號碼、私人郵件,以及其它。

工作原理

Wireshark 監聽每個我們選擇監聽的接口上的封包,并在它的界面中顯示。我們可以選擇監聽多個接口。

當我們首先啟動嗅探的時候,我們了解了 ARP 欺騙如何工作。它發送大量 ARP 封包給客戶端和服務端,以便防止它們的地址解析表(ARP 表)從正當的主機獲得正確的值。

最后,當我們向服務器發送請求時,我們看到了 Wireshark 如何捕獲所有包含在請求中的信息,包含協議、來源和目的地 IP。更重要的是,它包含了由客戶端發送的數據,其中包含管理員密碼。

另見

研究 Wireshark 數據有一些無聊,所以了解如何在捕獲封包時使用顯示過濾器非常重要。你可以訪問下列站點來了解更多信息。

使用 Wireshark,你可以通過捕獲過濾器來選擇捕獲哪種數據。這是非常實用的特性,尤其是執行 MITM攻擊時生成大量流量的時候。你可以從下列站點中閱讀更多信息。

8.3 修改服務端和客戶端之間的數據

在執行 MITM 攻擊時,我們不僅僅能夠監聽在受害者系統之間發送的任何數據,也能夠修改請求和響應,因而按照我們的意圖調整它們的行為。

這個秘籍中,我們會使用 Ettercap 過濾器來檢測封包是否包含我們感興趣的信息,并觸發改變后的操作。

準備

在開始之前我們需要讓 MITM 工作。

操作步驟

  1. 我們的第一步是創建過濾器文件。將下列代碼保存到文本文件中(我們命名為regex-replace-filter.filter):

    # If the packet goes to vulnerable_vm on TCP port 80 (HTTP) 
    if (ip.dst == '192.168.56.102'&& tcp.dst == 80) {
        # if the packet's data contains a login page    
        if (search(DATA.data, "POST")){        
            msg("POST request");        
            if (search(DATA.data, "login.php") ){
                msg("Call to login page");            
                # Will change content's length to prevent server from failing            
                pcre_regex(DATA.data, "Content-Length\:\ [0-9]*","Content-Length: 41");            
                msg("Content Length modified");            
                # will replace any username by "admin" using a regular expression            
                if (pcre_regex(DATA.data, "username=[a-zAZ]*&","username=admin&"))    {
                    msg("DATA modified\n");              
                }            
                msg("Filter Ran.\n");        
            }    
        } 
    }
    

    # 符號使注釋。這個語法非常類似于 C,除了注釋和一些不同。

  2. 下面我們需要為 Ettercap 編譯過濾器來使用它。從終端中,執行下列命令。

    etterfilter -o regex-replace-filter.ef regex-replace-filter.filter
    
  3. 現在,從 Ettercap 的菜單中,選擇Filters | Load a filter,后面是regexreplace-filter.ef,并點擊Open

    我們會看到 Ettercap 的日志窗口中出現新的條目,表明新的過濾器已經加載了。

    ![](http://git.oschina.net/wizardforcel/kali-linux-web-pentest-cookbook-zh/raw/master/img/8-3-2.jpg

  4. 在客戶端中,瀏覽http://192.168.56.102/dvwa/并使用密碼admin登陸任意用戶,例如:inexistentuser: admin

    用戶現在登陸為管理員,并且攻擊者擁有了對兩個用戶都生效的密碼。)

  5. 如果我們檢查 Ettercap 的日志,我們可以看到我們編寫在代碼中的消息會出現在這里,像這樣:

工作原理

ARP 欺騙攻擊是更加復雜的攻擊的開始。這個秘籍中,我們使用了 Ettercap 的封包過濾功能來識別帶有特定內容的封包,并修改它來強制讓用戶以管理員登錄應用。這也可以從服務端到客戶端來完成,可以用來通過展示一些偽造信息來欺騙用戶。

我們的第一步是創建過濾腳本,它首先檢查被分析的封包是否含有我們打算改變的信息,像這樣:

if (ip.dst == '192.168.56.102'&& tcp.dst == 80) { 

如果目標 IP 是 vulnerable_vm之一,且 TCP 端口是 80(默認 HTTP 端口號),它就是發往我們打算攔截的服務器的請求。

if (search(DATA.data, "POST")){    
    msg("POST request");    
    if (search(DATA.data, "login.php") ){

如果請求使用 POST 方法,且去往login.php頁面,它就是登錄嘗試,因為這是我們的目標應用接收登錄嘗試的方式。

pcre_regex(DATA.data, "Content-Length\:\ [0-9]*","Content-Length: 41");

我們使用正則表達式來獲取請求中的Content-Length參數,并將它的值改為 41,這是我們發送帶有admin/admin憑證的登錄封包的長度。

if (pcre_regex(DATA.data, "username=[a-zA-Z]*&","username=admin&")){    
    msg("DATA modified\n");  
} 

同樣,使用正則表達式,我們在請求中查找用戶名稱值,并將它替換為admin

消息(msg)僅僅用于跟蹤和調試目的,可以被從腳本中忽略。

在編寫完腳本之后,我們使用 Ettercap 的 etterfilter 編譯他,以便執行它。之后,我們在 Ettercap 中加載它,然后等待客戶端連接。

8.4 發起 SSL MITM 攻擊

如果我們使用我們目前的方法嗅探 HTTPS 會話,我們不能從中得到很多信息,因為所有通信都是加密的。

為了攔截、讀取和修改 SSL 和 TLS 的連接,我們需要做一系列準備步驟,來建立我們的 SSL 代理。SSLsplit 的仿作方式是使用兩個證書,一個用于告訴服務器這是客戶端,以便它可以接收和解密服務器的響應,另一個告訴客戶端這是服務器。對于第二個證書,如果我們打算代替一個擁有自己的域名的網站,并且它的證書由認證中心(CA)簽發,我們就需要讓 CA 為我們簽發根證書,但因為我們是攻擊者,我們就需要自己來做。

這個秘籍中,我們會配置我們自己的 CA,以及一些 IP 轉發規則來執行 SSL 中間人攻擊。

操作步驟

  1. 首先,我們打算在 Kali 上創建 CA 私鑰,所以在 root 終端中鍵入下列命令:

    openssl genrsa -out certaauth.key 4096 
    
  2. 現在讓我們創建一個使用這個密鑰簽名的證書:

    openssl req -new -x509 -days 365 -key certauth.key -out ca.crt 
    
  3. 填充所需信息(或者僅僅對每個字段按下回車)。

  4. 下面,我們需要開啟 IP 轉發來開啟系統的路由功能(將目標不是本地主機的 IP 包轉發到網關):

    echo 1 > /proc/sys/net/ipv4/ip_forwar
    
  5. 現在我們打算配置一些會澤來防止轉發任何東西。首先,讓我們檢查我們的 iptables 的nat表中是否有任何東西:

    iptables -t nat -L
    
  6. 如果有東西,你可能打算備份一下,因為我們會刷新它們,如下:

    iptables -t nat -L > iptables.nat.bkp.txt 
    
  7. 現在讓我們刷新整個表。

    iptables -t nat -F
    
  8. 之后我們建立 PREROUTING 規則:

    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --toports 8080 
    iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --toports 8443 
    

現在我們已經準備好嗅探加密連接。

工作原理

這個秘籍中,我們配置了 Kali 主機來充當 CA,這意味著它可以校驗 SSLsplit 使用的證書。在前兩步中,我們僅僅創建了私鑰,和使用私鑰簽名的證書。

下面,我們建立了端口轉發規則。我們首先開啟了轉發選項,之后創建了 iptables 規則來將 80 端口的請求轉發到 443(HTTP 到 HTTPS)。這是為了重定向請求。我們的 MITM 攻擊會攔截 SSLsplit,便于它使用一個證書來解密收到的消息、處理它,使用另一個證書加密并發送到目的地。

另見

你應該了解更多加密證書以及 SSL 和 TLS 協議,還有 SSLsplit,可以訪問這里:

8.5 使用 SSLsplit 獲得 SSL 數據

在之前的密集中,我們準備了環境來攻擊 SSL/TLS 連接。而這個秘籍中,我們會使用 SSLsplit 來完成 MITM 攻擊并從加密連接中提取信息。

準備

我們需要在開始秘籍之前執行 ARP 欺騙攻擊,并成功完成了上一個秘籍。

操作步驟

  1. 首先,我們需要創建目錄,其中 SSLsplit 在里面存放日志。打開終端并創建兩個目錄,像這樣:

    mkdir /tmp/sslsplit 
    mkdir /tmp/sslsplit/logdir
    
  2. 現在,讓我們啟動 SSLSplit:

    sslsplit -D -l connections.log -j /tmp/sslsplit -S logdir -k certauth.key -c ca.crt ssl 0.0.0.0 8443 tcp 0.0.0.0 8080
    
  3. 現在,SSLSplit 正在運行,Windows 客戶端和 vulnerable_vm 之間存在 MITM,來到客戶端并訪問https://192.168.56.102/dvwa/

  4. 瀏覽器會要求確認,因為我們的 CA 和證書并不是被任何瀏覽器官方承認的。設置例外并繼續。

  5. 現在登錄 DVWA ,使用管理員用戶和密碼。

  6. 讓我們看看 SSLSplit 中發生了什么。打開新的終端并檢查日志內容,在我們為 SSLSplit 創建的目錄中:

    ls /tmp/sslsplit/logdir/ 
    cat /tmp/sslsplit/logdir/*
    

現在,即使 Ettercap 和 Wireshark 只能看到加密數據,我么也可以以純文本在 SSLSplit 中查看通信。

工作原理

這個秘籍中,我們繼續 SSL 連接上的攻擊。在第一步中,我們創建了目錄,其中 SSLSplit 會將捕獲到的信息存在里面。

第二部就是使用下列命令執行 SSLSplit:

  • -D:這是在前臺運行 SSLSplit,并不是守護進程,并帶有詳細的輸出。

  • -l connections.log:這將每個連接的記錄保存到當前目錄的connections.log中。

  • -j /tmp/sslsplit:這用于建立jail directory目錄,/tmp/sslsplit會作為 root(chroot)包含 SSLSplit 的環境。

  • -S logdir:這用于告訴 SSLSplit 將內容日志(所有請求和響應)保存到logdir(在jail目錄中),并將數據保存到單獨的文件中。

  • -k-c:這用于指明和充當 CA 時,SSLSplit 所使用的私鑰和證書。

  • ssl 0.0.0.0 8443:這告訴 SSLSplit 在哪里監聽 HTTPS(或者其它加密協議)連接。要記住這是我們在上一章中使用 iptables 從 443 轉發的接口。

  • tcp 0.0.0.0 8080:這告訴 SSLSplit 在哪里監聽 HTTP 連接。要記住這是我們在上一章中使用 iptables 從 80 轉發的接口。

在執行這些命令之后,我們等待客戶端瀏覽器服務器的 HTTPS 頁面并提交數據,之后我們檢查日志文件來發現未加密的信息。

8.6 執行 DNS 欺騙并重定向流量

DNS 欺騙是一種攻擊,其中執行 MITM 攻擊的攻擊者使用它來修改響應受害者的 DNS 服務器中的名稱解析,發送給他們惡意頁面,而不是他們請求的頁面,但仍然使用有效名稱。

這個秘籍中,我們會使用 Ettercap 來執行 DNS 欺騙攻擊,并在受害者打算瀏覽別的網站時,使其瀏覽我們的網站。

準備

對于這個秘籍,我們需要使用我們的 WIndows 客戶端虛擬機,但是這次網絡識別器橋接到 DNS 解析中。這個秘籍中它的 IP 地址為 192.168.71.14。

攻擊者的機器是我們的 Kali 主機,IP 為 192.168.71.8。它也需要運行 Apache 服務器,并擁有index.html演示頁面,我們會包含下列東西:

<h1>Spoofed SITE</h1>

操作步驟

  1. 假設我們已經啟動了 Apache 服務器,并正確配置了偽造頁面,讓我們編輯/etc/ettercap/etter.dns,使它僅僅包含下面這一行:

    * A 192.168.71.8 
    

    我們僅僅設置一條規則:所有 A 記錄(地址記錄)都解析到192.168.71.8,這是我們 Kali 的地址。我們可以設置其他條目,但是我們打算在這里避免干擾。

  2. 這次,我們從命令行運行 Ettercap。打開 root 終端并鍵入下列命令:

    ettercap -i wlan0 -T -P dns_spoof -M arp /192.168.71.14///
    

    它會以文本模式運行 Ettercap,并開啟 DNS 欺騙插件來執行 ARP 欺騙攻擊,目標僅僅設置為192.168.71.14

  3. 啟動攻擊之后,我們來到客戶端主機,并嘗試通過網站自己的域名來瀏覽網站,例如,www.yahoo.com,像這樣:

    要注意,現在地址和標簽欄顯示原始站點的名稱,但是內容來自不同的地方。

  4. 我們也可以嘗試使用nslookup執行地址解析,像這樣:

工作原理

這個秘籍中,我們看到如何使用中間人攻擊來強制用戶瀏覽某個頁面,他們甚至相信自己在其它站點上。

在第一步中,我們修改了 Ettercap 的名稱解析文件,讓它將所有請求的名稱重定向到我們的 Kali 主機。

之后,我們以下列參數運行 Ettercap:-i wlan0 -T -P dns_spoof -M arp /192.168.71.14///

  • -i wlan0:要技術我們需要客戶端進行 DNS 解析,所以我們需要讓它連接到橋接的適配器,并到達我們的 Kali 主機,所以我們將嗅探接口設為wlan0(攻擊者計算機上的無線網卡)。

  • -T:使用純文本界面。

  • -P dns_spoof:啟動 DNS 欺騙插件。

  • -M arp:執行 ARP 欺騙攻擊。

  • /192.168.71.14///:這是我們在命令行中對 Ettercap 設置目標的方式:MAC/ip_address/port。其中//表示任何對應 IP 192.168.71.14(客戶端)任何端口的 MAC 地址。

最后,我們確認了攻擊能夠正常工作。

另見

也有另一個非常實用的用于這些類型攻擊的工具,叫做 dnsspoof。你應該下載下來并加入工具庫:

man dnsspoof

http://www.monkey.org/~dugsong/dsniff/

另一個值得提及的工具是中間人攻擊框架:MITMf。它包含內建的 ARP 毒化、DNS 欺騙、WPAD 代理服務器,以及其它攻擊類型的功能。

mitmf --help
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容