国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

SQL注入

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

SQL 注入是一種攻擊方式,在這種攻擊方式中,惡意代碼被插入到字符串中,然后將該字符串傳遞到 SQL Server 的實(shí)例以進(jìn)行分析和執(zhí)行。任何構(gòu)成 SQL 語(yǔ)句的過(guò)程都應(yīng)進(jìn)行注入漏洞檢查,因?yàn)?SQL Server 將執(zhí)行其接收到的所有語(yǔ)法有效的查詢。一個(gè)有經(jīng)驗(yàn)的、堅(jiān)定的攻擊者甚至可以操作參數(shù)化數(shù)據(jù)。

SQL 注入的主要形式包括直接將代碼插入到與 SQL 命令串聯(lián)在一起并使其得以執(zhí)行的用戶輸入變量。一種間接的攻擊會(huì)將惡意代碼注入要在表中存儲(chǔ)或作為元數(shù)據(jù)存儲(chǔ)的字符串。在存儲(chǔ)的字符串隨后串連到一個(gè)動(dòng)態(tài) SQL 命令中時(shí),將執(zhí)行該惡意代碼。

注入過(guò)程的工作方式是提前終止文本字符串,然后追加一個(gè)新的命令。由于插入的命令可能在執(zhí)行前追加其他字符串,因此攻擊者將用注釋標(biāo)記“--”來(lái)終止注入的字符串。執(zhí)行時(shí),此后的文本將被忽略。

以下腳本顯示了一個(gè)簡(jiǎn)單的 SQL 注入。此腳本通過(guò)串聯(lián)硬編碼字符串和用戶輸入的字符串而生成一個(gè) SQL 查詢:

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

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

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

但是,假定用戶輸入以下內(nèi)容:

Redmond'; drop table OrdersTable--

此時(shí),腳本將組成以下查詢:

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

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

只要注入的 SQL 代碼語(yǔ)法正確,便無(wú)法采用編程方式來(lái)檢測(cè)篡改。因此,必須驗(yàn)證所有用戶輸入,并仔細(xì)檢查在您所用的服務(wù)器中執(zhí)行構(gòu)造 SQL 命令的代碼。本主題中的以下各部分說(shuō)明了編寫代碼的最佳做法。

驗(yàn)證所有輸入

始終通過(guò)測(cè)試類型、長(zhǎng)度、格式和范圍來(lái)驗(yàn)證用戶輸入。實(shí)現(xiàn)對(duì)惡意輸入的預(yù)防時(shí),請(qǐng)注意應(yīng)用程序的體系結(jié)構(gòu)和部署方案。請(qǐng)注意,設(shè)計(jì)為在安全環(huán)境中運(yùn)行的程序可能會(huì)被復(fù)制到不安全的環(huán)境中。以下建議應(yīng)被視為最佳做法:

對(duì)應(yīng)用程序接收的數(shù)據(jù)不做任何有關(guān)大小、類型或內(nèi)容的假設(shè)。例如,您應(yīng)該進(jìn)行以下評(píng)估:

如果一個(gè)用戶在需要郵政編碼的位置無(wú)意中或惡意地輸入了一個(gè) 10 MB 的 MPEG 文件,應(yīng)用程序會(huì)做出什么反應(yīng)?

如果在文本字段中嵌入了一個(gè) DROP TABLE 語(yǔ)句,應(yīng)用程序會(huì)做出什么反應(yīng)?

測(cè)試輸入的大小和數(shù)據(jù)類型,強(qiáng)制執(zhí)行適當(dāng)?shù)南拗啤_@有助于防止有意造成的緩沖區(qū)溢出。

測(cè)試字符串變量的內(nèi)容,只接受所需的值。拒絕包含二進(jìn)制數(shù)據(jù)、轉(zhuǎn)義序列和注釋字符的輸入內(nèi)容。這有助于防止腳本注入,防止某些緩沖區(qū)溢出攻擊。

使用 XML 文檔時(shí),根據(jù)數(shù)據(jù)的架構(gòu)對(duì)輸入的所有數(shù)據(jù)進(jìn)行驗(yàn)證。

絕不直接使用用戶輸入內(nèi)容來(lái)生成 Transact-SQL 語(yǔ)句。

使用存儲(chǔ)過(guò)程來(lái)驗(yàn)證用戶輸入。

在多層環(huán)境中,所有數(shù)據(jù)都應(yīng)該在驗(yàn)證之后才允許進(jìn)入可信區(qū)域。未通過(guò)驗(yàn)證過(guò)程的數(shù)據(jù)應(yīng)被拒絕,并向前一層返回一個(gè)錯(cuò)誤。

