精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美日韩国产精品一区二区三区四区 | 久激情内射婷内射蜜桃| 不卡的日韩av| 久久久久国产一区二区| x99av成人免费| 老熟女高潮一区二区三区| 婷婷激情一区| 亚洲国产日日夜夜| 亚洲欧美久久久久一区二区三区| 国产精品自拍视频一区| 综合国产视频| 欧美大片一区二区| 中文字幕在线观看第三页| 成人短视频在线| 久久夜色精品国产噜噜av| 91免费精品国偷自产在线| 久久久久久久久久久久久av| 亚洲精彩视频| 伊人av综合网| 亚洲第九十七页| 日韩免费高清视频网站| 欧洲一区在线观看| 霍思燕三级露全乳照| 欧美a在线看| 久久久久亚洲蜜桃| 国产综合精品一区二区三区| 国产精品久久久久久69| 玖玖在线精品| 2024亚洲男人天堂| 麻豆一区二区三区精品视频| 999国产精品视频| 亚洲美女www午夜| 一区二区在线免费观看视频| 免费日韩成人| 色猫猫国产区一区二在线视频| 欧美色图亚洲自拍| 污视频在线免费| 国产黄色成人av| 成人久久18免费网站图片| 手机av免费观看| 噜噜爱69成人精品| 欧美又大又硬又粗bbbbb| 国产精品黄色网| 激情婷婷欧美| 欧美精品videossex性护士| 成年人av电影| 午夜久久福利| 欧美精品一二区| 强行糟蹋人妻hd中文| 99久久夜色精品国产亚洲96| 中文日韩在线视频| 99精品欧美一区二区| 国产成人久久| 在线视频中文亚洲| 极品尤物一区二区| 色婷婷热久久| 久久伊人精品视频| 欧美成人综合色| 国内成人在线| 久久亚洲精品一区| 我家有个日本女人| 亚洲电影成人| 日本欧美一二三区| 69视频免费看| 另类的小说在线视频另类成人小视频在线 | 黑人玩弄人妻一区二区三区| 日本一区二区三区播放| 精品欧美久久久| 制服下的诱惑暮生| 久久a爱视频| 亚洲精品视频免费| 国产黄色大片免费看| 久久福利影院| 欧美日韩第一视频| 日本一级淫片色费放| 亚洲永久在线| 成人a视频在线观看| 亚洲第一天堂影院| 91碰在线视频| 一区二区三区四区欧美日韩| 欧美巨大xxxx做受沙滩| 欧美日韩免费区域视频在线观看| 久久免费一级片| 超碰中文在线| 色综合天天综合网天天看片| 色婷婷一区二区三区av免费看| 亚洲校园激情春色| 欧美性生交片4| 亚洲国产综合av| 青青草久久爱| 久久偷看各类女兵18女厕嘘嘘| 丰满的亚洲女人毛茸茸| 中文精品久久| 78色国产精品| 国产精品无码免费播放| 国产成+人+日韩+欧美+亚洲| 欧美久久综合性欧美| www免费视频观看在线| 欧美日韩亚洲系列| 国产999免费视频| 亚洲精品小区久久久久久| www.久久久久久.com| xxxx.国产| 国产乱人伦偷精品视频不卡| 欧美精品一区二区三区在线看午夜| 天堂网www中文在线| 国产精品久久久久久久久动漫 | 牛牛国产精品| 欧美亚洲国产视频小说| 91国内精品久久久| 久久综合九色综合97婷婷| 亚洲av首页在线| 久久久人成影片一区二区三区在哪下载| 亚洲亚洲人成综合网络| 日本激情视频在线| 久久av国产紧身裤| 欧美黄色片视频| 中文字幕在线视频免费| 久久亚洲捆绑美女| 男女激情免费视频| 日本亚洲欧洲无免费码在线| 亚洲欧美日韩一区在线| 日韩欧美高清在线观看| 国产河南妇女毛片精品久久久| 91入口在线观看| 国产精品99999| 午夜精品福利一区二区三区蜜桃| 成年人视频在线免费| 综合视频一区| 美日韩精品免费观看视频| 在线免费观看视频网站| 国产欧美精品一区二区三区四区| 一区二区不卡在线观看| 欧美大电影免费观看| 日韩av影视在线| 久久久久久久久久久97| 国产精品69毛片高清亚洲| 亚洲AV无码成人精品一区| 国产极品一区| 综合136福利视频在线| 97人妻一区二区精品视频| 91麻豆成人久久精品二区三区| 亚洲欧洲在线一区| 电影久久久久久| 牛人盗摄一区二区三区视频| 国产裸体无遮挡| 久久久久久久综合色一本| 老太脱裤子让老头玩xxxxx| 亚洲精品黑牛一区二区三区| 精品中文字幕在线| 精品人妻一区二区三区麻豆91| 成人爽a毛片一区二区免费| 麻豆视频传媒入口| 日韩视频一区二区三区四区| 欧美日韩国产第一页| 亚洲av无码一区二区乱子伦| 亚洲美女少妇撒尿| 337p日本欧洲亚洲大胆张筱雨| 国产一区三区在线播放| 热门国产精品亚洲第一区在线| 96日本xxxxxⅹxxx17| 亚洲人成小说网站色在线| 色网站在线视频| 欧美在线视屏| 精品国产综合久久| 日韩免费电影| 久久精品一区二区| 亚洲91av视频| 午夜视频在线播放| 一本久久a久久精品亚洲| 久久久久亚洲av无码专区桃色| 国产精品一卡二卡三卡| 欧美日韩mp4| 午夜写真片福利电影网| 午夜欧美巨大性欧美巨大| 亚洲成人a级网| 亚洲久久在线观看| 久久久久九九视频| 色天使在线观看| 欧美日韩午夜| 久久99精品久久久久子伦| www.一区| 欧美激情视频在线| 国产鲁鲁视频在线观看免费| 7777精品伊人久久久大香线蕉的 | 一区二区三区在线免费观看视频| 国产精品538一区二区在线| 老司机av福利| 日本一区精品视频| 日本不卡免费高清视频| 精品麻豆一区二区三区| 国产午夜精品理论片a级探花| 久久精品国产亚洲AV无码男同| 蜜臀av在线播放一区二区三区| 狠狠躁夜夜躁人人爽超碰91| 又色又爽又黄18网站| 国产一区二区精品| 亚洲欧洲精品一区二区| 国产精品一区二区三区美女| 国产精品高潮在线| 成人超碰在线| www.亚洲人.com| 色鬼7777久久| 日韩视频免费观看高清完整版在线观看 | 日韩影院一区二区| 26uuu精品一区二区三区四区在线| 1024av视频| 亚洲字幕久久| 西游记1978| 亚洲性视频大全| www.久久久| 99久热在线精品视频观看| 日本精品久久中文字幕佐佐木| 天堂中文在线资| 日韩一区二区在线免费观看| 青青视频在线免费观看| 亚洲一区二区三区中文字幕| 日韩av毛片在线观看| 久久综合九色综合欧美亚洲| 男人添女人荫蒂国产| 黄网站免费久久| 亚洲综合欧美在线| 久久精品电影| 无码精品a∨在线观看中文| 欧美日一区二区三区在线观看国产免| 国产精品久久久久久久久久直播| 国产777精品精品热热热一区二区| 日韩经典一区二区三区| 性欧美18一19性猛交| 欧美日韩国产经典色站一区二区三区| 少妇影院在线观看| 中文字幕一区二区三| 一级片久久久久| 国产欧美一区二区精品久导航 | 福利视频一二区| 久久精品青草| www.亚洲一区二区| 国产精品x453.com| 中文字幕一区二区三区在线乱码| av日韩在线播放| 成人免费观看网站| 亚洲一区网址| 国产区一区二区三区| 成人高潮a毛片免费观看网站| 日韩av免费在线看| 在线观看v片| 欧洲成人性视频| 成人免费看黄| 国产91免费观看| 欧美日韩五码| 成人妇女免费播放久久久| 日韩av黄色| 91久久久精品| 日韩一级淫片| 国产综合18久久久久久| 婷婷综合一区| 亚洲v日韩v欧美v综合| 91日韩免费| 国内精品国产三级国产99| 韩国av一区| 乱妇乱女熟妇熟女网站| 爱爱精品视频| 图片区日韩欧美亚洲| 久久黄色免费网站| 欧美一区久久久| 久久久久日韩精品久久久男男 | 日本在线www| 久久九九免费视频| 在线观看中文字幕的网站| 欧美激情va永久在线播放| 91jq激情在线观看| 国产99在线|中文| 婷婷激情成人| 国产精品免费一区二区三区四区| 国产精品亚洲成在人线| 91麻豆国产语对白在线观看| 一区二区三区免费在线看| 欧美大香线蕉线伊人久久| 国产日韩欧美一区二区三区| 一区二区三区在线视频看| 国一区二区在线观看| 九九视频精品在线观看| 国产精品一二一区| 欧美xxxxx精品| 国产精品视频一二| 国产一级在线观看视频| 日本精品一区二区三区高清| 国产三级午夜理伦三级| 亚洲精品wwww| 麻豆av免费在线观看| 97香蕉超级碰碰久久免费软件| 密臀av在线| 国产成人一区二区在线| 精品国产18久久久久久二百| 久久久久久久有限公司| 性xxxx欧美老肥妇牲乱| 茄子视频成人免费观看| 国产精品中文字幕日韩精品 | 成人在线视频中文字幕| 日本一区二区在线视频| 国产综合视频| 做a视频在线观看| 91网站在线播放| 青青草原免费观看| 色爱区综合激月婷婷| 国产999精品久久久久久绿帽| 日本黄色播放器| 99视频+国产日韩欧美| 99精品999| 久久久久久久综合| 国产精彩视频在线| 91精品国产91综合久久蜜臀| 日本福利午夜视频在线| 色综合天天综合网国产成人网| 女同一区二区免费aⅴ| 国产精品一区久久| 天天躁日日躁成人字幕aⅴ| 成人高清dvd| 久久99热这里只有精品| 精品人妻一区二区三区蜜桃视频| 国产精品久久久久一区二区三区| а天堂中文在线资源| 精品国产1区2区| 肥臀熟女一区二区三区| 超碰日本道色综合久久综合| 欧美日韩视频免费看| 天堂精品一区二区三区| 三级不卡在线观看| 偷拍女澡堂一区二区三区| 亚洲3atv精品一区二区三区| 精品人妻久久久久一区二区三区| 日韩精品亚洲精品| 7777kkk亚洲综合欧美网站| 亚洲伊人久久综合| 自拍日韩欧美| 天天爽夜夜爽视频| 亚洲精品乱码久久久久久日本蜜臀| 久久精品视频久久| 日韩欧美国产三级电影视频| av免费在线观| 91一区二区三区| 国内精品美女在线观看| 人妻 丝袜美腿 中文字幕| 亚洲国产一区二区视频| 六月婷婷综合网| 久久久久久久激情视频| 91精品久久久久久综合五月天| 日韩欧美视频第二区| 日韩国产欧美视频| 国产午夜精品福利视频| 欧美日韩久久一区| 日本美女在线中文版| 91免费福利视频| 亚洲天堂黄色| 欧美熟妇精品黑人巨大一二三区| 亚洲少妇30p| 国产偷拍一区二区| 欧美激情视频一区二区三区不卡| 欧美啪啪网站| 中文字幕色呦呦| 成人精品小蝌蚪| 中日韩黄色大片| 在线观看欧美日韩| 国产精品高清一区二区| 国产精品国三级国产av| 99久久精品免费| 国模私拍一区二区| 久久人体大胆视频| eeuss国产一区二区三区四区| 婷婷视频在线播放| 福利电影一区二区| 久久久久久久久久久影院 | 黄色av一区二区三区| 国内精品视频一区| 精品国产一区二区三区噜噜噜 | 亚洲成色777777在线观看影院 | 韩国日本不卡在线| 国产精品免费不| 91免费视频污| 五月婷婷综合在线| av网站在线免费观看| 国产高清精品一区| 日本va欧美va精品| 久久免费视频99| 最近更新的2019中文字幕| aaa国产精品视频| 亚洲天堂av线| 亚洲国产精品久久久久婷婷884 | 黄色网在线视频| 久久午夜免费电影| 国产欧美日韩成人| 欧美专区日韩视频| 欧美xxx在线观看| 日本精品在线观看视频| 精品久久99ma| 狂野欧美性猛交xxxx| 国产69精品久久久久999小说| av综合在线播放| 一区二区日韩在线观看| 7777kkkk成人观看|