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

使用Ptrace去攔截和仿真Linux系統(tǒng)調(diào)用

系統(tǒng) Linux
通過(guò)攔截功能,意味著跟蹤器可以篡改系統(tǒng)調(diào)用參數(shù),篡改系統(tǒng)調(diào)用的返回值,甚至阻塞某些系統(tǒng)調(diào)用。言外之意就是,一個(gè)跟蹤器本身完全可以提供系統(tǒng)調(diào)用服務(wù)。這是件非常有趣的事,因?yàn)檫@意味著一個(gè)跟蹤器可以仿真一個(gè)完整的外部操作系統(tǒng),而這些都是在沒(méi)有得到內(nèi)核任何幫助的情況下由 Ptrace 實(shí)現(xiàn)的。

[[241188]]

 ptrace(2)(“進(jìn)程跟蹤process trace”)系統(tǒng)調(diào)用通常都與調(diào)試有關(guān)。它是類 Unix 系統(tǒng)上通過(guò)原生調(diào)試器監(jiān)測(cè)被調(diào)試進(jìn)程的主要機(jī)制。它也是實(shí)現(xiàn) strace系統(tǒng)調(diào)用跟蹤system call trace)的常見(jiàn)方法。使用 Ptrace,跟蹤器可以暫停被跟蹤進(jìn)程,檢查和設(shè)置寄存器和內(nèi)存,監(jiān)視系統(tǒng)調(diào)用,甚至可以攔截intercepting系統(tǒng)調(diào)用。

通過(guò)攔截功能,意味著跟蹤器可以篡改系統(tǒng)調(diào)用參數(shù),篡改系統(tǒng)調(diào)用的返回值,甚至阻塞某些系統(tǒng)調(diào)用。言外之意就是,一個(gè)跟蹤器本身完全可以提供系統(tǒng)調(diào)用服務(wù)。這是件非常有趣的事,因?yàn)檫@意味著一個(gè)跟蹤器可以仿真一個(gè)完整的外部操作系統(tǒng),而這些都是在沒(méi)有得到內(nèi)核任何幫助的情況下由 Ptrace 實(shí)現(xiàn)的。

問(wèn)題是,在同一時(shí)間一個(gè)進(jìn)程只能被一個(gè)跟蹤器附著,因此在那個(gè)進(jìn)程的調(diào)試期間,不可能再使用諸如 GDB 這樣的工具去仿真一個(gè)外部操作系統(tǒng)。另外的問(wèn)題是,仿真系統(tǒng)調(diào)用的開(kāi)銷非常高。

在本文中,我們將專注于 x86-64 Linux 的 Ptrace,并將使用一些 Linux 專用的擴(kuò)展。同時(shí),在本文中,我們將忽略掉一些錯(cuò)誤檢查,但是完整的源代碼仍然會(huì)包含這些錯(cuò)誤檢查。

本文中的可直接運(yùn)行的示例代碼在這里:https://github.com/skeeto/ptrace-examples 

strace

在進(jìn)入到最有趣的部分之前,我們先從回顧 strace 的基本實(shí)現(xiàn)來(lái)開(kāi)始。它不是 DTrace,但 strace 仍然非常有用。

Ptrace 一直沒(méi)有被標(biāo)準(zhǔn)化。它的接口在不同的操作系統(tǒng)上非常類似,尤其是在核心功能方面,但是在不同的系統(tǒng)之間仍然存在細(xì)微的差別。ptrace(2) 的原型基本上應(yīng)該像下面這樣,但特定的類型可能有些差別。

  1. long ptrace(int request, pid_t pid, void *addr, void *data);

pid 是被跟蹤進(jìn)程的 ID。雖然同一個(gè)時(shí)間只有一個(gè)跟蹤器可以附著到該進(jìn)程上,但是一個(gè)跟蹤器可以附著跟蹤多個(gè)進(jìn)程。

request 字段選擇一個(gè)具體的 Ptrace 函數(shù),比如 ioctl(2) 接口。對(duì)于 strace,只需要兩個(gè):

  • PTRACE_TRACEME:這個(gè)進(jìn)程被它的父進(jìn)程跟蹤。
  • PTRACE_SYSCALL:繼續(xù)跟蹤,但是在下一下系統(tǒng)調(diào)用入口或出口時(shí)停止。
  • PTRACE_GETREGS:取得被跟蹤進(jìn)程的寄存器內(nèi)容副本。

另外兩個(gè)字段,addrdata,作為所選的 Ptrace 函數(shù)的一般參數(shù)。一般情況下,可以忽略一個(gè)或全部忽略,在那種情況下,傳遞零個(gè)參數(shù)。

