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

Linux內核(x86)入口代碼模糊測試指南Part 1

開發
在本系列文章中,我們將為讀者分享關于內核代碼模糊測試方面的見解。

 [[343454]]

在本系列文章中,我們將為讀者分享關于內核代碼模糊測試方面的見解。

簡介

對于長期關注Linux內核開發或系統調用模糊測試的讀者來說,很可能早就對trinity(地址:https://lwn.net/Articles/536173/)和syzkaller(地址:https://lwn.net/Articles/677764/)并不陌生了。近年來,安全研究人員已經利用這兩個工具發現了許多內核漏洞。實際上,它們的工作原理非常簡單:向內核隨機拋出一些系統調用,以期某些調用會導致內核崩潰,或觸發內核代碼中可檢測的漏洞(例如緩沖區溢出漏洞)。

盡管這些Fuzzer能夠對系統調用自身(以及通過系統調用可訪問的代碼)進行有效的模糊測試;但是,對于在用戶空間和內核之間的邊界上發生的事情,這兩款工具卻鞭長莫及。實際上,這個邊界處發生的事情比我們想象的更為復雜:這里的代碼是用匯編語言編寫的,在內核可以安全地開始執行其C代碼之前,必須對各種體系結構狀態(CPU狀態)進行安全檢查,或者說是“消毒”。

本文將同讀者一起,探索如何為x86平臺上的Linux內核入口代碼編寫Fuzzer工具。

在繼續之前,不妨先簡單了解一下64位內核涉及的主要兩個文件:

· entry_64.S:64位進程的入口代碼。

· entry_64_compat.S:32位進程的入口代碼。

總的來說,入口代碼大約有1700行匯編代碼(其中包括注釋),所以,閱讀這些代碼的工作量并不算小,同時,這也只是整個內核代碼中很小的一部分。

memset()示例

首先,我想給出一個從用戶空間進入內核時,內核需要進行驗證的CPU狀態的具體例子。

在x86平臺上,memset()通常是由rep stos指令實現的,因為在連續的字節范圍內進行寫操作方面,該指令已經被CPU/微碼進行了高度的優化。從概念上講,這是一個硬件循環,它重復(rep)一個存儲操作(stos)若干次;目標地址由%RDI寄存器指定,迭代次數由%RCX寄存器給出。例如,您可以使用內聯匯編實現memset(),具體如下所示:

  1. static inline void memset(void *dest, int value, size_t count
  2.     asm volatile ("rep stosb"       // 4 
  3.         : "+D" (dest), "+c" (count) // 1, 2 
  4.         : "a" (value)               // 3 
  5.         : "cc""memory");          // 5 

對于上述內聯匯編代碼來說,其作用就是告訴GCC:

1. 將變量dest保存到%rdi寄存器中(+表示該值可能會被內聯匯編代碼所修改);

2. 將變量count保存到%rcx寄存器中;

3. 將變量value保存到%eax寄存器中(無論我們將其放入%rax、%eax、%ax還是%al寄存器中,這都是無關緊要的,因為rep stosb指令只使用與%al寄存器中的值相對應的低位字節);

4. 將rep stosb指令插入到匯編代碼中;

5. 重載任何可能依賴于條件碼(“cc”,即x86平臺上的%rflags寄存器)或內存的值。

作為參考,你也可以考察一下memset()在x86平臺上的主流實現代碼。

重要的是,在%rflags寄存器中含有一個很少使用的位,叫做DF位(即方向標志位)。這個標志位決定了每寫入一個字節后,rep stos會令%rdi的值遞增或遞減。當DF位被設為0時,受影響的內存范圍是從%rdi到(%rdi + %rcx);而當DF位被設為1時,受影響的內存范圍是從(%rdi - %rcx)到%rdi!由于它對memset()的最終結果有重大的影響,所以,我們最好確保DF位總是被設為0。

實際上,按照x86_64 SysV ABI的要求,在進入函數以及從函數返回時,DF位必須始終為0(具體見第15頁):

“必須在進入函數以及從函數返回時清除%rFLAGS寄存器中的方向標志DF(將方向設置為“forward”)。其他用戶標志在標準調用序列中沒有指定的角色,并且在不同的調用中不予保留。”

實際上,這是內核在內部高度依賴的一種約定;如果在調用memset()時以某種方式將DF標志設置為1,它將錯誤地覆蓋某些內存。因此,內核進入代碼的任務之一,就是確保在進入任何內核C代碼之前,DF標志始終為0。我們可以用一條指令cld(即清除方向標志指令)來實現這一點,內核的許多入口路徑就是這么做的,具體請參考paranoid_entry()或error_entry()的實現代碼。

fuzzer

如您所見,哪怕是CPU狀態的一個標志位,都對內核有著巨大的影響。接下來,我們將枚舉入口代碼需要處理的所有CPU狀態變量:

· 標志寄存器 (%rflags)

· 堆棧指針 (%rsp)

· 段寄存器 (%cs, %fs, %gs)

· 調試寄存器 (%dr0到%dr3, %dr7)

到目前為止,我們一直回避的問題是,從用戶空間進入內核有許多不同的方式,而不僅僅是系統調用(也不僅僅是系統調用的一種機制)。這些方式包括:

· int指令

· sysenter指令

· syscall指令

· INT3/INTO/INT1指令

· 被零除

· 調試異常

· 斷點異常

· 溢出異常

· 操作碼無效

· 一般保護故障

· 頁面錯誤

· 浮點異常

· 外部硬件中斷

· 不可屏蔽中斷

Fuzzer的目標應該是測試CPU狀態和用戶空間/內核轉換的所有可能組合。在理想的情況下,我們會進行窮舉搜索,但是如果您考慮寄存器值和入口方法的所有可能組合,搜索空間就太大了。因此,我們將通過兩個主要的策略來提高我們發現bug的機會。

1. 關注那些我們懷疑更有可能導致有趣/不尋常事情發生的值/案例。為此,需要查看x86文檔(維基百科、英特爾手冊等)以及入口代碼本身。例如,入口代碼記錄了幾個處理器勘誤表案例,我們可以直接使用它們來確定已知的邊緣案例。

2. 壓縮我們認為沒有影響的那些類型的值。例如,在挑選要加載到寄存器的隨機值時,重要的是要嘗試不同類型的指針(例如,內核空間、用戶空間、非規范、映射、非映射等類型的指針),而不是嘗試所有可能的值。

值得一提的是,內核已經為x86代碼提供了一個優秀回歸測試套件,它位于tools/testing/selftests/x86/目錄下,主要開發者為Andy Lutomirski。它提供了進入/離開內核的各種方法的測試用例,我們可以從中汲取靈感。

高層架構

我們這里要開發的fuzzer,實際上是一個供內核運行的用戶空間程序,用以完成相應的模糊測試工作。由于我們需要非常精確地控制一些用于觸發向內核過渡的指令,所以,我們實際上不會直接用C語言來編寫這些代碼;相反,我們將在運行時動態地生成x86機器代碼,然后執行它。為了簡單起見,也為了避免在設置好所需的CPU狀態后恢復到一個干凈的狀態(如果可以的話),我們將在一個子進程中執行生成的機器代碼,并且能夠在進入內核后將其丟棄。

下面,我們從一個基本的fork循環開始入手。

  1. #include 
  2. #include 
  3.   
  4. #include 
  5. #include 
  6. #include 
  7. #include 
  8. #include 
  9. #include 
  10.   
  11. static void *mem; 
  12.   
  13. static void emit_code(); 
  14.   
  15. typedef void (*generated_code_fn)(void); 
  16.   
  17. int main(int argc, char *argv[]) 
  18.     mem = mmap(NULL, PAGE_SIZE, 
  19.         // prot 
  20.         PROT_READ | PROT_WRITE | PROT_EXEC, 
  21.         // flags 
  22.         MAP_PRIVATE | MAP_ANONYMOUS | MAP_32BIT, 
  23.         // fd, offset 
  24.         -1, 0); 
  25.     if (mem == MAP_FAILED) 
  26.         error(EXIT_FAILURE, errno, "mmap()"); 
  27.   
  28.     while (1) { 
  29.         emit_code(); 
  30.   
  31.         pid_t child = fork(); 
  32.         if (child == -1) 
  33.             error(EXIT_FAILURE, errno, "fork()"); 
  34.   
  35.         if (child == 0) { 
  36.             // we're the child; call our newly generated function 
  37.             ((generated_code_fn) mem)(); 
  38.             exit(EXIT_SUCCESS); 
  39.         } 
  40.   
  41.         // we're the parent; wait for the child to exit 
  42.         while (1) { 
  43.             int status; 
  44.             if (waitpid(child, &status, 0) == -1) { 
  45.                 if (errno == EINTR) 
  46.                     continue
  47.   
  48.                 error(EXIT_FAILURE, errno, "waitpid()"); 
  49.             } 
  50.   
  51.             break; 
  52.         } 
  53.     } 
  54.   
  55.     return 0; 

然后,我們還將實現一個非常簡單的emit_code(),到目前為止,只創建了一個包含單個retq指令的函數:

  1. static void emit_code() 
  2.     uint8_t *out = (uint8_t *) mem; 
  3.   
  4.     // retq 
  5.     *out++ = 0xc3; 

如果您仔細閱讀代碼,很可能會感到奇怪:為什么要使用MAP_32BIT標志創建映射呢?這是因為我們希望fuzzer在32位兼容模式下運行時進入內核,所以,首先需要能在有效的32位地址下運行。

進行系統調用

在x86平臺上,系統調用的歷史有點混亂。首先,存在這樣一個事實,即系統調用最初是在32位系統上發展起來的,當時使用的是相對較慢的int指令。后來,英特爾和AMD公司分別開發了自己的快速系統調用機制(分別使用全新且互不兼容的sysenter和syscall指令)。更糟的是,64位系統需要同時處理32位進程(使用任何32位系統調用機制)、64位進程以及(可能的)第三種操作模式即x32,其中代碼像像通常那樣是64位的(并且可以訪問64位寄存器),然而,指針卻是32位的——之所以這么做,據說是為了節省內存。由于它們在進入內核模式時保存/修改的CPU狀態各不相同,因此,這些不同的系統調用機制中的大多數在內核的入口碼中采用的路徑也是各不相同的。這也是入口代碼很難理解的原因之一!

有關在x86上進行系統調用的更深入的介紹,可以參閱LWN網站上的優秀文章,比如:

· Anatomy of a system call, part 1

· Anatomy of a system call, part 2

熟悉系統調用的一個好方法是,親自動手通過GNU匯編器來制作匯編代碼片段的原型,然后供fuzzer使用。例如,像下面那樣,對內核執行一次read(STDIN_FILENO, NULL, 0)調用:

  1.      .text 
  2.         .global main 
  3. main: 
  4.         movl $0, %eax # SYS_read/__NR_read 
  5.         movl $0, %edi # fd = STDIN_FILENO 
  6.         movl $0, %esi # buf = NULL 
  7.         movl $0, %edx # count = 0 
  8.         syscall 
  9.   
  10.         movl $0, %eax 
  11.         retq 

從這段代碼中可以看到,當使用syscall指令時,系統調用號本身通過%rax寄存器傳遞,而參數則通過%rdi、%rsi、%rdx等寄存器進行傳遞。據我所知,Linux x86 SysCall ABI在入口代碼本身的entry_syscall_64()中是有“正式”記錄的(我們在這里使用的是%eXX寄存器,而不是%rXX寄存器,因為這里的機器代碼比較短;將%eXX設置為0時,將清除%rXX的高32位)。

我們可以使用gcc read.S命令來構建上述代碼(假設上述匯編代碼保存在名為read.S的文件中),并可以使用strace檢查它是否正確:

  1. $ strace ./a.out 
  2. execve("./a.out", ["./a.out"], [/* 53 vars */]) = 0 
  3. [...] 
  4. read(0, NULL, 0)                        = 0 
  5. exit_group(0)                           = ? 
  6. +++ exited with 0 +++ 

要獲得匯編后機器代碼的字節內容,我們可以先使用gcc-c read.s進行編譯,然后使用objdump -d read.o獲取相應的內容:

  1. 0000000000000000 
  2.    0:   b8 00 00 00 00          mov    $0x0,%eax 
  3.    5:   bf 00 00 00 00          mov    $0x0,%edi 
  4.    a:   be 00 00 00 00          mov    $0x0,%esi 
  5.    f:   ba 00 00 00 00          mov    $0x0,%edx 
  6.   14:   0f 05                   syscall 
  7.   16:   b8 00 00 00 00          mov    $0x0,%eax 
  8.   1b:   c3                      retq 

要將這個字節序列添加到我們的JIT匯編函數中,我們可以使用下列代碼:

  1. // mov $0, %eax 
  2. *out++ = 0xb8; 
  3. *out++ = 0x00; 
  4. *out++ = 0x00; 
  5. *out++ = 0x00; 
  6. *out++ = 0x00; 
  7.   
  8. [...] 
  9.   
  10. // syscall 
  11. *out++ = 0x0f; 
  12. *out++ = 0x05; 

重新回到memset()和方向標志位

現在,對于上面的memset()示例來說,編寫測試所需的大部分代碼都已經準備就緒了。為了設置df位,我們可以在進行系統調用之前執行std指令(該指令用于設置方向標志):

  1. // std 
  2. *out++ = 0xfd; 

既然我們要寫一個fuzzer,那么,自然需要給這個標志位隨機賦值。如果我們使用的編程語言是C++的話,可以通過如下所示的代碼來初始化PRNG:

  1. #include 
  2.   
  3. static std::default_random_engine rnd; 
  4.   
  5. int main(...) 
  6.     std::random_device rdev; 
  7.     rnd = std::default_random_engine(rdev()); 
  8.   
  9.     ... 

然后,我們可以在進行系統調用之前,使用類似下面的方式來設置(或清除)該標志位:

  1. switch (std::uniform_int_distribution 
  2. case 0: 
  3.     // cld 
  4.     *out++ = 0xfc; 
  5.     break; 
  6. case 1: 
  7.     // std 
  8.     *out++ = 0xfd; 
  9.     break; 

同樣,這些字節只是用于手工拼裝一個短測試程序,然后查看objdump的輸出結果。

注意:在子進程中生成隨機數的時候,我們要格外小心;因為我們不希望所有的子進程都生成相同的數字!這就是為什么我們實際上在父進程中生成代碼,并在子進程中簡單地執行它們的原因。

本文翻譯自:https://blogs.oracle.com/linux/fuzzing-the-linux-kernel-x86-entry-code%2C-part-1-of-3如若轉載,請注明原文地址:

 

責任編輯:姜華 來源: 嘶吼網
相關推薦

2020-10-13 10:51:10

Linux內核

2020-10-12 10:22:16

Linux內核

2020-10-10 10:14:42

Linux內核

2021-06-07 15:20:22

Linux X861MB內存BIOS

2011-04-19 09:17:36

2019-07-15 13:11:57

Power

2012-04-28 09:07:48

甲骨文x86

2011-12-01 11:09:48

AMDx86服務器英特爾

2020-09-11 11:29:34

滲透測試風險評估網絡安全

2021-09-14 10:07:09

英特爾初始代碼用戶中斷

2011-02-20 22:23:43

X86虛擬化XenServer

2011-12-19 10:55:58

云計算中國電信

2011-11-10 09:26:48

Solaris 11

2009-08-28 14:38:33

2010-04-06 14:20:33

數據庫服務器

2011-04-25 14:51:59

Linux任務切換TSS

2010-04-29 17:50:15

2013-08-07 09:55:05

IBMGoogleNVIDIA

2014-03-14 09:58:49

服務器ARMx86

2010-03-20 11:03:13

VMControl虛擬化管理
點贊
收藏

51CTO技術棧公眾號

欧美一级片免费播放| 妖精一区二区三区精品视频| 亚洲高清二区| 精品电影一区二区三区| 伊人网在线免费| 乱精品一区字幕二区| 99亚洲一区二区| 亚洲石原莉奈一区二区在线观看| 日韩中文字幕二区| 黄色av电影在线观看| 精品中文av资源站在线观看| 欧美激情欧美激情| 亚洲成人精品在线播放| 日本在线视频网址| 欧美经典一区二区| 成人片在线免费看| 国产成人在线播放视频| 成人精品影院| 亚洲精品一区二区三区香蕉 | 国产制服丝袜在线| 久久久国产精品网站| 亚洲图片欧美综合| 在线观看精品视频| 天天综合永久入口| 国产激情偷乱视频一区二区三区| 欧日韩在线观看| 黄色在线观看免费| 青青草成人影院| 亚洲精品福利视频| 在线亚洲高清视频| 国产精品xxx视频| 精品少妇theporn| 日韩理论在线| 亚洲第一黄色网| 国产免费999| 久久香蕉av| 国产精品久久久久久一区二区三区| 成人91免费视频| 一区二区三区午夜| 国产日韩一区二区三区在线| 欧美成人黄色小视频| 真实乱视频国产免费观看| 日韩影片在线观看| 欧美婷婷六月丁香综合色| 国产二级片在线观看| av毛片在线免费看| 亚洲视频一区二区在线| 亚洲高清不卡一区| 男同在线观看| 91亚洲精品久久久蜜桃| 国产精品.com| 亚洲精品一区二区口爆| 国产一区二区三区四区五区入口 | 日韩成人久久| 欧美高清视频不卡网| 天天天干夜夜夜操| 亚洲精品国产嫩草在线观看| 色综合天天综合网国产成人综合天| 中文无字幕一区二区三区| 日本一欧美一欧美一亚洲视频| 免费在线观看av网址| 欧美一区在线看| 久久99热精品| 国产精品6666| 99riav国产精品| 日本国产欧美一区二区三区| 亚洲精品中文字幕乱码三区91| 亚洲一区二区成人| 日本成熟性欧美| 成人免费一区二区三区| 蜜乳av一区二区| 国产精自产拍久久久久久| 一级特黄色大片| 久久电影网电视剧免费观看| 国产精品成人一区二区| 国产又大又黄的视频| 国产乱一区二区| 国产精品9999久久久久仙踪林| 亚洲欧美强伦一区二区| 91影院在线观看| 亚洲高清乱码| 91色在线看| 色婷婷亚洲精品| 亚洲黄色av片| 国产乱人伦丫前精品视频| 亚洲国产美女精品久久久久∴| 青青草视频网站| 精品精品99| 欧美成人在线免费| 日本三级网站在线观看| 欧美三级黄色大片| 久久精品国产亚洲blacked| 日韩av在线网页| 日本高清黄色片| 精品国产aⅴ| 久久九九热免费视频| 精品少妇theporn| 视频一区二区国产| 成人久久精品视频| 亚洲日本国产精品| 国产精品国产三级国产| 玩弄中年熟妇正在播放| 欧美性片在线观看| 精品日本一线二线三线不卡| 亚洲理论片在线观看| 婷婷色综合网| 日本精品视频在线播放| 国产99久一区二区三区a片| 2024国产精品| 男同互操gay射视频在线看| 伊人网在线播放| 日韩精品一区二区三区蜜臀| 中文字幕第九页| 日韩在线理论| 日韩美女在线观看| 亚洲av无码一区二区三区性色| 97精品国产露脸对白| 欧美久久在线| 99re6在线精品视频免费播放| 欧美性猛交xxxx乱大交退制版| 色一情一区二区三区| 免费看成人人体视频| 精品国产欧美一区二区五十路| www.av麻豆| 中文字幕欧美色图| 日韩精品一二区| 久草精品电影| 在线免费看a| 欧美日韩中文字幕综合视频| 日日夜夜精品视频免费观看| 日本欧美高清| 国精产品一区一区三区有限在线| 国产婷婷色一区二区在线观看| 强制捆绑调教一区二区| 欧美精品一区在线| 中文字幕在线官网| 亚洲国产高清福利视频| 欧美黄色一级网站| 国模无码大尺度一区二区三区| 日韩欧美亚洲日产国| 卡通欧美亚洲| 亚洲欧美中文日韩在线v日本| 国产精品黄色网| 不卡电影一区二区三区| 久久久久99精品成人片| 一区二区三区视频免费视频观看网站| 亚洲香蕉成人av网站在线观看| av资源免费观看| 成人一区在线观看| 青青草成人免费在线视频| 永久免费精品视频| 欧美成人免费全部| 亚洲精品国产精品乱码不卡| 亚洲激情自拍视频| 91欧美一区二区三区| 久久久久久久久国产一区| 国产精品国产亚洲伊人久久| av在线日韩国产精品| 精品人伦一区二区三区蜜桃网站| 日韩在线三级| 日本一区二区不卡在线| 不卡大黄网站免费看| 超碰97在线看| 成人搞黄视频| 欧美高清不卡在线| 99久久夜色精品国产亚洲| 中文字幕亚洲在| 欧美国产在线一区| 国模大胆一区二区三区| 999在线观看免费大全电视剧| 在线看女人毛片| 亚洲高清福利视频| 午夜一区二区三区四区| 国产精品乱子久久久久| 欧美激情第一区| 国产精品va| 蜜桃精品久久久久久久免费影院 | 日韩亚洲国产中文字幕| 99精品人妻无码专区在线视频区| 亚洲视频一二三| 无码成人精品区在线观看| 国产亚洲成人一区| 青娱乐一区二区| 一区二区三区| 国内精品伊人久久| 久久视频www| 91精品国产综合久久久久久久久久 | 欧美成人精品激情在线视频| 国产成人欧美日韩在线电影| 日本a在线免费观看| 国产精品免费不| 北岛玲一区二区三区四区| 91久久精品www人人做人人爽| 高清电影在线免费观看| 精品福利一区二区三区免费视频| 神马久久久久久久| 一区二区三区在线免费播放| 女同性恋一区二区三区| 久久中文字幕一区二区三区| 伊人久久大香线蕉精品| 一本色道69色精品综合久久| 国产成人精品av在线| 久久免费看视频| 欧美mv日韩mv| 亚洲熟妇无码久久精品| 精品久久久久久| 麻豆视频免费在线播放| av在线不卡免费看| 成人不卡免费视频| 日韩高清在线不卡| 男女私大尺度视频| 99久久精品费精品国产风间由美| 国产另类自拍| 2019年精品视频自拍| 国内精品一区二区三区| 超碰在线caoporen| 国产午夜精品美女视频明星a级| 亚洲精品无码久久久久| 偷窥少妇高潮呻吟av久久免费| 亚洲理论片在线观看| av在线一区二区| 中文写幕一区二区三区免费观成熟| 日韩精品一二三| 999在线观看视频| 日韩一区二区在线| 免费看成人片| 老汉色老汉首页av亚洲| 91在线看网站| 国产午夜亚洲精品一级在线| 国产精品久久999| 欧美7777| 成人在线免费观看网站| 97香蕉超级碰碰久久免费软件| 浪潮av一区| 中文字幕欧美专区| 国产福利小视频在线观看| 日韩精品欧美激情| 全国男人的天堂网| 欧美大片顶级少妇| 国产乱淫av片免费| 欧美色播在线播放| 亚洲午夜18毛片在线看| 精品久久久久久久久久久久久| 国产免费无码一区二区视频| 国产欧美视频在线观看| 91精彩刺激对白露脸偷拍| av电影在线观看完整版一区二区| 69久久精品无码一区二区| 国产一区二区按摩在线观看| 亚洲欧美激情网| 亚洲欧美日本日韩| 春日野结衣av| 欧美国产专区| 国产freexxxx性播放麻豆| 欧美成人精品| 亚洲国产精品无码av| 伊人成人在线视频| av磁力番号网| 亚洲天堂激情| koreanbj精品视频一区| 国产精品婷婷| 午夜视频在线瓜伦| 欧美bbbbb| 免费看国产黄色片| 激情另类小说区图片区视频区| 色婷婷.com| 国产成人精品aa毛片| wwwxxx色| 26uuu国产日韩综合| 精品亚洲aⅴ无码一区二区三区| 国产欧美一区二区三区鸳鸯浴| 貂蝉被到爽流白浆在线观看| 亚洲欧洲日本在线| 免费在线观看日韩| 亚洲一区二区三区中文字幕在线观看| 亚洲人a成www在线影院| sese在线视频| 欧美成人一二三| 亚洲校园激情春色| 国产精品偷伦免费视频观看的| 看亚洲a级一级毛片| 97se亚洲综合| 国产一区二区三区日韩精品| 中文字幕中文字幕99| 在线播放日韩| 国产天堂在线播放| 国产乱码精品1区2区3区| 国内av免费观看| 久久一区二区三区四区| 日本美女黄色一级片| 亚洲乱码一区二区三区在线观看| 日韩福利片在线观看| 色八戒一区二区三区| www.xxxx国产| 亚洲天堂av网| 操喷在线视频| 91精品久久久久久综合乱菊 | 欧美日韩成人综合天天影院| 好吊视频一区二区三区| 中文字幕日韩高清| 黄色在线网站噜噜噜| 日本一欧美一欧美一亚洲视频| 国产一区二区三区免费观看在线 | 日韩精品首页| 精品久久一二三| 精品无码三级在线观看视频| 日韩av一二区| 亚洲一区二区三区四区在线免费观看| 国产午夜视频在线播放| 欧美一区二视频| 国产乱理伦片a级在线观看| 久久久亚洲精选| 成人视屏在线观看| 精品国产_亚洲人成在线| 男人天堂一区二区| 国产精品久久久一本精品 | 国产精品18久久久久久久久| 在线 丝袜 欧美 日韩 制服| 亚洲欧美一区二区三区极速播放 | 欧美一级久久久久久久大片| 日韩av成人| 亚洲精品美女在线| 欧美78videosex性欧美| 国产va免费精品高清在线| 精品一级视频| 黄频视频在线观看| 日韩—二三区免费观看av| 韩国三级与黑人| 中文字幕一区三区| 影音先锋国产在线| 亚洲第一级黄色片| 国产色婷婷在线| 国产高清在线一区| 一区二区电影在线观看| www.久久91| 久久青草欧美一区二区三区| 久久久久久欧美精品se一二三四| 91精品国产欧美一区二区成人| 在线日本中文字幕| 国产精品电影一区| re久久精品视频| 91n.com在线观看| 从欧美一区二区三区| 免费在线观看亚洲| 亚洲成人黄色网| 999在线视频| 国产精品永久免费在线| 91一区二区| www.日日操| 91尤物视频在线观看| 亚洲免费在线视频观看| 日韩精品福利在线| 91福利在线免费| 欧美日韩综合在线免费观看| 国产真人做爰视频免费| 五月天视频一区| 韩国av免费在线| 精品中文字幕在线| 台湾天天综合人成在线| 国产福利片一区二区| 日韩av网站在线观看| 青青草自拍偷拍| 欧美一区二区三区小说| av网站免费在线观看| 99c视频在线| 噜噜噜久久亚洲精品国产品小说| 成人免费无码大片a毛片| 亚洲精品国产a久久久久久| 日本xxxx人| 亚洲18私人小影院| 九一亚洲精品| 午夜精品久久久久久久99热影院| 国产丝袜欧美中文另类| 国产精品无码AV| 国产做受高潮69| 国产九一精品| √天堂资源在线| 亚洲国产成人porn| 亚洲 小说区 图片区 都市| 国产成一区二区| 综合一区二区三区| 亚洲综合中文网| 欧美午夜无遮挡| 成人在线视频亚洲| 国产精品久久二区| 欧美一区二区三区另类| 97人妻精品一区二区免费| 欧美乱妇20p| 91九色在线播放| 宅男一区二区三区| 91小视频免费观看| 国产美女www爽爽爽| 欧美激情亚洲激情| 区一区二视频| 日av中文字幕| 国产精品三级av| 熟妇人妻中文av无码| 国产精品v片在线观看不卡| 久久国产电影| 欧美 变态 另类 人妖|