精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Linux內(nèi)核(x86)入口代碼模糊測(cè)試指南Part 2 (上篇)

開(kāi)發(fā)
在本文中,我們將為讀者更進(jìn)一步介紹標(biāo)志寄存器、堆棧指針、段寄存器、調(diào)試寄存器以及進(jìn)入內(nèi)核的不同方法。

在本系列的第一篇文章中,我們介紹了Linux內(nèi)核入口代碼的作用,以及如何進(jìn)行JIT匯編和調(diào)用系統(tǒng)調(diào)用。在本文中,我們將為讀者更進(jìn)一步介紹標(biāo)志寄存器、堆棧指針、段寄存器、調(diào)試寄存器以及進(jìn)入內(nèi)核的不同方法。

    

更多標(biāo)志(%rflags)

方向標(biāo)志只是我們眾多感興趣的標(biāo)志之一。維基百科上關(guān)于%rflags的文章列出了我們感興趣的其他一些標(biāo)志:

· bit 8:陷阱標(biāo)志(用于單步調(diào)試)

· bit 18:對(duì)齊檢查

大多數(shù)與算術(shù)相關(guān)的標(biāo)志(進(jìn)位標(biāo)志等)并不是我們感興趣的對(duì)象,因?yàn)樗鼈冊(cè)谄胀ùa的正常運(yùn)行過(guò)程中變化較大,這意味著內(nèi)核對(duì)這些標(biāo)志的處理很可能已經(jīng)過(guò)了充分的測(cè)試。而另外一些標(biāo)志(如中斷啟用標(biāo)志)可能無(wú)法被用戶空間修改,所以即使嘗試也沒(méi)什么用。

我們需要重點(diǎn)關(guān)注陷阱標(biāo)志,因?yàn)樵O(shè)置該標(biāo)志后,CPU在每條指令后都會(huì)傳遞一個(gè)調(diào)試異常,自然也會(huì)干擾輸入代碼的正常運(yùn)行。

對(duì)齊檢查標(biāo)志也應(yīng)當(dāng)重點(diǎn)關(guān)注,因?yàn)楫?dāng)一個(gè)錯(cuò)誤對(duì)齊的指針被解除引用時(shí),它會(huì)使CPU傳遞一個(gè)對(duì)齊檢查異常。雖然CPU在0環(huán)中執(zhí)行時(shí)不應(yīng)該執(zhí)行對(duì)齊檢查,但是檢查是否存在因?yàn)閷?duì)齊檢查異常而進(jìn)入內(nèi)核的相關(guān)漏洞還是很有意思的(我們稍后再談)。

維基百科的文章給出了修改這些標(biāo)志的程序,但我們可以做得更好一點(diǎn)。

  1. 0:   9c                              pushfq 
  2. 1:   48 81 34 24 00 01 00 00         xorq   $0x100,(%rsp) 
  3. 9:   48 81 34 24 00 04 00 00         xorq   $0x400,(%rsp) 
  4. 11:   48 81 34 24 00 00 04 00         xorq   $0x40000,(%rsp) 
  5. 19:   9d                              popfq 

這段代碼將%rflags的內(nèi)容壓入堆棧上,然后直接修改堆棧上的標(biāo)志值,再將該值彈出到%rflags中。實(shí)際上,我們?cè)谶@里可以選擇使用orq或者xorq指令;我選擇xorq,因?yàn)樗梢郧袚Q寄存器中的任何值。這樣一來(lái),如果我們連續(xù)進(jìn)行多次系統(tǒng)調(diào)用(或內(nèi)核入口),我們可以隨機(jī)切換標(biāo)志,而不必關(guān)心現(xiàn)有的值是什么。

既然我們無(wú)論如何都要修改%rflags寄存器,那么我們不妨把方向標(biāo)志的修改納入進(jìn)去,把三個(gè)標(biāo)志的修改合并到一條指令中。雖然這是一個(gè)很小的優(yōu)化,但沒(méi)有理由不這么做,最后的結(jié)果如下所示:

  1. // pushfq 
  2. *out++ = 0x9c; 
  3.   
  4. uint32_t mask = 0; 
  5.   
  6. // trap flag 
  7. mask |= std::uniform_int_distribution 
  8.   
  9. // direction flag 
  10. mask |= std::uniform_int_distribution 
  11.   
  12. // alignment check 
  13. mask |= std::uniform_int_distribution 
  14.   
  15. // xorq $mask, 0(%rsp) 
  16. *out++ = 0x48; 
  17. *out++ = 0x81; 
  18. *out++ = 0x34; 
  19. *out++ = 0x24; 
  20. *out++ = mask; 
  21. *out++ = mask >> 8; 
  22. *out++ = mask >> 16; 
  23. *out++ = mask >> 24; 
  24.   
  25. // popfq 
  26. *out++ = 0x9d; 