strace 接口實(shí)質(zhì)上是前綴到另一個(gè)命令之前。

  1. $ strace [strace options] program [arguments]

最小化的 strace 不需要任何選項(xiàng),因此需要做的***件事情是 —— 假設(shè)它至少有一個(gè)參數(shù) —— 在 argv 尾部的 fork(2)exec(2) 被跟蹤進(jìn)程。但是在加載目標(biāo)程序之前,新的進(jìn)程將告知內(nèi)核,目標(biāo)程序?qū)⒈凰母高M(jìn)程繼續(xù)跟蹤。被跟蹤進(jìn)程將被這個(gè) Ptrace 系統(tǒng)調(diào)用暫停。

  1. pid_t pid = fork();
  2. switch (pid) {
  3. case -1: /* error */
  4. FATAL("%s", strerror(errno));
  5. case 0: /* child */
  6. ptrace(PTRACE_TRACEME, 0, 0, 0);
  7. execvp(argv[1], argv + 1);
  8. FATAL("%s", strerror(errno));
  9. }

父進(jìn)程使用 wait(2) 等待子進(jìn)程的 PTRACE_TRACEME,當(dāng) wait(2) 返回后,子進(jìn)程將被暫停。

  1. waitpid(pid, 0, 0);

在允許子進(jìn)程繼續(xù)運(yùn)行之前,我們告訴操作系統(tǒng),被跟蹤進(jìn)程和它的父進(jìn)程應(yīng)該一同被終止。一個(gè)真實(shí)的 strace 實(shí)現(xiàn)可能會(huì)設(shè)置其它的選擇,比如: PTRACE_O_TRACEFORK

  1. ptrace(PTRACE_SETOPTIONS, pid, 0, PTRACE_O_EXITKILL);

剩余部分就是一個(gè)簡(jiǎn)單的、無(wú)休止的循環(huán)了,每循環(huán)一次捕獲一個(gè)系統(tǒng)調(diào)用。循環(huán)體總共有四步:

  1. 等待進(jìn)程進(jìn)入下一個(gè)系統(tǒng)調(diào)用。
  2. 輸出系統(tǒng)調(diào)用的一個(gè)描述。
  3. 允許系統(tǒng)調(diào)用去運(yùn)行并等待返回。
  4. 輸出系統(tǒng)調(diào)用返回值。

這個(gè) PTRACE_SYSCALL 請(qǐng)求被用于等待下一個(gè)系統(tǒng)調(diào)用時(shí)開(kāi)始,和等待那個(gè)系統(tǒng)調(diào)用退出。和前面一樣,需要一個(gè) wait(2) 去等待被跟蹤進(jìn)程進(jìn)入期望的狀態(tài)。

  1. ptrace(PTRACE_SYSCALL, pid, 0, 0);
  2. waitpid(pid, 0, 0);

當(dāng) wait(2) 返回時(shí),進(jìn)行了系統(tǒng)調(diào)用的線程的寄存器中寫(xiě)入了該系統(tǒng)調(diào)用的系統(tǒng)調(diào)用號(hào)及其參數(shù)。盡管如此,操作系統(tǒng)仍然沒(méi)有為這個(gè)系統(tǒng)調(diào)用提供服務(wù)。這個(gè)細(xì)節(jié)對(duì)后續(xù)操作很重要。

接下來(lái)的一步是采集系統(tǒng)調(diào)用信息。這是各個(gè)系統(tǒng)架構(gòu)不同的地方。在 x86-64 上,系統(tǒng)調(diào)用號(hào)是在 rax 中傳遞的,而參數(shù)(最多 6 個(gè))是在 rdirsirdxr10r8r9 中傳遞的。這些寄存器是由另外的 Ptrace 調(diào)用讀取的,不過(guò)這里再也不需要 wait(2) 了,因?yàn)楸桓欉M(jìn)程的狀態(tài)再也不會(huì)發(fā)生變化了。

  1. struct user_regs_struct regs;
  2. ptrace(PTRACE_GETREGS, pid, 0, &regs);
  3. long syscall = regs.orig_rax;
  4.  
  5. fprintf(stderr, "%ld(%ld, %ld, %ld, %ld, %ld, %ld)",
  6. syscall,
  7. (long)regs.rdi, (long)regs.rsi, (long)regs.rdx,
  8. (long)regs.r10, (long)regs.r8, (long)regs.r9);