實(shí)現(xiàn)多層驗(yàn)證。對(duì)無(wú)目的的惡意用戶采取的預(yù)防措施對(duì)堅(jiān)定的攻擊者可能無(wú)效。更好的做法是在用戶界面和所有跨信任邊界的后續(xù)點(diǎn)上驗(yàn)證輸入。

例如,在客戶端應(yīng)用程序中驗(yàn)證數(shù)據(jù)可以防止簡(jiǎn)單的腳本注入。但是,如果下一層認(rèn)為其輸入已通過(guò)驗(yàn)證,則任何可以繞過(guò)客戶端的惡意用戶就可以不受限制地訪問(wèn)系統(tǒng)。

絕不串聯(lián)未驗(yàn)證的用戶輸入。字符串串聯(lián)是腳本注入的主要輸入點(diǎn)。

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

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

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

使用類型安全的 SQL 參數(shù)
SQL Server 中的 Parameters 集合提供了類型檢查和長(zhǎng)度驗(yàn)證。如果使用 Parameters 集合,則輸入將被視為文字值而不是可執(zhí)行代碼。使用 Parameters 集合的另一個(gè)好處是可以強(qiáng)制執(zhí)行類型和長(zhǎng)度檢查。范圍以外的值將觸發(fā)異常。以下代碼段顯示了如何使用 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 參數(shù)被視為文字值而不是可執(zhí)行代碼。將對(duì)此值進(jìn)行類型和長(zhǎng)度檢查。如果 @au_id 值不符合指定的類型和長(zhǎng)度約束,則將引發(fā)異常。

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

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

如果使用存儲(chǔ)過(guò)程,則應(yīng)使用參數(shù)作為存儲(chǔ)過(guò)程的輸入。

在動(dòng)態(tài) SQL 中使用參數(shù)集合

如果不能使用存儲(chǔ)過(guò)程,您仍可使用參數(shù),如以下代碼示例所示:

  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; 

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

復(fù)制代碼
private string SafeSqlLiteral(string inputSQL)
{
  return inputSQL.Replace("'", "''");
}
LIKE 子句
請(qǐng)注意,如果要使用 LIKE 子句,還必須對(duì)通配符字符進(jìn)行轉(zhuǎn)義:

復(fù)制代碼
s = s.Replace("[", "[[]");
s = s.Replace("%", "[%]");
s = s.Replace("_", "[_]");
  在代碼中檢查 SQL 注入
應(yīng)檢查所有調(diào)用 EXECUTE、EXEC 或 sp_executesql 的代碼。可以使用類似如下的查詢來(lái)幫助您標(biāo)識(shí)包含這些語(yǔ)句的過(guò)程。此查詢檢查單詞 EXECUTE 或 EXEC 后是否存在 1 個(gè)、2 個(gè)、3 個(gè)或 4 個(gè)空格。

  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() 包裝參數(shù)

在選擇的每個(gè)存儲(chǔ)過(guò)程中,驗(yàn)證是否對(duì)動(dòng)態(tài) Transact-SQL 中使用的所有變量都進(jìn)行了正確處理。來(lái)自存儲(chǔ)過(guò)程的輸入?yún)?shù)的數(shù)據(jù)或從表中讀取的數(shù)據(jù)應(yīng)包裝在 QUOTENAME() 或 REPLACE() 中。請(qǐng)記住,傳遞給 QUOTENAME() 的 @variable 值的數(shù)據(jù)類型為 sysname,且最大長(zhǎng)度為 128 個(gè)字符。

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

使用此方法時(shí),可對(duì) SET 語(yǔ)句進(jìn)行如下修改:

--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''''

由數(shù)據(jù)截?cái)鄦⒂玫淖⑷?br /> 如果分配給變量的任何動(dòng)態(tài) Transact-SQL 比為該變量分配的緩沖區(qū)大,那么它將被截?cái)唷H绻粽吣軌蛲ㄟ^(guò)將意外長(zhǎng)度的字符串傳遞給存儲(chǔ)過(guò)程來(lái)強(qiáng)制執(zhí)行語(yǔ)句截?cái)啵瑒t該攻擊者可以操作該結(jié)果。例如,以下腳本創(chuàng)建的存儲(chǔ)過(guò)程容易受到由截?cái)鄦⒂玫淖⑷牍簟?/p>

  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 

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

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

因此,應(yīng)對(duì)命令變量使用較大的緩沖區(qū),或直接在 EXECUTE 語(yǔ)句內(nèi)執(zhí)行動(dòng)態(tài) Transact-SQL。

使用 QUOTENAME(@variable, '''') 和 REPLACE() 時(shí)的截?cái)?br /> 如果 QUOTENAME() 和 REPLACE() 返回的字符串超過(guò)了分配的空間,該字符串將被自動(dòng)截?cái)唷R韵率纠袆?chuàng)建的存儲(chǔ)過(guò)程顯示了可能出現(xiàn)的情況。

  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 

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

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