如果我們不希望進(jìn)程在設(shè)置陷阱標(biāo)志時(shí)立即被SIGTRAP殺死,我們需要注冊(cè)一個(gè)信號(hào)處理程序來(lái)有效地忽略這個(gè)信號(hào)(顯然使用SIG_IGN是不夠的):

  1. static void handle_child_sigtrap(int signum, siginfo_t *siginfo, void *ucontext) 
  2. {   
  3.     // this gets called when TF is set in %rflags; do nothing 
  4. }   
  5.      
  6. ... 
  7.      
  8. struct sigaction sigtrap_act = {}; 
  9. sigtrap_act.sa_sigaction = &handle_child_sigtrap; 
  10. sigtrap_act.sa_flags = SA_SIGINFO | SA_ONSTACK; 
  11. if (sigaction(SIGTRAP, &sigtrap_act, NULL) == -1) 
  12.     error(EXIT_FAILURE, errno, "sigaction(SIGTRAP)"); 

關(guān)于上面的SA_ONSTACK標(biāo)志,我們將在下一節(jié)討論。

堆棧指針(%rsp)

在修改%rflags之后,我們其實(shí)就不需使用堆棧了,這意味著我們可以在不影響程序執(zhí)行的情況下,自由地更改棧指針。不過(guò)我們?yōu)槭裁匆薷臈V羔樐???jī)?nèi)核又不會(huì)用我們的用戶空間棧來(lái)做任何事情,對(duì)吧?事實(shí)上,它可能會(huì)。

像ftrace和perf這樣的調(diào)試工具偶爾會(huì)在系統(tǒng)調(diào)用跟蹤期間取消對(duì)用戶空間堆棧的引用。事實(shí)上,我在這方面至少發(fā)現(xiàn)了兩個(gè)不同的漏洞:

· report 1 (July 16, 2019),

· report 2 (May 10, 2020).

當(dāng)向用戶空間傳遞信號(hào)時(shí),信號(hào)處理程序的堆棧幀由內(nèi)核創(chuàng)建,通常位于被中斷線程的當(dāng)前堆棧指針的上方。

如果由于某些錯(cuò)誤,%rsp會(huì)被內(nèi)核直接訪問(wèn),那么在正常操作期間可能不會(huì)被注意到,因?yàn)槎褩V羔樛ǔ?偸侵赶蛞粋€(gè)有效地址。要捕捉這種漏洞,我們可以簡(jiǎn)單地將其指向一個(gè)非映射地址(甚至是內(nèi)核地址!)。