這里有一個(gè)警告。由于 內(nèi)核的內(nèi)部用途,系統(tǒng)調(diào)用號(hào)是保存在 orig_rax 中而不是 rax 中。而所有的其它系統(tǒng)調(diào)用參數(shù)都是非常簡(jiǎn)單明了的。

接下來(lái)是它的另一個(gè) PTRACE_SYSCALLwait(2),然后是另一個(gè) PTRACE_GETREGS 去獲取結(jié)果。結(jié)果保存在 rax 中。

  1. ptrace(PTRACE_GETREGS, pid, 0, &regs);
  2. fprintf(stderr, " = %ld\n", (long)regs.rax);

這個(gè)簡(jiǎn)單程序的輸出也是非常粗糙的。這里的系統(tǒng)調(diào)用都沒(méi)有符號(hào)名,并且所有的參數(shù)都是以數(shù)字形式輸出,甚至是一個(gè)指向緩沖區(qū)的指針也是如此。更完整的 strace 輸出將能知道哪個(gè)參數(shù)是指針,并使用 process_vm_readv(2) 從被跟蹤進(jìn)程中讀取哪些緩沖區(qū),以便正確輸出它們。

然而,這些僅僅是系統(tǒng)調(diào)用攔截的基礎(chǔ)工作。 

系統(tǒng)調(diào)用攔截

假設(shè)我們想使用 Ptrace 去實(shí)現(xiàn)如 OpenBSD 的 pledge(2) 這樣的功能,它是 一個(gè)進(jìn)程承諾pledge只使用一套受限的系統(tǒng)調(diào)用。初步想法是,許多程序一般都有一個(gè)初始化階段,這個(gè)階段它們都需要進(jìn)行許多的系統(tǒng)訪問(wèn)(比如,打開(kāi)文件、綁定套接字、等等)。初始化完成以后,它們進(jìn)行一個(gè)主循環(huán),在主循環(huán)中它們處理輸入,并且僅使用所需的、很少的一套系統(tǒng)調(diào)用。

在進(jìn)入主循環(huán)之前,一個(gè)進(jìn)程可以限制它自己只能運(yùn)行所需要的幾個(gè)操作。如果 程序有缺陷,能夠通過(guò)惡意的輸入去利用該缺陷,這個(gè)承諾可以有效地限制漏洞利用的實(shí)現(xiàn)。

使用與 strace 相同的模型,但不是輸出所有的系統(tǒng)調(diào)用,我們既能夠阻塞某些系統(tǒng)調(diào)用,也可以在它的行為異常時(shí)簡(jiǎn)單地終止被跟蹤進(jìn)程。終止它很容易:只需要在跟蹤器中調(diào)用 exit(2)。因此,它也可以被設(shè)置為去終止被跟蹤進(jìn)程。阻塞系統(tǒng)調(diào)用和允許子進(jìn)程繼續(xù)運(yùn)行都只是些雕蟲(chóng)小技而已。

最棘手的部分是當(dāng)系統(tǒng)調(diào)用啟動(dòng)后沒(méi)有辦法去中斷它。當(dāng)跟蹤器在入口從 wait(2) 中返回到系統(tǒng)調(diào)用時(shí),從一開(kāi)始停止一個(gè)系統(tǒng)調(diào)用的僅有方式是,終止被跟蹤進(jìn)程。

然而,我們不僅可以“搞亂”系統(tǒng)調(diào)用的參數(shù),也可以改變系統(tǒng)調(diào)用號(hào)本身,將它修改為一個(gè)不存在的系統(tǒng)調(diào)用。返回時(shí),在 errno通過(guò)正常的內(nèi)部信號(hào),我們就可以報(bào)告一個(gè)“友好的”錯(cuò)誤信息。

  1. for (;;) {
  2. /* Enter next system call */
  3. ptrace(PTRACE_SYSCALL, pid, 0, 0);
  4. waitpid(pid, 0, 0);
  5.  
  6. struct user_regs_struct regs;
  7. ptrace(PTRACE_GETREGS, pid, 0, &regs);
  8.  
  9. /* Is this system call permitted? */
  10. int blocked = 0;
  11. if (is_syscall_blocked(regs.orig_rax)) {
  12. blocked = 1;
  13. regs.orig_rax = -1; // set to invalid syscall
  14. ptrace(PTRACE_SETREGS, pid, 0, &regs);
  15. }
  16.  
  17. /* Run system call and stop on exit */
  18. ptrace(PTRACE_SYSCALL, pid, 0, 0);
  19. waitpid(pid, 0, 0);
  20.  
  21. if (blocked) {
  22. /* errno = EPERM */
  23. regs.rax = -EPERM; // Operation not permitted
  24. ptrace(PTRACE_SETREGS, pid, 0, &regs);
  25. }
  26. }

