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

SQL注入

數據庫 SQL Server
今天我們將探討的是SQL諸如問題,SQL注入是一種攻擊方式,在這種攻擊方式中,惡意代碼被插入到字符串中,然后將該字符串傳遞到 SQL Server的實例以進行分析和執行。

SQL 注入是一種攻擊方式,在這種攻擊方式中,惡意代碼被插入到字符串中,然后將該字符串傳遞到 SQL Server 的實例以進行分析和執行。任何構成 SQL 語句的過程都應進行注入漏洞檢查,因為 SQL Server 將執行其接收到的所有語法有效的查詢。一個有經驗的、堅定的攻擊者甚至可以操作參數化數據。

SQL 注入的主要形式包括直接將代碼插入到與 SQL 命令串聯在一起并使其得以執行的用戶輸入變量。一種間接的攻擊會將惡意代碼注入要在表中存儲或作為元數據存儲的字符串。在存儲的字符串隨后串連到一個動態 SQL 命令中時,將執行該惡意代碼。

注入過程的工作方式是提前終止文本字符串,然后追加一個新的命令。由于插入的命令可能在執行前追加其他字符串,因此攻擊者將用注釋標記“--”來終止注入的字符串。執行時,此后的文本將被忽略。

以下腳本顯示了一個簡單的 SQL 注入。此腳本通過串聯硬編碼字符串和用戶輸入的字符串而生成一個 SQL 查詢:

  1. var Shipcity;  
  2. ShipCity = Request.form ("ShipCity");  
  3. var sql = "select * from OrdersTable where ShipCity = '" + ShipCity + "'"

用戶將被提示輸入一個市縣名稱。如果用戶輸入 Redmond,則查詢將由與下面內容相似的腳本組成:

  1. SELECT * FROM OrdersTable WHERE ShipCity = 'Redmond' 

但是,假定用戶輸入以下內容:

Redmond'; drop table OrdersTable--

此時,腳本將組成以下查詢:

  1. SELECT * FROM OrdersTable WHERE ShipCity = 'Redmond';drop table OrdersTable--' 

分號 (;) 表示一個查詢的結束和另一個查詢的開始。雙連字符 (--) 指示當前行余下的部分是一個注釋,應該忽略。如果修改后的代碼語法正確,則服務器將執行該代碼。SQL Server 處理該語句時,SQL Server 將首先選擇 OrdersTable 中的所有記錄(其中 ShipCity 為 Redmond)。然后,SQL Server 將刪除 OrdersTable。

只要注入的 SQL 代碼語法正確,便無法采用編程方式來檢測篡改。因此,必須驗證所有用戶輸入,并仔細檢查在您所用的服務器中執行構造 SQL 命令的代碼。本主題中的以下各部分說明了編寫代碼的最佳做法。

驗證所有輸入

始終通過測試類型、長度、格式和范圍來驗證用戶輸入。實現對惡意輸入的預防時,請注意應用程序的體系結構和部署方案。請注意,設計為在安全環境中運行的程序可能會被復制到不安全的環境中。以下建議應被視為最佳做法:

對應用程序接收的數據不做任何有關大小、類型或內容的假設。例如,您應該進行以下評估:

如果一個用戶在需要郵政編碼的位置無意中或惡意地輸入了一個 10 MB 的 MPEG 文件,應用程序會做出什么反應?

如果在文本字段中嵌入了一個 DROP TABLE 語句,應用程序會做出什么反應?

測試輸入的大小和數據類型,強制執行適當的限制。這有助于防止有意造成的緩沖區溢出。

測試字符串變量的內容,只接受所需的值。拒絕包含二進制數據、轉義序列和注釋字符的輸入內容。這有助于防止腳本注入,防止某些緩沖區溢出攻擊。

使用 XML 文檔時,根據數據的架構對輸入的所有數據進行驗證。

絕不直接使用用戶輸入內容來生成 Transact-SQL 語句。