使用 REPLACE() 時(shí),可以通過(guò)超出分配的緩沖區(qū)空間來(lái)強(qiáng)迫字符串截?cái)唷R韵率纠袆?chuàng)建的存儲(chǔ)過(guò)程顯示了可能出現(xiàn)的情況。

 

  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() 一樣,可以通過(guò)聲明對(duì)所有情況都足夠大的臨時(shí)變量來(lái)避免由 REPLACE() 引起的字符串截?cái)唷?yīng)盡可能直接在動(dòng)態(tài) Transact-SQL 內(nèi)調(diào)用 QUOTENAME() 或 REPLACE()。或者,也可以按如下方式計(jì)算所需的緩沖區(qū)大小。對(duì)于 @outbuffer = QUOTENAME(@input),@outbuffer 的大小應(yīng)為 2*(len(@input)+1). 。使用 REPLACE() 和雙引號(hào)時(shí)(如上一示例),大小為 2*len(@input) 的緩沖區(qū)便已足夠。

以下計(jì)算涵蓋所有情況:

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, ']') 時(shí)的截?cái)?br /> 當(dāng) SQL Server 安全對(duì)象的名稱被傳遞給使用 QUOTENAME(@variable, ']') 形式的語(yǔ)句時(shí),可能發(fā)生截?cái)唷O旅娴氖纠@示了這種情況。

 

  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 

 

當(dāng)您串聯(lián) sysname 類型的值時(shí),應(yīng)使用足夠大的臨時(shí)變量來(lái)保存每個(gè)值的最多 128 個(gè)字符。應(yīng)盡可能直接在動(dòng)態(tài) Transact-SQL 內(nèi)調(diào)用 QUOTENAME()。或者,也可以按上一部分所述來(lái)計(jì)算所需的緩沖區(qū)大小。

原文地址

本文來(lái)源:微軟TechNet中文站

責(zé)任編輯:彭凡 來(lái)源: 微軟TechNet中文網(wǎng)
相關(guān)推薦

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

2011-10-19 10:47:56

2020-12-16 13:22:37

Web安全SQL工具

2010-09-27 11:17:31

2020-09-28 09:30:13

mybatis

2016-09-06 13:40:20

2010-10-22 15:18:18

SQL注入漏洞

2021-01-15 07:44:21

SQL注入攻擊黑客

2009-02-12 10:14:16

2020-08-30 14:34:42

Java語(yǔ)言安全編碼web安全

2020-12-08 08:14:11

SQL注入數(shù)據(jù)庫(kù)

2009-02-04 16:11:45

2015-08-26 11:12:11

數(shù)據(jù)溢出SQL注入SQL報(bào)錯(cuò)注入

2018-12-11 10:55:00

SQLFuzzWEB安全

2010-09-14 16:00:16

2014-11-04 13:43:10

2020-08-07 08:13:08

SQL攻擊模式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