這個(gè)簡(jiǎn)單的示例只是檢查了系統(tǒng)調(diào)用是否違反白名單或黑名單。而它們?cè)谶@里并沒(méi)有差別,比如,允許文件以只讀而不是讀寫(xiě)方式打開(kāi)(open(2)),允許匿名內(nèi)存映射但不允許非匿名映射等等。但是這里仍然沒(méi)有辦法去動(dòng)態(tài)撤銷被跟蹤進(jìn)程的權(quán)限。

跟蹤器與被跟蹤進(jìn)程如何溝通?使用人為的系統(tǒng)調(diào)用! 

創(chuàng)建一個(gè)人為的系統(tǒng)調(diào)用

對(duì)于我的這個(gè)類似于 pledge 的系統(tǒng)調(diào)用 —— 我可以通過(guò)調(diào)用 xpledge() 將它與真實(shí)的系統(tǒng)調(diào)用區(qū)分開(kāi) —— 我設(shè)置 10000 作為它的系統(tǒng)調(diào)用號(hào),這是一個(gè)非常大的數(shù)字,真實(shí)的系統(tǒng)調(diào)用中從來(lái)不會(huì)用到它。

  1. #define SYS_xpledge 10000

為演示需要,我同時(shí)構(gòu)建了一個(gè)非常小的接口,這在實(shí)踐中并不是個(gè)好主意。它與 OpenBSD 的 pledge(2) 稍有一些相似之處,它使用了一個(gè) 字符串接口事實(shí)上,設(shè)計(jì)一個(gè)健壯且安全的權(quán)限集是非常復(fù)雜的,正如在 pledge(2) 的手冊(cè)頁(yè)面上所顯示的那樣。下面是對(duì)被跟蹤進(jìn)程的系統(tǒng)調(diào)用的完整接口實(shí)現(xiàn):

  1. #define _GNU_SOURCE
  2. #include <unistd.h>
  3.  
  4. #define XPLEDGE_RDWR (1 << 0)
  5. #define XPLEDGE_OPEN (1 << 1)
  6.  
  7. #define xpledge(arg) syscall(SYS_xpledge, arg)

如果給它傳遞個(gè)參數(shù) 0 ,僅允許一些基本的系統(tǒng)調(diào)用,包括那些用于去分配內(nèi)存的系統(tǒng)調(diào)用(比如 brk(2))。 PLEDGE_RDWR 位允許 各種 讀和寫(xiě)的系統(tǒng)調(diào)用(read(2)readv(2)pread(2)preadv(2) 等等)。PLEDGE_OPEN 位允許 open(2)

為防止發(fā)生提升權(quán)限的行為,pledge() 會(huì)攔截它自己 —— 但這樣也防止了權(quán)限撤銷,以后再細(xì)說(shuō)這方面內(nèi)容。

在 xpledge 跟蹤器中,我需要去檢查這個(gè)系統(tǒng)調(diào)用:

  1. /* Handle entrance */
  2. switch (regs.orig_rax) {
  3. case SYS_pledge:
  4. register_pledge(regs.rdi);
  5. break;
  6. }

操作系統(tǒng)將返回 ENOSYS(函數(shù)尚未實(shí)現(xiàn)),因?yàn)樗皇且粋€(gè)真實(shí)的系統(tǒng)調(diào)用。為此在退出時(shí)我用一個(gè) success(0) 去覆寫(xiě)它。

  1. /* Handle exit */
  2. switch (regs.orig_rax) {
  3. case SYS_pledge:
  4. ptrace(PTRACE_POKEUSER, pid, RAX * 8, 0);
  5. break;
  6. }

我寫(xiě)了一小段測(cè)試程序去打開(kāi) /dev/urandom,做一個(gè)讀操作,嘗試去承諾后,然后試著第二次打開(kāi) /dev/urandom,然后確認(rèn)它能夠讀取原始的 /dev/urandom 文件描述符。在沒(méi)有承諾跟蹤器的情況下運(yùn)行,輸出如下:

  1. $ ./example
  2. fread("/dev/urandom")[1] = 0xcd2508c7
  3. XPledging...
  4. XPledge failed: Function not implemented
  5. fread("/dev/urandom")[2] = 0x0be4a986
  6. fread("/dev/urandom")[1] = 0x03147604