使用存儲過程來驗證用戶輸入。

在多層環境中,所有數據都應該在驗證之后才允許進入可信區域。未通過驗證過程的數據應被拒絕,并向前一層返回一個錯誤。

實現多層驗證。對無目的的惡意用戶采取的預防措施對堅定的攻擊者可能無效。更好的做法是在用戶界面和所有跨信任邊界的后續點上驗證輸入。

例如,在客戶端應用程序中驗證數據可以防止簡單的腳本注入。但是,如果下一層認為其輸入已通過驗證,則任何可以繞過客戶端的惡意用戶就可以不受限制地訪問系統。

絕不串聯未驗證的用戶輸入。字符串串聯是腳本注入的主要輸入點。

在可能據以構造文件名的字段中,不接受下列字符串:AUX、CLOCK$、COM1 到 COM8、CON、CONFIG$、LPT1 到 LPT8、NUL 以及 PRN。

如果可能,拒絕包含以下字符的輸入。

輸入字符
 在 Transact-SQL 中的含義
 
;
 查詢分隔符。
 
'
 字符數據字符串分隔符。
 
--
 注釋分隔符。
 
/* ... */
 注釋分隔符。服務器不對 /* 和 */ 之間的注釋進行處理。
 
xp_
 用于目錄擴展存儲過程的名稱的開頭,如 xp_cmdshell。
 

使用類型安全的 SQL 參數
SQL Server 中的 Parameters 集合提供了類型檢查和長度驗證。如果使用 Parameters 集合,則輸入將被視為文字值而不是可執行代碼。使用 Parameters 集合的另一個好處是可以強制執行類型和長度檢查。范圍以外的值將觸發異常。以下代碼段顯示了如何使用 Parameters 集合:

  1. SqlDataAdapter myCommand = new SqlDataAdapter("AuthorLogin", conn);  
  2. myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;  
  3. SqlParameter parm = myCommand.SelectCommand.Parameters.Add("@au_id",  
  4.      SqlDbType.VarChar, 11);  
  5. parm.Value = Login.Text; 

在此示例中,@au_id 參數被視為文字值而不是可執行代碼。將對此值進行類型和長度檢查。如果 @au_id 值不符合指定的類型和長度約束,則將引發異常。

在存儲過程中使用參數化輸入
存儲過程如果使用未篩選的輸入,則可能容易受 SQL Injection 攻擊。例如,以下代碼容易受到攻擊:

  1. SqlDataAdapter myCommand =   
  2. new SqlDataAdapter("LoginStoredProcedure '" +   
  3.                                Login.Text + "'", conn); 

如果使用存儲過程,則應使用參數作為存儲過程的輸入。

在動態 SQL 中使用參數集合

如果不能使用存儲過程,您仍可使用參數,如以下代碼示例所示:

  1. SqlDataAdapter myCommand = new SqlDataAdapter(  
  2. "SELECT au_lname, au_fname FROM Authors WHERE au_id = @au_id", conn);  
  3. SQLParameter parm = myCommand.SelectCommand.Parameters.Add("@au_id",   
  4.                         SqlDbType.VarChar, 11);  
  5. Parm.Value = Login.Text; 

篩選輸入
篩選輸入可以刪除轉義符,這也可能有助于防止 SQL 注入。但由于可引起問題的字符數量很大,因此這并不是一種可靠的防護方法。以下示例可搜索字符串分隔符。

復制代碼
private string SafeSqlLiteral(string inputSQL)
{
  return inputSQL.Replace("'", "''");
}
LIKE 子句
請注意,如果要使用 LIKE 子句,還必須對通配符字符進行轉義:

復制代碼
s = s.Replace("[", "[[]");
s = s.Replace("%", "[%]");
s = s.Replace("_", "[_]");
  在代碼中檢查 SQL 注入