為了幫助我們測(cè)試堆棧指針的各種可能感興趣的值,我們可以定義一個(gè)helper:

  1. static void *page_not_present; 
  2. static void *page_not_writable; 
  3. static void *page_not_executable; 
  4.      
  5. static uint64_t get_random_address() 
  6. {       
  7.     // very occasionally hand out a non-canonical address 
  8.     if (std::uniform_int_distribution 
  9.         return 1UL << 63; 
  10.      
  11.     uint64_t value = 0; 
  12.   
  13.     switch (std::uniform_int_distribution 
  14.     case 0: 
  15.         break; 
  16.     case 1: 
  17.         value = (uint64_t) page_not_present; 
  18.         break; 
  19.     case 2: 
  20.         value = (uint64_t) page_not_writable; 
  21.         break; 
  22.     case 3: 
  23.         value = (uint64_t) page_not_executable; 
  24.         break; 
  25.     case 4: 
  26.         static const uint64_t kernel_pointers[] = { 
  27.             0xffffffff81000000UL, 
  28.             0xffffffff82016000UL, 
  29.             0xffffffffc0002000UL, 
  30.             0xffffffffc2000000UL, 
  31.         }; 
  32.   
  33.         value = kernel_pointers[std::uniform_int_distribution 
  34.   
  35.         // random ~2MiB offset 
  36.         value += PAGE_SIZE * std::uniform_int_distribution 
  37.         break; 
  38.     } 
  39.   
  40.     // occasionally intentionally misalign it 
  41.     if (std::uniform_int_distribution 
  42.         value += std::uniform_int_distribution 
  43.   
  44.     return value; 
  45.   
  46. int main(...) 
  47.     page_not_present = mmap(NULL, PAGE_SIZE, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_32BIT, -1, 0); 
  48.     page_not_writable = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS | MAP_32BIT, -1, 0); 
  49.     page_not_executable = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_32BIT, -1, 0); 
  50.     ... 

在這里,我使用了自己機(jī)器上的/proc/kallsyms中找到的一些內(nèi)核指針。它們不一定是很好的選擇,只是用于演示。正如我前面所提到的,我們需要找到一個(gè)平衡點(diǎn),既要選擇那些瘋狂到?jīng)]有人想過(guò)要處理它們的值(我們畢竟在這里試圖尋找的是邊緣案例),又要不迷失在巨大的非目標(biāo)值的海洋中;我們可以統(tǒng)一選擇隨機(jī)的64位值,但這很難帶來(lái)任何有效的指針(其中大部分可能是非規(guī)范的地址)。模糊測(cè)試的部分藝術(shù)是通過(guò)對(duì)哪些有可能和哪些不可能的關(guān)系進(jìn)行有根據(jù)的猜測(cè)來(lái)抽出相關(guān)的邊緣案例。

現(xiàn)在只是設(shè)置值的問(wèn)題,幸運(yùn)的是,我們可以直接將64位的值加載到%rsp中:

  1. movq $0x12345678aabbccdd, %rsp 

可以使用下列代碼:

  1. uint64_t rsp = get_random_address(); 
  2.   
  3. // movq $imm, %rsp 
  4. *out++ = 0x48; 
  5. *out++ = 0xbc; 
  6. for (int i = 0; i < 8; ++i) 
  7.     *out++ = rsp >> (8 * i); 

但是,對(duì)于上面提到的%rflags來(lái)說(shuō),有一點(diǎn)需要引起我們的高度注意:一旦我們?cè)?rflags中啟用了單步標(biāo)志,CPU就會(huì)在隨后執(zhí)行的每條指令中傳遞一個(gè)調(diào)試異常。內(nèi)核將通過(guò)向進(jìn)程傳遞一個(gè)SIGTRAP信號(hào)來(lái)處理調(diào)試異常。默認(rèn)情況下,這個(gè)信號(hào)是通過(guò)堆棧傳遞的,而堆棧上的值就是%rsp的值……如果%rsp無(wú)效,內(nèi)核會(huì)用一個(gè)不可觸發(fā)的SIGSEGV來(lái)殺死進(jìn)程。

為了處理這樣的情況,內(nèi)核提供了一個(gè)函數(shù),以便在傳遞信號(hào)時(shí)將%rsp設(shè)置為一個(gè)已知的有效值:sigaltstack()。我們要做的就是像下面這樣來(lái)調(diào)用它:

  1. stack_t ss = {}; 
  2.   
  3. ss.ss_sp = malloc(SIGSTKSZ); 
  4. if (!ss.ss_sp) 
  5.     error(EXIT_FAILURE, errno, "malloc()"); 
  6.   
  7. ss.ss_size = SIGSTKSZ; 
  8. ss.ss_flags = 0; 
  9. if (sigaltstack(&ss, NULL) == -1) 
  10.     error(EXIT_FAILURE, errno, "sigaltstack()"); 

然后,將SA_ONSTACK傳遞給處理SIGTRAP的sigaction()調(diào)用的sa_flags變量中。

段寄存器

說(shuō)到段寄存器,你會(huì)經(jīng)??吹竭@樣的說(shuō)法:其實(shí)在64位上已經(jīng)不太有用了。然而,這并不是全部的事實(shí)。的確,你不能改變基地址或段大小,但幾乎所有其他的東西都還是相關(guān)的。特別是一些與我們相關(guān)的東西,例如:

· %cs、%ds、%es和%ss必須含有有效的16位段選擇器,指向GDT(全局描述符表)或LDT(局部描述符表)中的有效條目。