做一個(gè)無(wú)效的系統(tǒng)調(diào)用并不會(huì)讓?xiě)?yīng)用程序崩潰。它只是失敗,這是一個(gè)很方便的返回方式。當(dāng)它在跟蹤器下運(yùn)行時(shí),它的輸出如下:

  1. >$ ./xpledge ./example
  2. fread("/dev/urandom")[1] = 0xb2ac39c4
  3. XPledging...
  4. fopen("/dev/urandom")[2]: Operation not permitted
  5. fread("/dev/urandom")[1] = 0x2e1bd1c4

這個(gè)承諾很成功,第二次的 fopen(3) 并沒(méi)有進(jìn)行,因?yàn)楦櫰饔靡粋€(gè) EPERM 阻塞了它。

可以將這種思路進(jìn)一步發(fā)揚(yáng)光大,比如,改變文件路徑或返回一個(gè)假的結(jié)果。一個(gè)跟蹤器可以很高效地 chroot 它的被跟蹤進(jìn)程,通過(guò)一個(gè)系統(tǒng)調(diào)用將任意路徑傳遞給 root 從而實(shí)現(xiàn) chroot 路徑。它甚至可以對(duì)用戶進(jìn)行欺騙,告訴用戶它以 root 運(yùn)行。事實(shí)上,這些就是 Fakeroot NG 程序所做的事情。 

仿真外部系統(tǒng)

假設(shè)你不滿足于僅攔截一些系統(tǒng)調(diào)用,而是想攔截全部系統(tǒng)調(diào)用。你就會(huì)有了 一個(gè)打算在其它操作系統(tǒng)上運(yùn)行的二進(jìn)制程序,無(wú)需系統(tǒng)調(diào)用,這個(gè)二進(jìn)制程序可以一直運(yùn)行。

使用我在前面所描述的這些內(nèi)容你就可以管理這一切。跟蹤器可以使用一個(gè)假冒的東西去代替系統(tǒng)調(diào)用號(hào),允許它失敗,以及為系統(tǒng)調(diào)用本身提供服務(wù)。但那樣做的效率很低。其實(shí)質(zhì)上是對(duì)每個(gè)系統(tǒng)調(diào)用做了三個(gè)上下文切換:一個(gè)是在入口上停止,一個(gè)是讓系統(tǒng)調(diào)用總是以失敗告終,還有一個(gè)是在系統(tǒng)調(diào)用退出時(shí)停止。

從 2005 年以后,對(duì)于這個(gè)技術(shù),PTrace 的 Linux 版本有更高效的操作:PTRACE_SYSEMU。PTrace 僅在每個(gè)系統(tǒng)調(diào)用發(fā)出時(shí)停止一次,在允許被跟蹤進(jìn)程繼續(xù)運(yùn)行之前,由跟蹤器為系統(tǒng)調(diào)用提供服務(wù)。

  1. for (;;) {
  2. ptrace(PTRACE_SYSEMU, pid, 0, 0);
  3. waitpid(pid, 0, 0);
  4.  
  5. struct user_regs_struct regs;
  6. ptrace(PTRACE_GETREGS, pid, 0, &regs);
  7.  
  8. switch (regs.orig_rax) {
  9. case OS_read:
  10. /* ... */
  11.  
  12. case OS_write:
  13. /* ... */
  14.  
  15. case OS_open:
  16. /* ... */
  17.  
  18. case OS_exit:
  19. /* ... */
  20.  
  21. /* ... and so on ... */
  22. }
  23. }

從任何具有(足夠)穩(wěn)定的系統(tǒng)調(diào)用 ABI(LCTT 譯注:應(yīng)用程序二進(jìn)制接口),在相同架構(gòu)的機(jī)器上運(yùn)行一個(gè)二進(jìn)制程序時(shí),你只需要 PTRACE_SYSEMU 跟蹤器、一個(gè)加載器(用于代替 exec(2)),和這個(gè)二進(jìn)制程序所需要(或僅運(yùn)行靜態(tài)的二進(jìn)制程序)的任何系統(tǒng)庫(kù)即可。

事實(shí)上,這聽(tīng)起來(lái)有點(diǎn)像一個(gè)有趣的周末項(xiàng)目。

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2022-01-08 20:04:20

攔截系統(tǒng)調(diào)用

2022-12-09 11:04:14

straceLinux

2021-12-04 22:05:02

Linux

2014-04-10 15:42:08

Linux系統(tǒng)內(nèi)存

2023-11-17 08:02:34

系統(tǒng)調(diào)用linux

2023-02-10 08:11:43

Linux系統(tǒng)調(diào)用

2025-10-28 04:25:00

