精品欧美一区二区三区在线观看 _久久久久国色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)

亚洲乱码中文字幕久久孕妇黑人| 96精品久久久久中文字幕| 中文字幕一区二区人妻在线不卡| 成人看片网页| 一区二区三区在线视频观看| 欧美国产视频在线观看| 91丨九色丨丰满| 亚洲裸体俱乐部裸体舞表演av| 亚洲人精品午夜在线观看| 久久婷婷中文字幕| 日韩深夜视频| √…a在线天堂一区| 精品国产乱码久久久久久蜜柚| 中文字幕一区2区3区| 一区在线视频观看| 国产亚洲一区精品| 污污内射在线观看一区二区少妇| 六九午夜精品视频| 黑人巨大精品欧美一区二区三区 | 欧美韩国日本在线观看 | 国产欧美日韩精品专区| jizz国产免费| 中文字幕亚洲精品乱码| 国产香蕉一区二区三区在线视频| 精品人妻在线视频| 99精品美女视频在线观看热舞| 欧美性生交xxxxx久久久| 日韩精品手机在线观看| 91av资源在线| 久久久久九九视频| 精品国产福利| 免费av网站观看| 国产裸体歌舞团一区二区| 国产精品久久久久久久午夜| 国产又大又粗又爽| 国产精品乱看| 午夜精品久久久久久久白皮肤| 超碰手机在线观看| 97精品一区| 丝袜美腿精品国产二区| 99久久99久久精品免费看小说.| 精品影片在线观看的网站| 亚洲国产精品久久久久秋霞蜜臀 | 亚洲精品一二三**| 欧美丰满美乳xxx高潮www| 久久午夜夜伦鲁鲁一区二区| 另类专区亚洲| 色狠狠色噜噜噜综合网| 日韩精品一区二区三区不卡| 午夜影院一区| 色狠狠一区二区| 凹凸日日摸日日碰夜夜爽1| 97成人资源| 一本色道久久综合狠狠躁的推荐| 噜噜噜久久亚洲精品国产品麻豆| 日韩电影毛片| 色婷婷综合久久久中文一区二区| 免费裸体美女网站| 成人免费黄色| 欧美一区二视频| 中文字幕乱码在线人视频| 亚洲高清在线一区| 精品国产凹凸成av人导航| 国产乱淫av片| 青青操综合网| 尤物九九久久国产精品的分类| 国产真人真事毛片视频| 亚洲精品网址| 97精品欧美一区二区三区| 国产精品久免费的黄网站| 日韩成人免费在线| 成人日韩在线电影| 亚洲高清视频网站| 91蝌蚪porny| 一区二区三区四区免费视频| av在线麻豆| 欧美日韩国产在线播放| 国产一级不卡毛片| 久久天堂久久| 日韩精品在线第一页| 精品人妻中文无码av在线| 91精品一区国产高清在线gif | 国产一级在线免费观看| 国产精品日韩精品欧美精品| 国产精品久久久久9999| 国产亲伦免费视频播放| 99久久精品久久久久久清纯| 水蜜桃亚洲精品| 18在线观看的| 色国产精品一区在线观看| 肉色超薄丝袜脚交| 色哟哟精品丝袜一区二区| 日韩中文综合网| 精品一区二区三区人妻| 日韩av一区二| 国产精品一区二区免费| 超碰免费在线| 午夜电影网一区| 一区二区三区视频网| 91九色鹿精品国产综合久久香蕉| 亚洲免费视频在线观看| √天堂中文官网8在线| 亚洲中字在线| 91精品国产91久久久久青草| 欧美日韩免费做爰大片| 一区福利视频| 污视频软件在线观看| 日操夜操天天操| 欧美色图激情小说| 久久国产天堂福利天堂| 精品免费囯产一区二区三区| 狠狠色丁香久久婷婷综合丁香| 国产精品一国产精品最新章节| 二区三区在线| 午夜在线电影亚洲一区| 99日在线视频| 精品国产1区| 91精品国产91久久久久| 精品人妻伦一区二区三区久久| 久久久精品人体av艺术| 国产精品久久久久9999爆乳| 96视频在线观看欧美| 亚洲香蕉成人av网站在线观看| 国产无精乱码一区二区三区| 久久99国产精品久久99果冻传媒| 久久av一区二区| 国精产品一区一区三区mba下载| 欧美日韩aaaaaa| 国产精品20p| 嫩草成人www欧美| 国产视频不卡| 大香伊人久久| 日韩精品在线看片z| 中文字幕亚洲欧美日韩| 精品一区二区三区免费视频| 五月婷婷一区| 国产精品高颜值在线观看| 精品国产乱码久久久久久图片| 国产日产精品一区二区三区的介绍| 日韩中文欧美在线| 日本一区二区三区视频在线观看 | 国产一区二区精品福利地址| 国语自产偷拍精品视频偷| 午夜精品在线播放| 一区二区三区在线播| 一级网站在线观看| 66国产精品| 亚洲一区免费网站| av免费网站在线观看| 欧美一区二区三区在线观看| 校园春色 亚洲| 国产精品99久久不卡二区| 大桥未久一区二区| 日本综合精品一区| 欧美日韩福利电影| 日本激情一区二区三区| 精品电影在线观看| www.色天使| 日本不卡免费在线视频| 伊人情人网综合| www.久久草.com| 欧美精品一区二区免费| 免费a级片在线观看| 亚洲成人午夜电影| av直播在线观看| 久久亚洲电影| 亚洲啪啪av| 亚洲三级电影| 欧美极品少妇与黑人| 天堂中文资源在线观看| 欧美午夜精品伦理| 在线观看免费黄色网址| 国产伦精品一区二区三区免费迷| 99热久久这里只有精品| 中文字幕亚洲影视| 国产欧美精品在线| xxxx视频在线| 国产一区二区久久精品| 99riav国产| 午夜精品久久久久久久99水蜜桃| 久操视频免费看| 国产在线视频一区二区| 蜜桃传媒一区二区三区| 日韩免费视频| 国产免费一区二区三区| 色成人免费网站| 久精品免费视频| 免费国产在线观看| 日韩欧美中文字幕制服| 国产精品第5页| 亚洲欧美日韩国产手机在线| 在线免费观看成年人视频| 狠狠色丁香久久婷婷综合_中 | 亚洲国产毛片完整版| 国产精品久久久久久久久夜色| |精品福利一区二区三区| 老熟妇精品一区二区三区| 老鸭窝一区二区久久精品| 黄网站欧美内射| 久久综合88| 久久99九九| 91精品短视频| 国产主播欧美精品| 综合日韩av| 欧美另类在线播放| 成年人视频在线观看免费| 亚洲精品一区二区三区四区高清 | 国产激情一区二区三区桃花岛亚洲| 成人在线免费观看av| 中出一区二区| 性刺激综合网| 婷婷综合电影| 国产高清一区二区三区| 午夜精品久久久久久毛片| 日韩av男人的天堂| www视频在线观看| 欧美成年人视频网站欧美| fc2在线中文字幕| 精品一区二区三区三区| 黄色福利在线观看| 欧美一级理论片| 国产又大又黑又粗| 欧美日韩一区 二区 三区 久久精品| 国产成人无码一区二区三区在线 | 自拍偷拍欧美亚洲| 亚洲一区二区视频| 欧美成人手机视频| 亚洲日穴在线视频| 成人性视频免费看| 亚洲国产精品成人综合| 精品无人区无码乱码毛片国产| 99在线精品免费| 一边摸一边做爽的视频17国产| 国产精品自在欧美一区| 久久精品无码一区二区三区毛片 | 欧洲色大大久久| 久久精品久久久久久久| 色狠狠色噜噜噜综合网| 久久久久久久久久成人| 色菇凉天天综合网| 在线免费观看av网址| 一本色道亚洲精品aⅴ| 黄色一级视频免费看| 欧美性猛片xxxx免费看久爱| 无码任你躁久久久久久久| 日本高清无吗v一区| 久久久久久久久久一级| 欧美色成人综合| 亚洲一级片免费看| 欧美另类变人与禽xxxxx| 91在线公开视频| 91精品国产麻豆国产自产在线| 国产又粗又猛又黄又爽| 日韩一级完整毛片| 欧美视频一二区| 日韩高清人体午夜| 国产三级电影在线| 日韩一区二区三区xxxx| 中国av在线播放| 欧美国产一区二区三区| 高潮在线视频| 国产精品第3页| 91精品视频一区二区| 北条麻妃高清一区| 欧美绝顶高潮抽搐喷水合集| 欧美一区免费视频| 99久久亚洲精品蜜臀| 米仓穗香在线观看| 99国产精品| youjizzxxxx18| 国产精品一二三区在线| 一起草在线视频| 欧美国产欧美亚州国产日韩mv天天看完整| 青青操在线播放| 亚洲综合999| 看黄色一级大片| 日韩一级在线观看| 噜噜噜噜噜在线视频| 久久精品国产成人| 国产夫妻在线播放| 国产日韩换脸av一区在线观看| 日韩欧美中文字幕一区二区三区| 九色视频成人porny| 亚洲h色精品| 九九九九免费视频| 久久精品99国产精品日本| 在线观看一区二区三区四区| 久久久久国产精品人| 天天操天天操天天操天天操天天操| 亚洲成国产人片在线观看| 黄色av一区二区| 精品剧情在线观看| 夜级特黄日本大片_在线| 韩国福利视频一区| 色综合.com| 久久涩涩网站| 欧美激情1区2区3区| 亚洲一区二区三区四区五区xx| 高清国产一区二区| 国产馆在线观看| 欧美日韩中文在线| 国产激情无套内精对白视频| 亚洲天堂av图片| 9999在线视频| 91日韩在线视频| 欧美理论视频| 99爱视频在线| 床上的激情91.| 久久国产波多野结衣| 色一区在线观看| 天堂在线观看免费视频| 欧美大胆a视频| 欧美日韩破处视频| 欧美午夜免费| 亚洲伦伦在线| 国产日韩视频一区| 亚洲男人天堂av| 中文字幕 国产精品| 亚洲欧美日韩区| 欧美男男tv网站在线播放| 成人三级在线| 中文精品久久| 91福利免费观看| 国产精品国产三级国产aⅴ中文 | 欧美精品日韩精品| 国产乱子伦三级在线播放| 777777777亚洲妇女| av成人综合| 日韩精品综合在线| 国产精品亚洲第一区在线暖暖韩国| 97在线观看视频免费| 欧美午夜精品一区二区三区 | 日韩高清成人在线| av日韩一区二区三区| 国产suv一区二区三区88区| 丁香花五月激情| 欧美一级理论性理论a| 色呦呦在线看| 动漫一区二区在线| 亚洲日本成人| 亚洲蜜桃精久久久久久久久久久久| 午夜伊人狠狠久久| 日韩午夜影院| 国产99久久精品一区二区| 久久不见久久见中文字幕免费 | 亚洲mmav| 一区二区精品国产| 精品一区二区三区在线播放 | 国产h在线观看| 国产精品久久婷婷六月丁香| 日本一本不卡| 国产又黄又猛的视频| 一区二区三区四区在线播放| 韩国av在线免费观看| 97不卡在线视频| 狠狠做深爱婷婷综合一区| 日韩福利视频在线| 中文字幕一区二区5566日韩| 99精品视频免费看| 国内精品久久久久| 国产精品午夜一区二区三区| 中文久久久久久| 亚洲视频免费在线观看| 亚洲AV无码一区二区三区性| 国外成人性视频| 国产精品一区二区99| 蜜臀一区二区三区精品免费视频| 亚洲免费观看高清完整版在线| 成人毛片在线精品国产| 欧美一区二三区| 99精品在线观看| 在线观看亚洲免费视频| 色噜噜久久综合| www久久日com| 美乳视频一区二区| 久久99精品久久久久久国产越南 | bestiality新另类大全| 国产女人水真多18毛片18精品 | 大地资源中文在线观看免费版| 成人精品久久av网站| 亚洲久色影视| 女同久久另类69精品国产| 亚洲成色777777在线观看影院| 国产一区二区主播在线| 日本天堂免费a| 久久在线观看免费| 国产丰满果冻videossex| 全球成人中文在线| 一区二区三区四区在线观看国产日韩| 日本一级片在线播放| 欧美日本一区二区三区四区| 日本不卡网站| 成人在线免费高清视频| 天堂俺去俺来也www久久婷婷| 日韩视频中文字幕| 中文字幕久久精品一区二区| 午夜视频在线瓜伦| 亚洲一区二区精品久久av| 国产在线一在线二| 国产伦精品一区二区三区高清|