應檢查所有調用 EXECUTE、EXEC 或 sp_executesql 的代碼??梢允褂妙愃迫缦碌牟樵儊韼椭鷺俗R包含這些語句的過程。此查詢檢查單詞 EXECUTE 或 EXEC 后是否存在 1 個、2 個、3 個或 4 個空格。

  1. SELECT object_Name(id) FROM syscomments  
  2. WHERE UPPER(text) LIKE '%EXECUTE (%' 
  3. OR UPPER(text) LIKE '%EXECUTE  (%' 
  4. OR UPPER(text) LIKE '%EXECUTE   (%' 
  5. OR UPPER(text) LIKE '%EXECUTE    (%' 
  6. OR UPPER(text) LIKE '%EXEC (%' 
  7. OR UPPER(text) LIKE '%EXEC  (%' 
  8. OR UPPER(text) LIKE '%EXEC   (%' 
  9. OR UPPER(text) LIKE '%EXEC    (%' 
  10. OR UPPER(text) LIKE '%SP_EXECUTESQL%' 

使用 QUOTENAME() 和 REPLACE() 包裝參數

在選擇的每個存儲過程中,驗證是否對動態 Transact-SQL 中使用的所有變量都進行了正確處理。來自存儲過程的輸入參數的數據或從表中讀取的數據應包裝在 QUOTENAME() 或 REPLACE() 中。請記住,傳遞給 QUOTENAME() 的 @variable 值的數據類型為 sysname,且最大長度為 128 個字符。

@variable
 建議的包裝
 
安全對象的名稱
 QUOTENAME(@variable)
 