2011-01-11 16:11:03

2022-09-19 08:45:52

Telnet系統(tǒng)Linux

2009-12-23 17:22:18

Linux系統(tǒng)rsyn

2016-12-05 09:26:34

2009-07-08 17:02:11

JDK實(shí)現(xiàn)調(diào)用攔截器

2011-03-11 10:11:08

平臺(tái)仿真Bochs

2022-01-06 07:03:30

Linux SleepWait

2010-02-26 14:13:51

Linux操作系統(tǒng)

2010-01-12 16:05:53

Linux Mono

2009-07-03 18:27:03

redhatlinux安全使用

2009-12-10 09:44:43

linuxioctl

2023-09-18 11:34:17

Linux系統(tǒng)

2009-12-07 09:31:23

Linux系統(tǒng)調(diào)用表地址
點(diǎn)贊
收藏

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

国产无码精品一区二区| 亚洲免费成人在线视频| 性xxxx视频播放免费| 久久久蜜桃一区二区人| 亚洲无线码在线一区观看| 黄色在线视频网| 青春草在线免费视频| av电影在线观看一区| 国产精品国语对白| a级黄色片免费看| 综合色就爱涩涩涩综合婷婷| 欧美日韩国产另类一区| 轻点好疼好大好爽视频| 国产区视频在线播放| 国产一区二区三区高清播放| 97香蕉久久夜色精品国产| 免费看污片的网站| 2020最新国产精品| 欧美三级韩国三级日本一级| 国产自产在线视频| 日本中文字幕在线视频| 99久久精品免费看国产免费软件| 国产精品久久久久久av福利软件 | 久久视频在线观看| 欧美高清www午色夜在线视频| 中文字幕在线乱| 国产在线91| 91影院在线观看| 亚洲一区亚洲二区亚洲三区| 波多野结衣一二区| 99精品免费| 欧美二区乱c黑人| 精品在线观看一区| 国产欧美日韩| 国产视频在线一区二区| 亚洲婷婷在线观看| 国产精品视频一区视频二区| 欧美色图第一页| 男人操女人免费软件| 国产在线拍揄自揄拍视频| 一区视频在线播放| 日韩欧美视频一区二区| 亚州男人的天堂| 成人高清视频免费观看| 91中文字幕在线| 亚洲视频在线观看免费视频| 视频精品一区二区| 欧美一级高清免费| 中文字幕黄色片| 亚洲一区二区三区四区五区午夜 | 最新黄色av网址| 五月综合久久| 精品无人国产偷自产在线| 日韩精品一区二区三区高清免费| 91精品入口| 亚洲精品一区二区三区蜜桃下载 | 成人av电影在线网| 成人欧美一区二区三区视频xxx| 97人妻精品一区二区三区动漫| 日本不卡视频一二三区| 国产精品久久久久久久久久小说 | 国产精品免费一区二区三区| www.久久色| 国产精品乡下勾搭老头1| 亚洲xxxxx电影| 精品国产av鲁一鲁一区| 国产成人免费高清| 国产精品美女诱惑| 色播色播色播色播色播在线| 91视频免费观看| 欧美动漫一区二区| 91在线视频| 亚洲品质自拍视频| 日本福利视频网站| 成年女人在线看片| 一本久久精品一区二区| 亚洲最大综合网| 日韩一区二区三免费高清在线观看| 欧美三级韩国三级日本一级| 日本成人xxx| 一区二区中文字幕在线观看| 亚洲国产精彩中文乱码av在线播放 | 亚洲欧美日韩国产| 国产精品免费久久久久久| 91丨porny丨在线中文 | 福利视频在线看| 国产精品久久久久影院| 50度灰在线观看| 九色porny丨首页入口在线| 色综合久久中文综合久久97| 国产一区二区在线免费播放| 日本久久伊人| 亚洲跨种族黑人xxx| 女人裸体性做爰全过| 欧美精品一区二区三区久久久竹菊| 国内外成人免费激情在线视频| 亚洲国产成人无码av在线| 久久精品国产精品亚洲精品| 99久久99| 国产三级视频在线| 夜色激情一区二区| 狠狠热免费视频| 亚洲大奶少妇| 在线观看精品国产视频| 青娱乐在线视频免费观看| 六月天综合网| 91久久大香伊蕉在人线| 毛片在线免费| 一二三区精品视频| 午夜激情福利在线| 狠狠久久伊人| 日韩中文字幕视频在线| 欧美激情黑白配| 国产麻豆精品theporn| 欧美精品免费观看二区| 永久免费网站在线| 欧美性猛交xxxxxx富婆| 中国极品少妇xxxx| 婷婷色综合网| 国产精品99久久久久久久久 | 国产一区视频导航| 欧美日韩一区二区三区在线视频| 亚洲精品一线| 欧美日本一区二区在线观看| 91精品人妻一区二区三区蜜桃欧美| 一区二区三区在线观看免费| 国产精品久久77777| 婷婷av一区二区三区| 亚洲私人影院在线观看| 国产理论在线播放| 无码日韩精品一区二区免费| 欧美极品美女视频网站在线观看免费| 日批视频免费观看| 91老司机福利 在线| 搞av.com| 91久久偷偷做嫩草影院电| xvideos成人免费中文版| 波多野结衣家庭主妇| 99久久99久久精品免费观看| 可以在线看黄的网站| 日韩成人免费av| 在线电影av不卡网址| 亚洲国产成人精品女人久久| av成人动漫在线观看| 久久男人资源站| 亚洲精品高潮| 欧美伦理91i| 国产成人麻豆精品午夜在线| 国产精品黄色在线观看| 国产三级三级看三级| 成人女性视频| 国产欧美婷婷中文| 午夜视频在线观看免费视频| 欧美午夜影院一区| 国产一区二区三区四区在线| 日本少妇一区二区| 日韩欧美亚洲区| 国产极品一区| y97精品国产97久久久久久| 亚洲图片欧美在线| 中文字幕视频一区| 中文字幕在线成人| 欧美综合一区二区| 欧美成人三级在线| 亚洲色欲色欲www| 成人一区二区视频| 欧美激情91| 亚洲精品国模| 麻豆精品在线| 日本99精品| 国产视频一区二| 日韩一级淫片| 国产精品久久久乱弄| 亚洲v日本v欧美v久久精品| 久久黄色片网站| 日韩免费特黄一二三区| 91精品久久久久久| aaa大片在线观看| 亚洲福利视频网| 国产精品久久久久久人| 国产精品久久久久久久久动漫 | 国产精品视频在线观看| 强开小嫩苞一区二区三区网站| 高清在线观看av| 欧美久久久久久久久久| 成熟的女同志hd| 成人国产精品视频| 啊啊啊国产视频| 综合精品久久| 精品久久久久久中文字幕动漫| 综合在线影院| 欧美成人午夜激情| 蜜桃视频在线入口www| 8x8x8国产精品| 日韩欧美a级片| 国产精品久久毛片| 丰满岳乱妇一区二区| 日韩制服丝袜av| 超碰人人爱人人| 国产成人精品一区二区免费看京| 91理论片午午论夜理片久久| 国产福利电影在线播放| 色妞色视频一区二区三区四区| 国产美女免费看| 色综合久久久久| 国产67194| 久久精品网站免费观看| 一区二区在线免费观看视频| 狂野欧美一区| 真人抽搐一进一出视频| 99久久www免费| 久久久com| 亚洲国产中文在线二区三区免| 日韩美女视频在线观看| 色a资源在线| 中文字幕亚洲欧美日韩在线不卡| 日本韩国免费观看| 日韩一卡二卡三卡| 在线观看不卡的av| 色狠狠桃花综合| 日本三级理论片| 亚洲视频一二三| 91狠狠综合久久久久久| 久久免费看少妇高潮| 国产一精品一aⅴ一免费| 久久99热99| 冲田杏梨av在线| 亚洲专区免费| 秋霞无码一区二区| 国产精品啊啊啊| 在线观看免费黄色片| 久久国产成人精品| 久久久水蜜桃| 国产调教精品| 国产v亚洲v天堂无码| 中文字幕成人| 成人中文字幕在线观看| 日韩精品一区二区三区av| 欧美洲成人男女午夜视频| av中文字幕在线观看第一页| 久久99国产精品自在自在app| 九义人在线观看完整免费版电视剧| 国产亚洲精品久久久久久| 美女毛片在线看| 亚洲天堂成人在线视频| 免费在线国产| 亚洲一区二区久久久| 蜜桃视频在线免费| 一本一本久久a久久精品综合小说| 三级国产在线观看| 日韩国产激情在线| 神马久久高清| 亚洲精品日韩久久久| 日本私人网站在线观看| 亚洲欧美日韩天堂| 理论视频在线| 一区二区亚洲欧洲国产日韩| av国产在线观看| 最近2019中文免费高清视频观看www99 | 国产精品福利视频| 欧美日韩直播| 奇米影视首页 狠狠色丁香婷婷久久综合| 亚欧日韩另类中文欧美| 欧美精品一区二区三区在线看午夜 | 在线精品视频一区二区三四| 免费看av在线| 在线观看91av| 亚洲精品国产精品国| 亚洲丁香婷深爱综合| 三级在线视频| 国产一区二区三区直播精品电影| 日韩伦理在线观看| 欧美超级乱淫片喷水| brazzers在线观看| 欧洲一区二区视频| 欧美高清你懂的| 99国产超薄丝袜足j在线观看| 免费看成人人体视频| 日本亚洲导航| 久久精品国内一区二区三区水蜜桃| 久久久天堂国产精品| 99国产精品自拍| 国产九九在线视频| 国产呦精品一区二区三区网站| 国产高潮失禁喷水爽到抽搐 | 男人操女人动态图| 国产精品国产三级国产a| 免看一级a毛片一片成人不卡| 欧美日韩亚洲成人| 一区二区日韩视频| 日韩av网站导航| 阿v免费在线观看| 久久97精品久久久久久久不卡 | 最新国产精品| 男人亚洲天堂网| 韩国v欧美v亚洲v日本v| 制服丝袜第二页| 中文字幕一区二区三区不卡在线| 久热这里只有精品在线| 在线免费观看日韩欧美| 成 人 免费 黄 色| 一区二区亚洲精品国产| 国产第一页在线| 国产精品夜间视频香蕉| 超碰成人在线免费| 亚洲一区三区视频在线观看| 一本一道久久综合狠狠老精东影业| 69久久久久久| 影音先锋中文字幕一区| 一区二区三区免费观看| 国产99视频在线观看| 男女无套免费视频网站动漫| 精品区在线观看| 免费欧美视频| 日韩欧美国产综合在线一区二区三区 | 国产午夜视频在线播放| 日本少妇精品亚洲第一区| 国产麻豆午夜三级精品| 久久久www成人免费精品| 中文字幕免费视频| 免费视频观看成人| 久久综合999| 日韩av免费一区| 欧美午夜激情影院| 精品视频一区二区三区四区五区| 精品一区二区免费在线观看| 亚洲精品日韩久久久| 国产91视频一区| 91免费视频播放| 97偷自拍亚洲综合二区| 天天免费综合色| 精品国产一区二区三区四区vr| 欧美黑人一级片| 国产精品成人**免费视频| 国产精品国产精品国产专区不片| 国产精品欧美亚洲777777| 长河落日免费高清观看| 红杏aⅴ成人免费视频| 欧美视频免费在线观看| 日韩av一区二区三区在线| 午夜精品久久久久久久99| 中文亚洲欧美| 日韩精品在线观看视频| 99免费视频观看| 成人黄色在线电影| 成人h动漫精品一区二区| 久久久久久亚洲精品中文字幕| 丰满人妻一区二区三区53视频| 久久黄色美女电影| 国产一区二区影院| 97人人模人人爽人人喊中文字| 青娱乐国产视频| 狼人精品一区二区三区在线| 一级日本不卡的影视| 久久久水蜜桃| 97超碰人人模人人人爽人人爱| 成人久久久久| 亚洲国产精品成人va在线观看| 国产毛片视频网站| 九色视频网站在线观看| 国产精品一区二区久久不卡| 午夜精品久久久久久99热| 老牛影视av老牛影视av| 91大神在线观看线路一区| 亚洲欧美一区二区三区国产精品| 老牛影视免费一区二区| 天天综合在线视频| 成人免费黄色大片| 91视频99| va视频在线观看| 香蕉视频国产在线观看| 国产一区二区在线视频| 777午夜精品福利在线观看| 国产极品美女高潮无套嗷嗷叫酒店| 欧美激情第二页| 欧美极品少妇xxxxⅹ喷水| 最近中文字幕免费观看| 亚洲国产精品小视频| 伊人久久综合一区二区| 日韩av高清在线播放| 精品影院一区二区久久久| 美女的奶胸大爽爽大片| 亚洲国产美女精品久久久久∴| 日本在线啊啊| 亚洲一区二区精品在线| 成人一区二区三区视频 | 国语对白永久免费| 尤物yw午夜国产精品视频| 欧美二区观看| 国产偷人视频免费| 国产欧美日韩视频一区二区| 国产成人久久精品77777综合| 69精品小视频| 久久国产成人午夜av影院宅| 午夜福利三级理论电影| 欧美在线综合视频| 黄网站在线观| 亚洲国产一区二区三区在线播| 国产乱人伦偷精品视频免下载| 国产 日韩 欧美 在线|