· %cs不能使用mov指令加載,但我們可以使用ljmp(遠(yuǎn)/長(zhǎng)跳轉(zhuǎn))指令。

· %cs的CPL(當(dāng)前權(quán)限級(jí)別)字段是CPU正在執(zhí)行的權(quán)限級(jí)別。通常情況下,64位用戶空間進(jìn)程運(yùn)行的%cs為0x33,即GDT的索引6,特權(quán)級(jí)別為3,內(nèi)核運(yùn)行的%cs為0x10,即GDT的索引2,特權(quán)級(jí)別為0(因此稱為ring 0)。

· 實(shí)際上我們可以使用modify_ldt()系統(tǒng)調(diào)用在LDT中安裝條目,但要注意的是,內(nèi)核會(huì)對(duì)條目進(jìn)行消毒,所以我們不能創(chuàng)建一個(gè)指向DPL 0的段的調(diào)用門(mén)。

· %fs和%gs的基地址是由MSRs指定的。這些寄存器通常分別用于用戶空間進(jìn)程和內(nèi)核的TLS(線程本地存儲(chǔ))和per-CPU數(shù)據(jù)。我們可以使用arch_prctl()系統(tǒng)調(diào)用來(lái)改變這些寄存器的值。在某些CPU/內(nèi)核上,我們可以使用wrfsbase和wrgsbase指令。

· 使用mov或pop指令設(shè)置%ss會(huì)使CPU在mov或pop指令之后的一條指令中屏蔽中斷、NMI、斷點(diǎn)和單步陷阱。如果下一條指令導(dǎo)致進(jìn)入內(nèi)核,這些中斷、NMI、斷點(diǎn)或單步陷阱將在CPU開(kāi)始在內(nèi)核空間執(zhí)行后生效。這就是CVE-2018-8897的來(lái)源,內(nèi)核沒(méi)有正確處理這種情況。

LDT