字符串 ≤ 128 個字符
 QUOTENAME(@variable, '''')
 
字符串 > 128 個字符
 REPLACE(@variable,'''', '''''')
 

使用此方法時,可對 SET 語句進行如下修改:

--Before:

SET @temp = N'select * from authors where au_lname='''

+ @au_lname + N''''

--After:

SET @temp = N'select * from authors where au_lname='''

+ REPLACE(@au_lname,'''','''''') + N''''

由數據截斷啟用的注入
如果分配給變量的任何動態 Transact-SQL 比為該變量分配的緩沖區大,那么它將被截斷。如果攻擊者能夠通過將意外長度的字符串傳遞給存儲過程來強制執行語句截斷,則該攻擊者可以操作該結果。例如,以下腳本創建的存儲過程容易受到由截斷啟用的注入攻擊。

  1. CREATE PROCEDURE sp_MySetPassword  
  2. @loginname sysname,  
  3. @old sysname,  
  4. @new sysname  
  5. AS 
  6. -- Declare variable.  
  7. -- Note that the buffer here is only 200 characters long.  
  8. DECLARE @command varchar(200)  
  9. -- Construct the dynamic Transact-SQL.  
  10. -- In the following statement, we need a total of 154 characters  
  11. -- to set the password of 'sa'.  
  12. -- 26 for UPDATE statement, 16 for WHERE clause, 4 for 'sa', and 2 for  
  13. -- quotation marks surrounded by QUOTENAME(@loginname):  
  14. -- 200 – 26 – 16 – 4 – 2 = 154.  
  15. -- But because @new is declared as a sysname, this variable can only hold  
  16. -- 128 characters.  
  17. -- We can overcome this by passing some single quotation marks in @new.  
  18. SET @command= 'update Users set password=' + QUOTENAME(@new, '''') + ' where username=' + QUOTENAME(@loginname, '''') + ' AND password = ' + QUOTENAME(@old, '''')  
  19. -- Execute the command.  
  20. EXEC (@command)  
  21. GO 

通過向 128 個字符的緩沖區傳遞 154 個字符,攻擊者便可以在不知道舊密碼的情況下為 sa 設置新密碼。

EXEC sp_MySetPassword 'sa', 'dummy', '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012'''''''''''''''''''''''''''''''''''''''''''''''''''

因此,應對命令變量使用較大的緩沖區,或直接在 EXECUTE 語句內執行動態 Transact-SQL。

使用 QUOTENAME(@variable, '''') 和 REPLACE() 時的截斷
如果 QUOTENAME() 和 REPLACE() 返回的字符串超過了分配的空間,該字符串將被自動截斷。以下示例中創建的存儲過程顯示了可能出現的情況。

  1. CREATE PROCEDURE sp_MySetPassword  
  2. @loginname sysname,  
  3. @old sysname,  
  4. @new sysname  
  5. AS 
  6. -- Declare variables.  
  7. DECLARE @login sysname  
  8. DECLARE @newpassword sysname  
  9. DECLARE @oldpassword sysname  
  10. DECLARE @command varchar(2000)  
  11. -- In the following statements, the data stored in temp variables  
  12. -- will be truncated because the buffer size of @login, @oldpassword,  
  13. -- and @newpassword is only 128 characters, but QUOTENAME() can return  
  14. -- up to 258 characters.  
  15. SET @login = QUOTENAME(@loginname, '''')  
  16. SET @oldpassword = QUOTENAME(@old, '''')  
  17. SET @newpassword = QUOTENAME(@new, '''')  
  18. -- Construct the dynamic Transact-SQL.  
  19. -- If @new contains 128 characters, then @newpassword will be '123... n  
  20. -- where n is the 127th character.  
  21. -- Because the string returned by QUOTENAME() will be truncated,  
  22. -- it can be made to look like the following statement:  
  23. -- UPDATE Users SET password ='1234. . .[127] WHERE username=' -- other stuff here  
  24. SET @command = 'UPDATE Users set password = ' + @newpassword  
  25. ' where username =' + @login + ' AND password = ' + @oldpassword;  
  26. -- Execute the command.  
  27. EXEC (@command)  
  28. GO 

因此,以下語句將把所有用戶的密碼都設置為在前面的代碼中傳遞的值。

EXEC sp_MyProc '--', 'dummy', '12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678'

使用 REPLACE() 時,可以通過超出分配的緩沖區空間來強迫字符串截斷。以下示例中創建的存儲過程顯示了可能出現的情況。

 

  1. CREATE PROCEDURE sp_MySetPassword  
  2. @loginname sysname,  
  3. @old sysname,  
  4. @new sysname  
  5. AS 
  6. -- Declare variables.  
  7. DECLARE @login sysname  
  8. DECLARE @newpassword sysname  
  9. DECLARE @oldpassword sysname  
  10. DECLARE @command varchar(2000)  
  11. -- In the following statements, data will be truncated because  
  12. -- the buffers allocated for @login, @oldpassword and @newpassword  
  13. -- can hold only 128 characters, but QUOTENAME() can return  
  14. -- up to 258 characters.  
  15. SET @login = REPLACE(@loginname, '''''''''')  
  16. SET @oldpassword = REPLACE(@old, '''''''''')  
  17. SET @newpassword = REPLACE(@new, '''''''''')  
  18. -- Construct the dynamic Transact-SQL.  
  19. -- If @new contains 128 characters, @newpassword will be '123...n  
  20. -- where n is the 127th character.  
  21. -- Because the string returned by QUOTENAME() will be truncated, it  
  22. -- can be made to look like the following statement:  
  23.  
  24. -- UPDATE Users SET password='1234…[127] WHERE username=' -- other stuff here  
  25. SET @command= 'update Users set password = ''' + @newpassword + ''' where username=''' 
  26. + @login + ''' AND password = ''' + @oldpassword + '''';  
  27. -- Execute the command.  
  28. EXEC (@command)  
  29. GO 

 

與 QUOTENAME() 一樣,可以通過聲明對所有情況都足夠大的臨時變量來避免由 REPLACE() 引起的字符串截斷。應盡可能直接在動態 Transact-SQL 內調用 QUOTENAME() 或 REPLACE()。或者,也可以按如下方式計算所需的緩沖區大小。對于 @outbuffer = QUOTENAME(@input),@outbuffer 的大小應為 2*(len(@input)+1). 。使用 REPLACE() 和雙引號時(如上一示例),大小為 2*len(@input) 的緩沖區便已足夠。

以下計算涵蓋所有情況:

While len(@find_string) > 0, required buffer size =

round(len(@input)/len(@find_string),0) * len(@new_string)

+ (len(@input) % len(@find_string))

使用 QUOTENAME(@variable, ']') 時的截斷
當 SQL Server 安全對象的名稱被傳遞給使用 QUOTENAME(@variable, ']') 形式的語句時,可能發生截斷。下面的示例顯示了這種情況。

 

  1. CREATE PROCEDURE sp_MyProc  
  2. @schemaname sysname,  
  3. @tablename sysname,  
  4. AS 
  5. -- Declare a variable as sysname. The variable will be 128 characters.  
  6. -- But @objectname actually must allow for 2*258+1 characters.  
  7. DECLARE @objectname sysname  
  8. SET @objectname = QUOTENAME(@schemaname)+'.'+ QUOTENAME(@tablename)  
  9. -- Do some operations.  
  10. GO 

 

當您串聯 sysname 類型的值時,應使用足夠大的臨時變量來保存每個值的最多 128 個字符。應盡可能直接在動態 Transact-SQL 內調用 QUOTENAME()。或者,也可以按上一部分所述來計算所需的緩沖區大小。

原文地址

本文來源:微軟TechNet中文站

責任編輯:彭凡 來源: 微軟TechNet中文網
相關推薦

2017-08-10 10:23:59

2010-04-13 14:35:17

2020-10-26 07:04:29

SQL注入mysql

2013-05-02 15:09:22

2020-09-28 09:30:13

mybatis

2010-09-27 11:17:31

2011-10-19 10:47:56

2020-12-16 13:22:37

Web安全SQL工具

2020-08-07 08:13:08

SQL攻擊模式

2009-07-24 16:59:57

iBatis模糊查詢

2014-11-04 13:43:10

2009-11-02 13:47:09

2021-09-16 09:05:45

SQL注入漏洞網絡攻擊

2019-02-22 09:00:00

2009-02-04 16:51:48

2009-10-25 13:32:09

2016-09-06 13:40:20

2010-10-22 15:18:18

SQL注入漏洞

2015-08-26 11:12:11

數據溢出SQL注入SQL報錯注入

2009-02-12 10:14:16

點贊
收藏

51CTO技術棧公眾號

精品国产乱码久久久久久丨区2区| 最近2019中文字幕mv免费看 | 国产原厂视频在线观看| 国产精品资源网站| 久久人91精品久久久久久不卡| 在线 丝袜 欧美 日韩 制服| 久久日本片精品aaaaa国产| 亚洲综合色在线| 日韩av在线电影观看| aa视频在线免费观看| 一区二区三区短视频| 久久精品一区蜜桃臀影院| 91九色在线视频| 日韩av在线电影| 成人同人动漫免费观看| 亚洲第一黄色网| 久久久久久久高清| 中文字幕在线中文字幕在线中三区| 国产精品乱码人人做人人爱| 极品校花啪啪激情久久| 国产精品视频一区二区三区,| 亚洲日本成人| 免费av在线一区| 精品无码在线观看| 欧美亚视频在线中文字幕免费| 67194成人在线观看| 日韩精品无码一区二区三区免费| 在线观看wwwxxxx| 国产精品亲子伦对白| 精品伦理一区二区三区| 超碰福利在线观看| 精品一区二区av| 国产成人精品a视频一区www| 国产午夜视频在线| 亚洲午夜精品一区 二区 三区| 亚洲女人被黑人巨大进入| 极品白嫩的小少妇| 欧美一区一区| 91超碰这里只有精品国产| av无码精品一区二区三区| 人人草在线视频| 一区二区三区高清不卡| 综合视频免费看| 91在线播放网站| 国产性做久久久久久| 久久涩涩网站| 亚洲欧美日本在线观看| 成人高清在线视频| 古典武侠综合av第一页| 精品人妻一区二区三区浪潮在线| 韩日av一区二区| 成人天堂噜噜噜| 中文字幕在线观看免费| 日韩vs国产vs欧美| 国产精品久久久久影院日本| 亚洲国产无线乱码在线观看| 日本亚洲三级在线| 国产精品尤物福利片在线观看| 久久这里只有精品9| 麻豆精品一区二区三区| 国产精品日韩av| 一级α片免费看刺激高潮视频| 日本91福利区| 成人久久久久久久| 国产特级黄色片| 国产激情一区二区三区四区 | 中文字幕一区免费在线观看| 亚洲欧洲一区二区| 国产福利在线播放麻豆| 亚洲影院在线观看| 成人高清视频在线| 一本色道久久加勒比精品| 欧美国产日韩激情| 国产精品拍拍拍| 污影院在线观看| 亚洲一区在线视频观看| 日韩黄色片在线| gogo高清在线播放免费| 欧美日韩国产区| 无码少妇一区二区三区芒果| 欧美成人黄色| 欧美草草影院在线视频| aaaaaav| 国产欧美日韩免费观看| 日韩网站免费观看高清| 欧美人妻精品一区二区免费看| 亚洲国产激情| 国产精品人成电影在线观看| 亚洲国产精品久久久久久久 | 香蕉视频免费网站| 香蕉视频一区二区三区| 在线播放亚洲激情| 久久久精品一区二区涩爱| 免费在线欧美黄色| 91亚洲va在线va天堂va国| 日韩中文字幕观看| 中文字幕不卡的av| 国产精品www在线观看| 波多野结衣久久精品| 在线成人高清不卡| 黄色片视频免费观看| 日韩精品2区| 国模吧一区二区| 一区二区三区精| proumb性欧美在线观看| 日本三级福利片| 在线天堂新版最新版在线8| 欧美欧美欧美欧美首页| 中文乱码人妻一区二区三区视频| 精品freesex老太交| 欧美国产精品人人做人人爱| 日韩黄色一级视频| 成人精品视频一区二区三区| 亚洲欧洲一区二区| 亚洲精华液一区二区三区| 欧美一区二区三区系列电影| 亚洲天堂最新地址| 国产午夜精品一区二区三区欧美| 国产欧美亚洲精品| 风流老熟女一区二区三区| 国产精品三级电影| 欧美乱做爰xxxⅹ久久久| 欧美亚洲二区| 尤物yw午夜国产精品视频明星| 懂色av.com| 国产一区二区免费视频| 亚洲精品一区二区三区四区五区| 男人天堂视频在线观看| 精品福利视频一区二区三区| 一区视频免费观看| 九九视频精品免费| 亚洲精品无人区| 色综合一本到久久亚洲91| 国产丝袜精品第一页| 久久高清免费视频| 丁香婷婷综合色啪| 国产精品啪啪啪视频| 色999韩欧美国产综合俺来也| 亚洲欧洲在线视频| 99超碰在线观看| 91免费在线播放| 国产原创中文在线观看| 福利片在线一区二区| 欧美国产日韩二区| 国产黄色片免费| 亚洲欧美日韩国产综合在线| 一本一道久久a久久综合蜜桃| 成人影院天天5g天天爽无毒影院| 热久久免费国产视频| 三级黄视频在线观看| 五月婷婷综合在线| 香港三级日本三级| 免费亚洲一区| 日本一区高清不卡| 成人久久网站| 丝袜一区二区三区| 国产农村妇女毛片精品| 亚洲免费av高清| 亚洲av综合色区无码另类小说| 激情久久久久| 久久本道综合色狠狠五月| 亚洲欧美小说色综合小说一区| 精品夜色国产国偷在线| 亚洲欧美一二三区| 国产人成亚洲第一网站在线播放| 91福利国产成人精品播放| 日韩欧美1区| 91久久国产自产拍夜夜嗨| 欧美aaa免费| 日韩av在线精品| 最新中文字幕在线观看视频| 国产精品乱码久久久久久| 99精品视频免费版的特色功能| 亚洲国内精品| 欧洲高清一区二区| 国产原创一区| 久久久久久久久久久国产| 手机看片一区二区三区| 91久久奴性调教| 日韩高清dvd碟片| 丁香桃色午夜亚洲一区二区三区| 国产又黄又大又粗视频| 日韩欧美在线中字| 操一操视频一区| 日韩三区免费| 欧美精品在线免费观看| 天堂在线免费av| 88在线观看91蜜桃国自产| 亚洲视频免费播放| 中文在线免费一区三区高中清不卡| 中文字幕第10页| 久久成人国产| 日本一道在线观看| 国产探花一区| 国产v亚洲v天堂无码| 天天综合网天天| 欧美精品第一页在线播放| av影片在线看| 亚洲第一天堂无码专区| 一级爱爱免费视频| 欧美性xxxx18| 一区二区在线观看免费视频| 久久先锋影音av| 亚洲精品在线网址| 日韩电影免费在线| 国产人妻777人伦精品hd| 天天综合一区| 欧洲国产精品| 里番精品3d一二三区| 亚洲一区二区三区四区在线播放| 在线手机中文字幕| 久久欧美在线电影| 色的视频在线免费看| 亚洲欧美日韩成人| 欧美性猛交 xxxx| 91精品国产一区二区三区 | 丝袜美腿亚洲色图| 嫩草影院中文字幕| 91精品国偷自产在线电影| 日韩精品久久一区| 欧美精品momsxxx| 精品1区2区| 亚洲欧洲国产精品一区| 91精品久久久久久久久久久| 日韩影片中文字幕| 欧美做受高潮电影o| 欧美24videosex性欧美| 久久亚洲精品毛片| 欧美成人性生活视频| 亚洲日本成人女熟在线观看| 亚洲av片一区二区三区| 欧美精品一区二区三区蜜桃| 草草视频在线播放| 日韩精品一区二区三区视频播放| 91极品身材尤物theporn| 色一情一乱一乱一91av| 久草手机在线视频| 欧美日韩国产精品一区二区三区四区| 精品在线视频观看| 亚洲最大的成人av| 精品视频久久久久| 亚洲一卡二卡三卡四卡无卡久久| 青青草成人免费| 一区二区三区欧美日| 91九色丨porny丨极品女神| 亚洲欧洲一区二区在线播放| 26uuu成人网| 亚洲欧美日韩小说| 久久网一区二区| 五月天久久比比资源色| 日韩伦人妻无码| 午夜激情一区二区三区| 国产精品美女久久久久av爽| 狠狠久久亚洲欧美专区| 丰满少妇xoxoxo视频| 在线观看av不卡| 国产精品视频久久久久久| 91精品国产综合久久国产大片| www.久久久久久| 亚洲国产成人精品久久| 欧美日韩国产亚洲沙发| 亚洲一级黄色av| 黄色动漫在线| 欧美激情xxxxx| 日本韩国欧美| 国产日韩欧美在线看| 天堂av一区| 国产一区二区三区黄| 欧美**vk| 中文字幕欧美日韩一区二区三区 | 欧美精品日韩三级| 2021天堂中文幕一二区在线观| 欧美自拍视频在线观看| 国产极品一区| 99精彩视频| 美女毛片一区二区三区四区最新中文字幕亚洲| 欧美日韩精品免费看| 99久久.com| 超碰成人免费在线| 日本一不卡视频| 美国黄色一级视频| 国产婷婷色一区二区三区四区| 免费高清在线观看电视| 黄色一区二区在线观看| 伊人亚洲综合网| 精品动漫一区二区三区在线观看| 国产在线观看免费| 欧美成人精品在线| 亚洲欧美在线成人| 国产成人av一区二区三区| 欧美精品一区二区久久| www.好吊操| 久久激五月天综合精品| 97人妻精品一区二区三区免| 中文字幕一区在线观看视频| 国产成人精品一区二三区| 欧美日韩精品免费| 日韩欧美在线观看一区二区| 久久天天躁狠狠躁夜夜躁2014| 伊人久久视频| 99热最新在线| 欧洲三级视频| 黄色动漫网站入口| 国产精品18久久久久久vr| 99久久99久久精品免费看小说.| 亚洲电影在线播放| 国产一区二区视频免费观看 | 国产91aaa| 99精品在线免费在线观看| 热久久精品国产| 北岛玲一区二区三区四区| 黄色a级片在线观看| 色八戒一区二区三区| 黄色片网站免费在线观看| www高清在线视频日韩欧美| 二区三区不卡| 国产在线一区二| 国产中文一区| 亚洲18在线看污www麻豆| 国产欧美一区二区在线观看| 欧美日韩综合在线观看| 日韩色视频在线观看| 麻豆传媒在线完整视频| 国产精品久久久久99| 女厕嘘嘘一区二区在线播放| 六月丁香婷婷激情| av亚洲精华国产精华精| 久久亚洲av午夜福利精品一区| 欧美顶级少妇做爰| 色的视频在线免费看| 国产精品久久久久久久久影视 | 日韩不卡视频一区二区| 久热成人在线视频| 手机av在线不卡| 欧美午夜精品久久久久久超碰| 国产视频二区在线观看| 国产不卡在线观看| 亚洲丝袜美腿一区| 国模吧无码一区二区三区| 97超碰欧美中文字幕| 伊人国产在线观看| 亚洲国产成人久久综合一区| 黄色在线看片| 国产精品播放| 中文精品视频| 久久久无码人妻精品一区| 欧美性猛交xxxx乱大交| 欧美日本韩国一区二区| 国产精品久久久一区| 久久中文字幕av| 男人午夜视频在线观看| 亚洲激情五月婷婷| 亚洲精品一区二区三区区别| 国外成人性视频| 欧美xxxx在线| 美女网站免费观看视频| 欧美国产日本视频| 国产三区在线播放| 欧美精品videosex牲欧美| 私拍精品福利视频在线一区| 女性隐私黄www网站视频| 国产精品麻豆一区二区| 国产日产亚洲系列最新| 久久久久久久久国产| 四虎884aa成人精品最新| 免费涩涩18网站入口| 亚洲欧美偷拍卡通变态| 蜜桃av噜噜一区二区三区麻豆| 97高清免费视频| 国产欧美亚洲精品a| 伊人国产精品视频| 亚洲成av人片在线| 黄色片在线看| 91亚洲国产成人久久精品网站| 精品福利电影| 亚洲午夜久久久久久久国产| 欧美精品乱人伦久久久久久| xxxx在线视频| 亚洲欧美日韩在线综合| 国产91在线看| 久久久久久无码精品大片| 久青草国产97香蕉在线视频| 欧美精品中文| 8x8x成人免费视频| 精品福利在线观看| 日本视频在线观看| 好吊色欧美一区二区三区| 蜜桃久久久久久| 成年人免费看毛片| 精品国产美女在线| 台湾色综合娱乐中文网| 五月天国产视频| 色一情一伦一子一伦一区| 欧美人与性动交α欧美精品济南到| 久久久影院一区二区三区| 国产麻豆欧美日韩一区| 日韩一级在线视频| 欧美激情综合色| 欧美成人直播| 国产成人福利在线|