日韩精品永久网址| 久久久国产欧美| av在线影院| 久久女同性恋中文字幕| 国产日本欧美在线观看| 免费在线中文字幕| 一区二区三区四区激情| 一区在线电影| 清纯唯美日韩| 中文字幕亚洲欧美日韩2019| 又黄又爽在线观看| www.亚洲免费av| 国产精品国产三级欧美二区 | 中文字幕欧美日韩一区二区三区 | 精品国模在线视频| bdsm精品捆绑chinese女| 肉色丝袜一区二区| 国产成+人+综合+亚洲欧美丁香花| 中文字幕伦理免费在线视频| 日韩一区在线播放| 小泽玛利亚av在线| 波多野结衣一区二区三区免费视频| 8x8x8国产精品| 日日噜噜夜夜狠狠视频| 国产福利视频一区二区三区| 成人欧美一区二区三区视频| 日本精品国产| 精品粉嫩超白一线天av| 美女视频免费观看网站在线| 国产精品一区二区黑丝| 精品视频一区二区| 日韩一区欧美| 国内自拍欧美激情| 欧美一级大片| 日韩免费高清视频| 免费一级毛片在线观看| 亚洲欧美一区二区久久| 黄色一级片播放| 激情国产一区二区| 欧美色精品在线视频| 最近最新中文字幕在线| 中文字幕免费不卡在线| 日本欧美视频在线观看| 日本不卡不码高清免费观看| 精品综合久久久| 成人在线免费小视频| 欧美一级黑人aaaaaaa做受| 666av成人影院在线观看| 欧美日韩一卡二卡三卡| 四虎成人免费在线| 成人欧美一区二区三区在线播放| 欧美日韩亚洲一| av电影天堂一区二区在线| 日韩国产精品毛片| 久久 天天综合| 天堂一区二区三区| 久久综合九色| 欧美少妇一区| 久久精品伊人| 青青成人在线| 亚洲综合三区| 欧美中文娱乐网| 91精品久久久久久久蜜月| 国产日韩在线看| 香蕉久久网站| 91视频最新| 国产主播一区| 国产精品88av| 亚洲色图35p| 四虎影视国产精品| 中文字幕亚洲欧美一区二区三区| 欧美性爽视频| 一区二区欧美激情| 女生影院久久| 国产精品福利网站| 免费看亚洲片| 成人在线免费高清视频| 久久久久久久久久久黄色| 成人性a激情免费视频| 欧美午夜精品久久久久久孕妇| 羞羞视频在线免费国产| 久久激情视频免费观看| 国产精伦一区二区三区| 99久久国产免费免费| 美腿丝袜亚洲一区| 婷婷视频在线播放| 黑人巨大精品欧美一区免费视频 | 伊人亚洲精品| 91亚洲一区精品| 日本一区二区视频在线| 男人天堂亚洲二区| 九色精品免费永久在线| 一本色道88久久加勒比精品| 亚欧美在线观看| 日韩av一区二区在线| 免费精品国产| 欧美牲交a欧美牲交aⅴ免费下载| 国产精品久久久久久久久久免费看| 日韩欧美精品一区二区三区| 国产一区二区三区高清视频| 亚洲第一福利视频在线| 欧美另类69xxxxx| www.4438全国最大| 日本成人黄色片| 亚洲一区二区欧美日韩| 成人一二三区| 99re在线视频| 一区二区三区四区五区视频 | 成人精品在线视频| 福利一区福利二区微拍刺激| 精品一区电影| 国产盗摄在线观看| 色噜噜一区二区| 91沈先生在线观看| 91精品国产99久久久久久| 最近2019中文字幕大全第二页| 91精品午夜视频| 午夜久久久久久| 一区二区三区中文字幕精品精品| 久久一夜天堂av一区二区三区| 国产在线精品不卡| 国产一区二区三区观看| 亚洲激情影院| 在线成人国产| 亚洲精选在线| 日韩欧美自拍| 成人在线免费视频观看| 久久av偷拍| 日韩精品一区二区三区中文| 欧美少妇精品| 国产成人精品视频免费看| 成人免费观看网址| 欧美成人免费小视频| 色综合久久88色综合天天| 波多野结衣亚洲一区| 欧美一级淫片| 狠狠一区二区三区| 精品99re| 91午夜精品| 日韩av资源网| 猛男gaygay欧美视频| 亚洲午夜剧场| 婷婷综合六月| 黄色成人免费网| 黄色aa久久| av电影在线地址| 在线免费av资源| 在线观看欧美日韩电影| 中文字幕影音在线| 三上悠亚国产精品一区二区三区| 9765激情中文在线| 99久久久国产精品免费调教网站| 香蕉视频亚洲一级| 欧美日韩国产v| 精品欧美视频| 久久91成人| 精品69视频一区二区三区Q| 欧美午夜视频| 国产精品77777| 久久精品免视看| 久久午夜羞羞影院免费观看| 91精品福利观看| 成人短视频在线| 免费一级特黄毛片| 国产精品久久久久久网站| 欧美一区二区三区婷婷月色| 蜜桃av一区二区三区电影| 伊人免费在线| 宅男一区二区三区| 久久精品aaaaaa毛片| 成人福利免费观看| 欧美精品一区二区三区在线四季 | 欧美精品一区二区蜜臀亚洲| 怡红院精品视频| 欧美特级www| 亚洲蜜臀av乱码久久精品| 日韩av片子| 综合久久伊人| 欧美成人日本| 亚洲综合久久久| 97香蕉超级碰碰久久免费的优势| 日本日本精品二区免费| 在线观看高清免费视频| 97品白浆高清久久久久久| 国产三级精品三级| 亚洲三级黄色在线观看| 亚洲欧美电影在线观看| 成人影院在线看| 综合久久精品| 黑人欧美xxxx| 91免费人成网站在线观看18| 四虎精品在线| 亚洲精品午夜av福利久久蜜桃| 9人人澡人人爽人人精品| 午夜精品成人在线视频| 欧美成人午夜激情| 欧美另类一区| 污污网站在线看| 女厕嘘嘘一区二区在线播放 | 亚洲男人7777|