由于我們可能會(huì)從LDT中加載段寄存器,所以不妨從設(shè)置LDT開(kāi)始入手。由于modify_ldt()沒(méi)有g(shù)libc封裝器,所以我們必須使用syscall()函數(shù)來(lái)調(diào)用它:

  1. #include 
  2. #include 
  3. #include 
  4. #include 
  5.   
  6. for (unsigned int i = 0; i < 4; ++i) { 
  7.     struct user_desc desc = {}; 
  8.     desc.entry_number = i; 
  9.     desc.base_addr = std::uniform_int_distribution 
  10.     desc.limit = std::uniform_int_distribution 
  11.     desc.seg_32bit = std::uniform_int_distribution 
  12.     desc.contents = std::uniform_int_distribution 
  13.     desc.read_exec_only = std::uniform_int_distribution 
  14.     desc.limit_in_pages = std::uniform_int_distribution 
  15.     desc.seg_not_present = std::uniform_int_distribution 
  16.     desc.useable = std::uniform_int_distribution 
  17.   
  18.     syscall(SYS_modify_ldt, 1, &desc, sizeof(desc)); 

我們可能要檢查這里的返回值;我們不應(yīng)該生成無(wú)效的LDT條目,所以知道我們是否存在這種條目是很有用的。

  1. static uint16_t get_random_segment_selector() 
  2.     unsigned int index
  3.   
  4.     switch (std::uniform_int_distribution 
  5.     case 0: 
  6.         // The LDT is small, so favour smaller indices 
  7.         index = std::uniform_int_distribution 
  8.         break; 
  9.     case 1: 
  10.         // Linux defines 32 GDT entries by default 
  11.         index = std::uniform_int_distribution 
  12.         break; 
  13.     case 2: 
  14.         // Max table size 
  15.         index = std::uniform_int_distribution 
  16.         break; 
  17.     } 
  18.     unsigned int ti = std::uniform_int_distribution 
  19.     unsigned int rpl = std::uniform_int_distribution 
  20.   
  21.     return (index << 3) | (ti << 2) | rpl; 

數(shù)據(jù)段(%ds)

下面展示如何使用數(shù)據(jù)段:

  1. if (std::uniform_int_distribution 
  2.     uint16_t sel = get_random_segment_selector(); 
  3.   
  4.     // movw $imm, %ax 
  5.     *out++ = 0x66; 
  6.     *out++ = 0xb8; 
  7.     *out++ = sel; 
  8.     *out++ = sel >> 8; 
  9.   
  10.     // movw %ax, %ds 
  11.     *out++ = 0x8e; 
  12.     *out++ = 0xd8; 

%fs與 %gs

對(duì)于%fs和%gs,我們需要使用系統(tǒng)調(diào)用arch_prctl()。在普通(非JIT匯編)代碼中,可以這樣使用:

  1. #include 
  2. #include 
  3.   
  4. ... 
  5.   
  6. syscall(SYS_arch_prctl, ARCH_SET_FS, get_random_address()); 
  7. syscall(SYS_arch_prctl, ARCH_SET_GS, get_random_address()); 

不幸的是,這樣做很有可能導(dǎo)致glibc/libstdc++在任何使用線程本地存儲(chǔ)的代碼上崩潰(甚至在第二次get_random_address()調(diào)用時(shí)就可能發(fā)生)。如果我們想生成系統(tǒng)調(diào)用來(lái)做這件事,我們可以通過(guò)支持代碼進(jìn)行協(xié)助:

  1. enum machine_register { 
  2.     // 0 
  3.     RAX, 
  4.     RCX, 
  5.     RDX, 
  6.     RBX, 
  7.     RSP, 
  8.     RBP, 
  9.     RSI, 
  10.     RDI, 
  11.     // 8 
  12.     R8, 
  13.     R9, 
  14.     R10, 
  15.     R11, 
  16.     R12, 
  17.     R13, 
  18.     R14, 
  19.     R15, 
  20. }; 
  21.   
  22. const unsigned int REX = 0x40; 
  23. const unsigned int REX_B = 0x01; 
  24. const unsigned int REX_W = 0x08; 
  25.   
  26. static uint8_t *emit_mov_imm64_reg(uint8_t *out, uint64_t imm, machine_register reg) 
  27.     *out++ = REX | REX_W | (REX_B * (reg >= 8)); 
  28.     *out++ = 0xb8 | (reg & 7); 
  29.     for (int i = 0; i < 8; ++i) 
  30.         *out++ = imm >> (8 * i); 
  31.   
  32.     return out
  33.   
  34. static uint8_t *emit_call_arch_prctl(uint8_t *outint code, unsigned long addr) 
  35.     // int arch_prctl(int code, unsigned long addr); 
  36.     out = emit_mov_imm64_reg(out, SYS_arch_prctl, RAX); 
  37.     out = emit_mov_imm64_reg(out, code, RDI); 
  38.     out = emit_mov_imm64_reg(out, addr, RSI); 
  39.   
  40.     // syscall 
  41.     *out++ = 0x0f; 
  42.     *out++ = 0x05; 
  43.   
  44.     return out

需要注意的是,除了需要一些寄存器來(lái)執(zhí)行系統(tǒng)調(diào)用本身之外,syscall指令還用返回地址(即syscall指令后的指令地址)覆蓋%rcx,所以我們可能要在做其他事情之前進(jìn)行這些調(diào)用。

小結(jié)

在本文中,我們?yōu)樽x者更進(jìn)一步介紹了各種標(biāo)志寄存器、堆棧指針以及部分段寄存器,在下一篇文章中,我們將為讀者介紹調(diào)試寄存器以及進(jìn)入內(nèi)核的不同方法。

本文翻譯自:https://blogs.oracle.com/linux/fuzzing-the-linux-kernel-x86-entry-code%2c-part-2-of-3如若轉(zhuǎn)載,請(qǐng)注明原文地址

 

責(zé)任編輯:姜華 來(lái)源: 嘶吼網(wǎng)
相關(guān)推薦

2020-10-12 10:22:16

Linux內(nèi)核

2020-09-23 12:42:08

Linux

2020-10-13 10:51:10

Linux內(nèi)核

2021-08-20 11:12:31

NFVX86架構(gòu)地址

2011-04-19 09:17:36

2012-04-28 09:07:48

甲骨文x86

2019-07-15 13:11:57

Power

2011-12-01 11:09:48

AMDx86服務(wù)器英特爾

2020-09-15 06:15:23

滲透測(cè)試風(fēng)險(xiǎn)評(píng)估網(wǎng)絡(luò)安全

2021-09-14 10:07:09

英特爾初始代碼用戶中斷

2021-06-07 15:20:22

Linux X861MB內(nèi)存BIOS

2011-02-20 22:23:43

X86虛擬化XenServer

2011-12-19 10:55:58

云計(jì)算中國(guó)電信

2011-11-10 09:26:48

Solaris 11

2009-08-28 14:38:33

2010-04-06 14:20:33

數(shù)據(jù)庫(kù)服務(wù)器

2011-04-25 14:51:59

Linux任務(wù)切換TSS

2010-04-29 17:50:15

2013-08-07 09:55:05

IBMGoogleNVIDIA

2014-03-14 09:58:49

服務(wù)器ARMx86
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

性高爱久久久久久久久| 久热国产精品| 午夜欧美理论片| 亚洲第一久久影院| 国产精品一区二区黑丝| 美女扒开尿口让男人操亚洲视频网站| 91看片破解版| free性欧美| 日韩精品色哟哟| 天天躁日日躁狠狠躁伊人| 日本不卡久久| 欧美日韩国产一区二区三区| 国产一区二区视频在线看| 人妻丰满熟妇aⅴ无码| 日韩精品在线影院| 天天超碰亚洲| 国产情侣免费视频| 免费观看成人高| 亚洲国产精品一区二区久久恐怖片| 免费成人直播| 六十路息与子猛烈交尾| 久久久久久综合网天天| av在线综合网| 九色porny视频在线观看| 在线观看欧美一区二区| 日韩小视频在线| 国产一区二区成人久久免费影院 | 欧美激情一区二区三区成人| 香蕉久久国产| 精品一区二三区| 精品免费国产| 亚洲日本无吗高清不卡| 久久一级黄色片| 网友自拍一区| 国偷自产一区二区免费视频| wwww国产精品欧美| 91免费看蜜桃| 中文字幕+乱码+中文字幕明步 | 一级片一区二区三区| 欧美日韩一区二区三| 午夜精品久久久久久久蜜桃app | 免费黄色在线网址| 国产精品美女免费| 99精品一区二区三区| 成人看片网站| 久久久久久久久久网站| 99re视频在线| 欧美三级电影在线| 国产一级片网址| 日韩av电影在线网| 国产精品国产三级国产aⅴ入口| 欧美日韩视频免费看| 麻豆天美蜜桃91| 午夜午夜精品一区二区三区文| 日韩美女久久久| 在线观看一区二区三区四区| 欧美sm美女调教| 成人免费毛片嘿嘿连载视频| 亚洲成人激情视频| 亚洲国产综合av| 999国产精品亚洲77777| 欧美色videos| 国产青青在线视频| 男人av在线播放| 亚洲成人动漫av| 欧美多人乱p欧美4p久久| 久久久www成人免费毛片麻豆 | 亚洲а∨天堂久久精品9966| 久久综合影音| 精品日韩视频| 日本a级c片免费看三区| 亚洲精品蜜桃久久久久久| 中文字幕日韩综合av| 国产不卡视频一区二区三区| 国产精品一区免费在线 | 成年人黄色在线观看| 亚洲高清av在线| 丰满人妻一区二区三区免费| 中文字幕亚洲日本| 7777精品久久久大香线蕉小说| 精品久久中文字幕久久av| 激情欧美一区二区三区黑长吊| 欧美日韩人妻精品一区二区三区| 黄色一级大片免费| 97在线视频免费播放| 久久久精品欧美| 日本成人xxx| 99re8这里有精品热视频免费 | 亚洲性无码av在线| 日本猛少妇色xxxxx免费网站| 网曝91综合精品门事件在线| 羞羞的视频在线观看| 五月婷婷激情网| 欧美精品成人网| 国产精品永久免费| 日韩久久精品一区| fc2成人免费人成在线观看播放| 国产伦精品一区二区三区千人斩| 在线看av的网址| 免费中文字幕在线观看| 亚洲精品免费一区亚洲精品免费精品一区| 91丝袜呻吟高潮美腿白嫩在线观看| 久草精品在线| 国产91足控脚交在线观看| 黄色污污视频软件| 免费观看一区二区三区| 亚洲一区二区三区午夜| 成人激情av在线| 中文字幕av一区中文字幕天堂 | 亚洲va欧美va| 欧美一级视频免费观看| 国产精品不卡| 久久人91精品久久久久久不卡| 国产一卡二卡三卡| 懂色av中文字幕一区二区三区| 日本一区不卡| 91制片在线观看| 69久久99精品久久久久婷婷| 欧美福利视频在线| 欧美日韩国产一级二级| 国产精品视频观看| 国产剧情在线观看一区二区| 狠狠88综合久久久久综合网| 日韩毛片免费看| 99热国产在线中文| www.com欧美| 天堂а√在线中文在线新版| 成人精品在线看| 老牛精品亚洲成av人片| 日韩最新中文字幕电影免费看| 国产无遮挡又黄又爽又色| 国产真实乱子伦精品视频| 日韩av一级大片| 欧美三级网站| 亚洲成年人在线播放| 国产这里有精品| 激情久久五月天| 日韩视频专区| 婷婷综合六月| 亚洲午夜女主播在线直播| 国产成人精品a视频一区| 国产成人小视频| 妞干网这里只有精品| 国产精品3区| 中文字幕欧美精品在线| 国产偷人爽久久久久久老妇app| 91亚洲精品久久久蜜桃| 妞干网在线观看视频| 鲁大师精品99久久久| 国产最新精品视频| 亚洲av无码乱码国产麻豆| 一区二区三区四区在线播放| 久久久精品视频国产| 欧美.www| aa成人免费视频| 丁香高清在线观看完整电影视频| 欧美成人乱码一区二区三区| 久久久精品视频在线| 六月丁香色婷婷| 国产成a人无v码亚洲福利| 男人草女人视频| 77成人影视| 久久久久久久999精品视频| 亚洲精品国偷拍自产在线观看蜜桃| 亚洲老妇xxxxxx| 韩国三级在线看| av一区二区在线播放| 红桃成人av在线播放| 91嫩草精品| 欧美大片91| 国产亚洲观看| 亚洲日本va| 亚洲码欧美码一区二区三区| 香蕉久久久久久| 国产成人精品一区二区三区在线 | 午夜一区二区三区视频| 国产精品理论在线观看| 久久午夜羞羞影院免费观看| 亚洲视频小说图片| 成人禁用看黄a在线| 亚洲男人电影天堂| 黄色成人在线播放| 成人亚洲一区二区一| 久久精品国产成人一区二区三区 | 久久久午夜电影| 蜜臀av.com| 女同久久另类99精品国产| 日韩免费av在线| 欧美尤物美女在线| 欧美成人国产一区二区| 国产无遮挡呻吟娇喘视频| 国产乱人伦偷精品视频免下载| 不卡av在线网| 日本精品视频在线| 奇米色777欧美一区二区| 中文字幕区一区二区三| 99re8这里有精品热视频免费| 外国成人在线视频| 综合色一区二区| 久久精品国产精品青草| 亚洲主播在线播放| 99精品在线观看视频| 国产片一区二区| 欧美日韩国产色站一区二区三区| 在线观看国产精品91| 91精品久久久久久| 国产精品8888| a级大片在线观看| 国产乱子伦精品无码码专区| 高端美女服务在线视频播放| 欧美热在线视频精品999| 蜜桃视频一区| 99re这里只有精品6| 一区二区高清免费观看影视大全| 欧美日韩国产专区| 日韩午夜在线影院| 97视频国产在线| 色悠悠久久综合网| 日韩高清欧美| 精品一区久久久久久| 成人综合日日夜夜| 国产精品久久午夜夜伦鲁鲁| 亚洲在线视频一区二区| 美女一区2区| 91在线免费看片| 亚洲精品777| 国产精品久久久久av| 小h片在线观看| 97国产精品免费视频| 日本aa在线| 久久艳片www.17c.com| 成人高清在线| 亚洲香蕉成人av网站在线观看 | 69av一区二区三区| 中文在线字幕av| 色婷婷国产精品综合在线观看| 永久免费看片在线播放| 亚洲国产精品人人做人人爽| 欧美国产精品一二三| 亚洲精品网站在线观看| 成人免费视频网站入口::| 中文字幕一区二区三区视频| 国产精品1区2区3区4区| 国产精品色一区二区三区| 免费看91的网站| 日本一区二区免费在线| 极品蜜桃臀肥臀-x88av| 亚洲国产精品成人综合色在线婷婷 | 亚洲精品国产精品国产自| 黑人精品一区二区三区| 精品国产亚洲在线| 欧美性猛交 xxxx| 亚洲精品久久久久久下一站| 四虎在线免费看| 亚洲精品中文字| 风间由美一区| 日韩性生活视频| 在线网址91| 国内精品小视频在线观看| 黄色激情在线播放| 欧美有码在线观看视频| 粉嫩91精品久久久久久久99蜜桃| 国产精品欧美一区二区| 亚洲视频自拍| 粉嫩av免费一区二区三区| 久久中文资源| 欧美尤物一区| 四季av一区二区凹凸精品| 免费日韩在线观看| 一道本一区二区| 91色国产在线| 国产乱码精品1区2区3区| 麻豆精品国产传媒av| 久久网这里都是精品| 娇妻被老王脔到高潮失禁视频| 1区2区3区精品视频| 久久久国产成人| 狠狠久久亚洲欧美专区| 亚洲天堂aaa| 欧美成人精品福利| 久久久久久久久久久国产精品| 国产精品99久久精品| 国产一级片91| 老鸭窝亚洲一区二区三区| 小明看看成人免费视频| 成人av在线播放网址| 国产sm调教视频| 一区二区三区中文在线| 日本黄色一级视频| 欧美成人精品1314www| 精品亚洲综合| 欧美成人自拍视频| 欧美日韩视频网站| 91精品国产99久久久久久红楼| 九九久久婷婷| 青青青在线观看视频| 男女视频一区二区| 国产吃瓜黑料一区二区| 国产欧美日韩亚州综合| 国产在线视频二区| 欧美日韩亚洲另类| 无码精品一区二区三区在线 | av免费网站在线| 欧美一区二区三区免费视| 国产95亚洲| 日本公妇乱淫免费视频一区三区| 午夜久久99| 午夜宅男在线视频| 91蜜桃在线观看| 青娱乐国产在线| 欧美日韩你懂得| 毛片免费在线观看| 久久露脸国产精品| 成人乱码手机视频| 欧美性大战久久久久| 在线欧美福利| 久久久久久国产精品日本| 国产清纯白嫩初高生在线观看91 | 97se亚洲综合| 成人直播大秀| 国产福利视频在线播放| 成人免费高清在线| 天天干中文字幕| 欧美一级二级三级乱码| 69视频在线观看| 国产成人精品一区二区在线| 秋霞在线一区| 男人天堂av片| 国产精品原创巨作av| 黑鬼狂亚洲人videos| 欧美三级蜜桃2在线观看| 能在线看的av| 欧美自拍视频在线观看| 欧美黄色录像| 成人免费aaa| 成人永久免费视频| 中文字幕在线有码| 欧美二区三区91| 麻豆网站在线免费观看| 国产精品吴梦梦| 欧美mv日韩| 九九精品久久久| 亚洲欧洲国产专区| 91 中文字幕| 久久久91精品国产一区不卡| 95精品视频| 欧美一区二区三区综合| 懂色av中文一区二区三区| 国产一级片久久| 亚洲第一福利视频| 秋霞伦理一区| 欧美在线日韩精品| 成人片在线看| 久久免费视频网站| 精品无人区一区二区| 成人免费性视频| av电影天堂一区二区在线观看| 亚洲 欧美 视频| 国产丝袜精品视频| 成人日韩在线| 中文字幕一区综合| 国产精品影视网| 日本视频免费在线| 亚洲欧洲国产伦综合| 欧美亚洲黄色| 激情视频小说图片| 成人sese在线| 午夜精品一区二| 中文字幕亚洲一区| 一区中文字幕| 国产麻花豆剧传媒精品mv在线| 国产日本欧美一区二区| 亚洲网站在线免费观看| 九九视频这里只有精品| 婷婷综合电影| 亚州精品一二三区| 亚洲另类中文字| 天堂网在线中文| 国产精品嫩草影院久久久| 一区二区三区午夜视频| 中文字幕天堂网| 欧美视频一区二| 欧美xxxx免费虐| 欧洲精品国产| 精品一区二区综合| 久久在线视频精品| 亚洲美女视频网站| 日韩经典一区| 中文字幕一区综合| 久久综合色之久久综合| 亚洲中文字幕一区二区| 97热精品视频官网| 国语产色综合| 97精品人人妻人人| 欧美日韩视频在线第一区 | 国产欧美综合一区| 99视频在线精品| 国产欧美久久久| 日韩av大片在线| 综合一区av|