亚洲va男人天堂_亚洲国产美女搞黄色_国产又粗又爽视频_久久成人18免费网站_99久久久国产精品无码网爆_日韩av电影手机在线_另类图片第一页_在线观看亚洲网站_欧美一级黄色大片_gogogo高清在线观看免费完整版

 
 

您當(dāng)前的位置: 首頁(yè) > 電腦安全 > 電腦安全基礎(chǔ)知識(shí) 瀏覽
SQL 注入技術(shù)詳解
發(fā)布時(shí)間:2015-12-01    點(diǎn)擊率:次    來(lái)源:www.memoryoverflow.cn    作者:電腦技術(shù)學(xué)習(xí)網(wǎng)

1.1概述

1.2背景

1.3字符編碼

2.1綜合測(cè)試

2.2測(cè)試過(guò)程

2.3分析結(jié)果

3.1繞過(guò)驗(yàn)證

3.2 SELECT

3.2.1 直接利用 號(hào) 3.2.2 基于UNION 3.2.3 利用結(jié)構(gòu)錯(cuò)誤查詢表單 3.2.4 插入語(yǔ)句(圓擴(kuò)號(hào)) 3.2.5 利用LIKE語(yǔ)句查詢 3.2.6 "死胡同" 3.2.7 列的數(shù)目不匹配問(wèn)題 3.2.8 附加的WHERE引號(hào) 表和域的枚舉 3.2.10 單括號(hào)

3.3插入

3.4SQL服務(wù)器存儲(chǔ)過(guò)程利用

4.1數(shù)據(jù)處理

4.2安全的SQL網(wǎng)頁(yè)應(yīng)用程序編寫(xiě)

5.1MS SQL Server

5.2MS Access Server

5.3 Oracle 關(guān)于 SPI Dynamics,INc.

一 概述和介紹

1.網(wǎng)絡(luò)應(yīng)用和SQL注射

1.1概述

有些網(wǎng)絡(luò)數(shù)據(jù)庫(kù)沒(méi)有過(guò)濾客戶提供的數(shù)據(jù)中可能有害的字符,SQL注射就是利用插入有害字符進(jìn)行攻擊的技術(shù)。盡管非常容易防范,但因特網(wǎng)上仍然有驚人數(shù)量的存儲(chǔ)系統(tǒng)容易受到這種攻擊。這篇文章的目的是指導(dǎo)專業(yè)安全組織了解這種技術(shù),并告訴他們正確的,用來(lái)防范SQL注射的辦法,以及處理各種常見(jiàn)的,由于非法輸入引起的問(wèn)題.

1.2背景

在讀這篇文章之前,你應(yīng)該對(duì)數(shù)據(jù)庫(kù)如何工作,以及SQL如何被用來(lái)訪問(wèn)數(shù)據(jù)庫(kù)有一些基礎(chǔ)的了解。我建議您閱讀eXtropia.com的文章“Introduction to Databases for WebDevelopers”。 (網(wǎng)址:http://www.extropia.com/tutorials/sql/toc.html)

1.3字符編碼

在大多數(shù)的網(wǎng)絡(luò)瀏覽器中,標(biāo)點(diǎn)符號(hào)和許多其它符號(hào)在用于一個(gè)網(wǎng)絡(luò)請(qǐng)求前需要把URL編碼,以便被適當(dāng)?shù)鼐幾g(interpret)。在本文中的例子和截圖中我使用了固定的ASCII字符以保證最大的可讀性。然而,在實(shí)際應(yīng)用中,你需要在HTTP請(qǐng)求中用%25來(lái)代替百分號(hào)(%),用%2B來(lái)代替加號(hào)(+)等等。。。

2.易損性的測(cè)試(Testing for vulnerability)

2.1綜合測(cè)試

徹底地檢測(cè)一個(gè)網(wǎng)絡(luò)請(qǐng)求是否容易被SQL注射比一個(gè)可能的猜測(cè)(might guess)需要耗費(fèi)更多的精力。當(dāng)你把一個(gè)單引號(hào)放進(jìn)一個(gè)腳本的第一個(gè)參數(shù)值時(shí),服務(wù)器返回一個(gè)空白的網(wǎng)頁(yè),上面除了ODBC錯(cuò)誤以外什么都沒(méi)有.顯然這種情況直接反映出web程序存在漏洞,但通常都不是這樣的,如果你沒(méi)有注意細(xì)節(jié)的話,很容易忽略掉一個(gè)看上去完美,其實(shí)很脆弱的腳本。 服務(wù)器上每一個(gè)腳本中的每一個(gè)參數(shù)都應(yīng)該被檢測(cè)。開(kāi)發(fā)者和開(kāi)發(fā)組織之間可能很不一致。設(shè)計(jì)腳本A的程序員也許和腳本B的開(kāi)發(fā)毫無(wú)關(guān)系,所以,其中一個(gè)也許對(duì)SQL注射免疫,而另外一個(gè)可能不會(huì)。事實(shí)上,設(shè)計(jì)腳本A里的函數(shù)A的程序員也許和腳本A里的函數(shù)B的開(kāi)發(fā)毫無(wú)關(guān)系,所以腳本A里的一個(gè)參數(shù)也許對(duì)SQL注射是脆弱的,而另外一個(gè)參數(shù)卻不一定,即使整個(gè)網(wǎng)絡(luò)請(qǐng)求是由一個(gè)程序員來(lái)構(gòu)想,設(shè)計(jì),編寫(xiě)及測(cè)試的,在成千上萬(wàn)的腳本中的參數(shù)中,由于某種原因,設(shè)計(jì)者忘了檢驗(yàn)?zāi)硞€(gè)地方的數(shù)據(jù),所以仍有可能存在一個(gè)脆弱的參數(shù),而且那個(gè)地方是唯一的,你永遠(yuǎn)都不能確定是哪里,所以必須測(cè)試所有的東西。

2.2測(cè)試過(guò)程

用一個(gè)單引號(hào)和一個(gè)SQL關(guān)鍵字(比如“WHERE”)替代每一個(gè)參數(shù)的值(argument),每個(gè)參數(shù)都應(yīng)該被單獨(dú)地測(cè)試,不止那樣,當(dāng)你測(cè)試一個(gè)參數(shù)的時(shí)候,應(yīng)該保持其它的參數(shù)不變,并用有效的數(shù)據(jù)填充它們的值(argument),It can be tempting to just delete all of the stuff that youre not working with in order to make things look simpler, particularly with applications that have parameter lines that go into many thousands of characters. 當(dāng)你測(cè)試一個(gè)參數(shù)是否能被SQL注射的時(shí)候,如果忽略了其它參數(shù)或者給他們一個(gè)錯(cuò)誤的值(argument),網(wǎng)絡(luò)請(qǐng)求就有可能由于其它原因而出錯(cuò),這阻礙了你判斷SQL注射是否可行。比如,讓我們假設(shè)以下是一個(gè)有效的,純粹的(unaltered)參數(shù)行:

ContactName=Maria%20Anders&CompanyName=Alfreds%20Futterkiste

并且它返回一個(gè)ODBC錯(cuò)誤: ContactName=Maria%20Anders&CompanyName=%20OR

如果我們這樣檢測(cè): CompanyName=

可能只會(huì)給你一個(gè)錯(cuò)誤告訴你需要指定一個(gè)ContactName值。 這行: ContactName=BadContactName&CompanyName=

可能返回同樣的頁(yè)面,因?yàn)檎?qǐng)求根本沒(méi)有指定ContactName。或者,它可能返回你站點(diǎn)默認(rèn)的主頁(yè)?;蛘撸赡芩也坏街付ǖ腃ontactName,或者web程序認(rèn)為沒(méi)有必要看CompanyName,所以它甚至根本不把這個(gè)參數(shù)值認(rèn)為是一個(gè)SQL聲明,或者,它可能給你一些完全不同的東西,所以,當(dāng)檢測(cè)SQL注射的時(shí)候,記得總是用完整的參數(shù)行,并且除了你正在檢測(cè)的那個(gè)參數(shù)外,還要給其它所有的參數(shù)一個(gè)合法的值。

2.3分析結(jié)果

如果你得到一個(gè)數(shù)據(jù)庫(kù)服務(wù)器返回的某些錯(cuò)誤信息,那么SQL注射顯然是存在的.然而,數(shù)據(jù)庫(kù)錯(cuò)誤信息不一定總是明顯的(有時(shí)候編寫(xiě)程序的人可能做一些奇怪的事情),所以,你應(yīng)該順便看看每個(gè)可能的地方來(lái)確認(rèn)注射是否成功,首先你應(yīng)該從返回的頁(yè)面上的所有資源中找尋像"ODBC", "SQL Server", "Syntax"等的短語(yǔ),更多的信息可能含在HTTP的頭部,隱藏的輸入...。我曾見(jiàn)過(guò)某些存儲(chǔ)系統(tǒng)上的網(wǎng)絡(luò)請(qǐng)求返回的錯(cuò)誤信息中,在HTTP回復(fù)的body中完全沒(méi)有任何信息,但在頭部中卻有數(shù)據(jù)庫(kù)錯(cuò)誤信息。為了調(diào)試和QA的目的,很多網(wǎng)絡(luò)請(qǐng)求都內(nèi)嵌了這種特征,然而到最后發(fā)表前卻忘了把它們?nèi)ヌ幍艋蚴怪疅o(wú)效。 你不只要注意即時(shí)返回的頁(yè)面,同樣鏈接頁(yè)面也要看,在最近的一次pen-test中,我看到一個(gè)網(wǎng)絡(luò)請(qǐng)求被SQL注射攻擊后,返回了一個(gè)類錯(cuò)誤信息頁(yè)面,點(diǎn)擊錯(cuò)誤旁邊的停止標(biāo)志圖片,鏈接到了另外一個(gè)滿是SQL服務(wù)器錯(cuò)誤信息的頁(yè)面。 另一個(gè)應(yīng)該密切注意的是302頁(yè)面重定向,在你有機(jī)會(huì)注意到它之前,你可能就無(wú)奈的離開(kāi)了一個(gè)含有數(shù)據(jù)庫(kù)錯(cuò)誤信息的頁(yè)面. 請(qǐng)注意即使你真的得到了一個(gè)ODBC錯(cuò)誤信息回復(fù),SQL注射仍有可能成功,很多時(shí)候(Lots of the time)你得到一個(gè)properly formatted, seemingly類錯(cuò)誤消息頁(yè)面,告訴你"an internal server error" 或者 "problem processing your request." 有些網(wǎng)絡(luò)請(qǐng)求被設(shè)計(jì)成一旦出現(xiàn)任何的錯(cuò)誤,客戶都返回到站點(diǎn)的主頁(yè)面。如果你得到一個(gè)500錯(cuò)誤頁(yè)面,很有可能注射就出現(xiàn)了,很多站點(diǎn)都有一個(gè)默認(rèn)的500服務(wù)器內(nèi)部錯(cuò)誤頁(yè)面來(lái)說(shuō)明服務(wù)器正在維護(hù)中,或禮貌的讓用戶把他們的請(qǐng)求email給站點(diǎn)的維護(hù)人員。這就有可能用procedure techniques來(lái)利用這些站點(diǎn),這將在后面討論。

3.攻擊

3.1繞過(guò)驗(yàn)證

最簡(jiǎn)單的SQL注射技術(shù)是繞過(guò)基于表單的登陸.讓我們假設(shè)某個(gè)網(wǎng)絡(luò)請(qǐng)求的代碼如下: SQLQuery = "SELECT Username FROM Users WHERE Username = " & strUsername & " AND Password = " & strPassword & "" strAuthCheck = GetQueryResult(SQLQuery) If strAuthCheck = "" Then boolAuthenticated = False Else boolAuthenticated = True End If 當(dāng)一個(gè)用戶提交了一個(gè)用戶名和密碼后,查詢(query)將搜索Users表單來(lái)看是否其中有一行中所包含的用戶名和密碼與用戶提供的相同,如果找到了那么一行,則用戶名被儲(chǔ)存到變量strAuthCheck中,同時(shí)說(shuō)明該用戶應(yīng)該被鑒定,如果沒(méi)有找到那么一行,則strAuthCheck變量保持為空,同時(shí)該用戶不被鑒定。 如果strUsername和strPassword變量可以包含任何你要的字符,你可以修改當(dāng)前的SQL查詢結(jié)構(gòu),那樣即使你不知道有效的用戶名和密碼,你仍何以得到一個(gè)有效的name,它是如何實(shí)現(xiàn)的呢?讓我們假設(shè)用戶像下面那樣填充了一個(gè)登陸表單: Login: OR = Password: OR = 這將給SQLQuery以下值: SELECT Username FROM Users WHERE Username = OR = AND Password = OR = 請(qǐng)求并不把用戶提交的數(shù)據(jù)與現(xiàn)存的Users表單做比較,而是直接比較和,顯然它總是返回true,(注意nothing和null是有區(qū)別的)由于WHERE語(yǔ)句中的所有驗(yàn)證條件都符合了,用戶名將使用表單中搜索到的第一行中的那個(gè),接著用戶名將被傳遞給變量strAuthCheck,這樣我們的效力就得以保證。使用single result cycling技術(shù),也有可能使用另外一行的數(shù)據(jù),這將在以后討論。

3.2 SELECT 對(duì)于另一些情況而言,你必須根據(jù)查詢那些有缺陷的web程序返回的結(jié)果,來(lái)判斷和調(diào)整你提交的SQL查詢字符串,以便搞定服務(wù)器.

3.2.1 直接利用單引號(hào) 你將面臨的第一個(gè)錯(cuò)誤是語(yǔ)句結(jié)構(gòu)錯(cuò)誤.一個(gè)結(jié)構(gòu)錯(cuò)誤表明SQL查詢的語(yǔ)句結(jié)構(gòu)存在缺陷.首先你應(yīng)該明白,在沒(méi)有編碼引號(hào)的情況下, 插入腳本攻擊是否可以成功.

直接SQL注射的時(shí)候,無(wú)論你提交什么語(yǔ)句都會(huì)被不加任何改變地應(yīng)用于SQL查詢中.試著提交參數(shù)的時(shí)候,先輸入合法的值,然后在其后添加一個(gè)空格和一個(gè)OR,如果服務(wù)器產(chǎn)生了錯(cuò)誤,那么直接SQL注射是可能的.提交的值可以是任何WHERE子句中用到的值,例如: SQLString = "SELECT FirstName, LastName, Title FROM Employees WHERE Employee = " & intEmployeeID 或者是緊跟于一個(gè)SQL關(guān)鍵字,例如表名或者表里的欄目名,比如 SQLString = "SELECT FirstName, LastName, Title FROM Employees ORDER BY " & strColumn 所有其他的例子都是引號(hào)注射,在一個(gè)存在引號(hào)插入漏洞的程序里面, 任何一個(gè)你提交的參數(shù),系統(tǒng)都會(huì)在前面和后面添加一個(gè)引號(hào),就像這樣: SQLString = "SELECT FirstName, LastName, Title FROM Employees WHERE EmployeeID = " & strCity & "" 為了能(break out)打破這引號(hào),并偽造一個(gè)正確的查詢,在你的SQL注射字符串中的SQL關(guān)鍵字之前必須包含一個(gè)單引號(hào),而且在WHERE子句的后面也需要加上一個(gè)單引號(hào).現(xiàn)在我們來(lái)談?wù)?quot;欺騙"的問(wèn)題.是的,SQL SERVER會(huì)忽視在";--"后面的任何東西,但是只有MS的SQL SERVER會(huì)這樣做.我們最好學(xué)習(xí)如何處理這個(gè)問(wèn)題,這樣我們?cè)诿鎸?duì)Oracle,DB/2,MySQL 和他種類的數(shù)據(jù)庫(kù)服務(wù)器的時(shí)候就知道怎么做了. <<<<<<<<<<<<<<圖1>>>>>>>>><<<<<<<<<<圖2>>>>>>>>>>>>>>>>>>>>>>>>>>

SELECT查詢被用于從數(shù)據(jù)庫(kù)中獲取信息.大多數(shù)的web應(yīng)用程序通過(guò)SELECT向數(shù)據(jù)庫(kù)獲取信息候再動(dòng)態(tài)地在頁(yè)面上顯示出來(lái).通常,數(shù)據(jù)庫(kù)查詢這部分你可以自己偽造,他將成為WHERE子句的一部分.我們可以通過(guò)插入U(xiǎn)NION SELECT來(lái)繞過(guò)web程序允許我們查詢的數(shù)據(jù),從而得到其它的數(shù)據(jù).聯(lián)合查詢(指UNION SELECT)允許在一條語(yǔ)句中使用多個(gè)SELECT查詢,看上去就像這樣: SELECT CompanyName FROM Shippers WHERE 1 = 1 UNION ALL SELECT CompanyName FROM Customers WHERE 1 = 1 它返回的結(jié)果中包含了第一個(gè)查詢和第二個(gè)查詢的結(jié)果,"ALL SELECT"這里的ALL是必須的,這樣可以逃過(guò)SELECT DISTINCT語(yǔ)句的限制并且不會(huì)妨礙別的(??),所以最好是使用它.你必須確認(rèn)第一個(gè)查詢,即web應(yīng)用程序編寫(xiě)者希望執(zhí)行的那個(gè)被執(zhí)行,不返回任何記錄.這并不難.舉個(gè)例子,有這么一個(gè)表達(dá)式: SQLString = "SELECT FirstName, LastName, Title FROM Employees WHERE City = " & strCity & "" 我們構(gòu)造如下的插入串: UNION ALL SELECT OtherField FROM OtherTable WHERE = 這將導(dǎo)致如下的SQL查詢語(yǔ)句被提交給SQL SERVER: SELECT FirstName, LastName, Title FROM Employees WHERE City = UNION ALL SELECT OtherField FROM OtherTable WHERE = 讓我們看看會(huì)發(fā)生什么:數(shù)據(jù)庫(kù)搜索Employees表,查找City被設(shè)置為NULL的那一行,由于它找不到哪一行city是NULL,所以它不會(huì)返回任何記錄,只有我們inject的查詢才會(huì)返回記錄.在一些情況下,使用NULL不能成功,因?yàn)楸砝锏膮s存在 有NULL的項(xiàng).在這種情況下,你要做的就是構(gòu)造一個(gè)表中不存在的值,你只要輸入一些不普通的值...最好是對(duì)照那些正常的值,當(dāng)數(shù)據(jù)庫(kù)需要一個(gè)自然數(shù)時(shí),0或者負(fù)數(shù)都工作得很好,對(duì)于一個(gè)文本參數(shù),簡(jiǎn)單的用"NoSuchRecord","NotInTable"或更常見(jiàn)的"sjdajdhajsh",只要它不返回記錄就好. 如果所有的web應(yīng)用程序使用的SQL查詢都像上面這些那么簡(jiǎn)單就好了,可惜這不可能: ].按照各個(gè)編程者習(xí)慣和查詢表達(dá)式編寫(xiě)方式的不同,你SQL注射時(shí)可能會(huì)遇到各種困難.

3.2.3 利用結(jié)構(gòu)錯(cuò)誤查詢表單 一些數(shù)據(jù)庫(kù)服務(wù)器返回的錯(cuò)誤信息中包含了一部分格式錯(cuò)誤消息,你可以通過(guò)分析這些片斷來(lái)構(gòu)造你提交的INJECTION語(yǔ)句,有些你提交的字符串會(huì)返回有用的信息,有的卻不會(huì),這主要是以來(lái)于web應(yīng)用程序中SQL查詢語(yǔ)句是如何設(shè)計(jì)的.下面這些是我推薦你嘗試的字符串: BadValue BadValue OR OR ; 9,9,9 通常這些字符串中的一些會(huì)返回相同的信息,或者根本不返回信息.但是有例子告訴我們,可能有的信息只有用他們中的一個(gè)才能得到,所以你最好提交字符串的時(shí)候,把他們都試一遍. <<<<<<圖3.2.4>>>>>> (2張圖)

3.2.4 圓擴(kuò)弧 如果有缺陷的查詢語(yǔ)句中包含圓擴(kuò)弧( (就像下面將會(huì)舉的例子那樣),或者返回的錯(cuò)誤信息里顯式地提醒你缺了(號(hào)(Oracle這么做),那么你應(yīng)該在你提交的SQL注射字符串中加入(號(hào).通常在WHERE子句后面加一個(gè)括號(hào),但是在一些情況下,你需要加2個(gè)或者更多的括號(hào). 下面是parenthesis.asp的源碼: mySQL="SELECT LastName, FirstName, Title, Notes, Extension FROM Employees WHERE (City = " & strCity & ")" 我們插入如下的值: ") UNION SELECT OtherField FROM OtherTable WHERE (=" 那么傳送給SQL SERVER的語(yǔ)句就變成了這樣: SELECT LastName, FirstName, Title, Notes, Extension FROM Employees WHERE (City = ) UNION SELECT OtherField From OtherTable WHERE (=)

3.2.5 LIKE語(yǔ)句查詢 <<<<<<<<<圖2張>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 另一個(gè)大的災(zāi)難是陷入一個(gè)LIKE子句的陷阱.(Seeing the LIKE keyword or percent signs cited in an error message are indications of this situation.)大多數(shù)的web搜索程序使用LIKE子句來(lái)查詢數(shù)據(jù)庫(kù),比如下面這個(gè): SQLString = "SELECT FirstName, LastName, Title FROM Employees WHERE LastName LIKE %" & strLastNameSearch & "%" 這里面的%是通配符,在這個(gè)例子里,WHERE子句會(huì)返回TRUE,只要LASTNAME里有字符串含有strLastNameSearch.為了阻止SQL SERVER返回預(yù)計(jì)中的記錄,你構(gòu)造的SQL語(yǔ)句里必須含有LASTNAME里沒(méi)有的字符串.web搜索程序搜索的字符串來(lái)自于用戶的輸入.通常有一個(gè)和一個(gè)%在輸入的字符串之前,因此我們構(gòu)造字符串時(shí),需要在WHERE子句中匹配它們.如果你提交了NULL作為搜索字符串,那么LIKE的參數(shù)會(huì)變成"%%",這是一個(gè)全匹配,會(huì)返回所有的記錄.

3.2.6 “死胡同” 大部分的時(shí)候sql injection都要伴隨著大量失敗的實(shí)踐,如果你發(fā)現(xiàn)你無(wú)論如何都不能插入相關(guān)的語(yǔ)句,并且無(wú)論你怎么做都不對(duì),這個(gè)時(shí)候你就要判斷自己是否掉進(jìn)了一個(gè)死胡同,很多時(shí)候遇到這種情況你很可能是在一個(gè)多重嵌套的WHERE和SELECT子句的語(yǔ)句中,或者一些更加復(fù)雜的多重嵌套,連使用“;--”都沒(méi)有用,所以自己要小心和避免在這種地方停留。

3.2.7 列的數(shù)目不匹配問(wèn)題 如圖所示,我們可以從幾次錯(cuò)誤中得到很多有用的信息,并且加以調(diào)整自己的請(qǐng)求語(yǔ)句,這種信息多了,那就意味著我們離成功不遠(yuǎn)了。在猜列名時(shí),如圖所示,我們提交語(yǔ)句后會(huì)碰到以下錯(cuò)誤“在UNION語(yǔ)句中的所有查詢都必須在目標(biāo)列表中具有相同數(shù)目的表達(dá)式”,這就是說(shuō)你需要找出或者說(shuō)是探測(cè)出在合法的請(qǐng)求中有多少個(gè)列。 這里我解釋一下,UNION 語(yǔ)句是用來(lái)將兩個(gè)不同的查詢結(jié)果集相加得到一個(gè)結(jié)果集,UNION使用的唯一要求是兩個(gè)查詢的信息(你的查詢語(yǔ)句)必須有相同的列數(shù)和相同的數(shù)據(jù)類型

我舉個(gè)例子,web程序中有如下語(yǔ)句: SQLstring= "SELECT FirstName,LastName,EmployeeID FROM Employees WHERE City ="&strCity"" 合法的SELECT語(yǔ)句和我們注入的UNION SELECT語(yǔ)句在WHERE子句中都要有相同的列。就上面的語(yǔ)句來(lái)說(shuō),如果我要加入U(xiǎn)NION 語(yǔ)句的話,前后兩者都要有3個(gè)列。并且他們列的數(shù)據(jù)類型也要相互匹配才可以。(見(jiàn)圖)如果FirstName這個(gè)值是字符串類型的,那么在你注入的語(yǔ)句中所對(duì)應(yīng)的值也應(yīng)該是字符串類型的。一些數(shù)據(jù)庫(kù),如ORACLE,是對(duì)類型檢查非常嚴(yán)格的。其他的數(shù)據(jù)庫(kù)相對(duì)要好一些,允許你輸入任何數(shù)據(jù)類型并且它會(huì)自動(dòng)的把你輸入錯(cuò)誤的數(shù)據(jù)類型轉(zhuǎn)換成正確的。比如SQL數(shù)據(jù)庫(kù)中,你在varchar類型的地方輸入數(shù)值類型的數(shù)據(jù)(如int)是不會(huì)報(bào)錯(cuò)的,因?yàn)樵谶@里數(shù)值類型會(huì)被自動(dòng)轉(zhuǎn)為字符串類型。但是如果在smallint列處輸入text類型則被認(rèn)為是非法的,因?yàn)閠ext類型不能被轉(zhuǎn)換成int類型。把數(shù)值類型的數(shù)據(jù)轉(zhuǎn)換成字符串型是被允許的,而反之則不行,所以默認(rèn)都是使用數(shù)值類型的數(shù)據(jù)。

要想知道我們要注入的目標(biāo)語(yǔ)句中有多少個(gè)列,你就要試探性的往UNION SELECT子句中添加相應(yīng)的值,直到它不報(bào)“在UNION語(yǔ)句中的所有查詢都必須在目標(biāo)列表中具有相同數(shù)目的表達(dá)式”這樣的錯(cuò)為止。如圖所示,如果你遇到的是數(shù)據(jù)類型不匹配的錯(cuò)誤,那么你要去改變列的數(shù)據(jù)類型。如果返回消息只是一個(gè)轉(zhuǎn)換數(shù)據(jù)類型失敗的錯(cuò)誤,那就說(shuō)明你已經(jīng)猜對(duì)了列的數(shù)目,只是其中有個(gè)別的列的數(shù)據(jù)類型不對(duì)。那么接下來(lái)要做的就是判斷是哪個(gè)列的數(shù)據(jù)類型的不正確導(dǎo)致的錯(cuò)誤。然后將他改過(guò)來(lái)就可以了。 如果一切順利,那么祝賀你,你會(huì)得到一個(gè)和上面格式類似的而且是合法的頁(yè)面;)無(wú)論動(dòng)態(tài)頁(yè)面在哪里出現(xiàn),你都可以構(gòu)造自己的語(yǔ)句應(yīng)對(duì)自如。

3.2.8.WHERE關(guān)鍵字 如圖所示,報(bào)錯(cuò)為“無(wú)效的列名EmployeeID”,這個(gè)問(wèn)題可能是由我們注入的語(yǔ)句結(jié)尾的WHERE關(guān)鍵字引起的,舉例說(shuō)明: SQLString="SELECT FirstName,LastName,Title FROM Employees WHERE City="&strcity&"AND Country =USA" 如果我們注入的語(yǔ)句是UNION ALL SELECT OtherField FROM OtherTable WHERE 1=1 那么會(huì)得到如下的提交語(yǔ)句: SELECT FirstName, LastName, Title FROM Employees WHERE City = NoSuchCity UNION ALL SELECT OtherField FROM OtherTable WHERE 1=1 AND Country = USA 這樣就會(huì)報(bào)錯(cuò):[Microsoft][ODBC SQL Server Driver][SQL Server]無(wú)效的列名 Country。 其實(shí)問(wèn)題就是因?yàn)槟阕⑷氲恼Z(yǔ)句后,系統(tǒng)沒(méi)有在從數(shù)據(jù)庫(kù)的表中找到一個(gè)叫Country的列名。我們這里可以簡(jiǎn)單的用“;--”注釋符號(hào)將其注釋掉(如果我們是SQL Server)?;蛘吒纱嗬^續(xù)猜其他的列名,然后構(gòu)造合法請(qǐng)求就如我們上一節(jié)講到的一樣。 表名的枚舉 我們已經(jīng)開(kāi)始掌握如何來(lái)使用注入進(jìn)行攻擊,但是我們還要確定要從哪個(gè)表得到信息,換句話說(shuō)就是我們要的到關(guān)鍵的表名才能獲得我們想要的有用信息。如何獲得表名呢?在SQL Server中,你可以很容易得從數(shù)據(jù)庫(kù)中得到全部的表名和列名。但是在Oracle和Access中,你就不一定能如此輕易的得到了,這要看WEB程序?qū)?shù)據(jù)庫(kù)的訪問(wèn)權(quán)限了。關(guān)鍵在于是否能得到系統(tǒng)建立時(shí)自動(dòng)生成的表中包含的表名和列名。如在SQL Server中,它們分別為sysobjects和syscolumns,(在本文最后我們將給出其他數(shù)據(jù)庫(kù)系統(tǒng)自建表和相應(yīng)的列名)我們用以下的句子可以在這些表中列出數(shù)據(jù)庫(kù)的所有列名和表名,(根據(jù)情況自行修改): SELECT name FROM sysobjects WHERE xtype = U 這句話會(huì)返回?cái)?shù)據(jù)庫(kù)中用戶定義的所有表(如圖所示),如果我們看到我們感興趣的或者是想要看的表,那么我們就把他打開(kāi),這里以O(shè)rders為例構(gòu)造語(yǔ)句:SELECT name FROM syscolumns WHERE id = (SELECT id FROM sysobjects WHERE name = Orders)得到結(jié)果如圖。 3.2.10.單一紀(jì)錄 上面我們構(gòu)造的語(yǔ)句返回了大量的信息,如果你只想顯示一條數(shù)據(jù)紀(jì)錄也是可以的。你完全可以構(gòu)造你的注入語(yǔ)句來(lái)得到你想要的唯一的信息。我們只要在WHERE子句中添加關(guān)鍵字來(lái)避免某些行的關(guān)鍵字被選中就可以了。我來(lái)舉個(gè)列子: UNION ALL SELECT name, FieldTwo, FieldThree FROM TableOne WHERE = 我們這樣就可以得到FieldOne,FieldTwo和FieldThree的第一個(gè)值,假設(shè)我們的到的分別是"Alpha", "Beta"和"Delta"。注意,更有意思的來(lái)了,我們要得到第2行的值,怎么構(gòu)造下面的語(yǔ)句呢?這樣來(lái): UNION ALL SELECT FieldOne, FieldTwo, FieldThree FROM TableOne WHERE FieldOne NOT IN (Alpha) AND FieldTwo NOT IN (Beta) AND FieldThree NOT IN (Delta) AND = 這里有一個(gè)子句“NOT IN VALUES”,它的作用是不再返回我們已經(jīng)得到的信息,即不是alpha,不是beta,不是delta.既然都不是,數(shù)據(jù)庫(kù)就會(huì)傻乎乎的告訴我們第二行的值。我們?cè)偌僭O(shè)我們得到第二行的值為"AlphaAlpha", "BetaBeta"和"DeltaDelta"。 我們來(lái)獲得第三行的值,構(gòu)造語(yǔ)句如下: UNION ALL SELECT FieldOne, FieldTwo, FieldThree FROM TableOne WHERE FieldOne NOT IN (Alpha, AlphaAlpha) AND FieldTwo NOT IN (Beta, BetaBeta) AND FieldThree NOT IN (Delta, DeltaDelta) AND = 這樣就避免了得到第一次和第二次我們已經(jīng)得到的值,我們就這樣試下去會(huì)得到數(shù)據(jù)庫(kù)中所有的值。這看起來(lái)好像確實(shí)比較麻煩,但在這里卻是最有效的,不是么?

3.3 插入 3.3.1 插入基礎(chǔ) 關(guān)鍵字INSERT 被用于向數(shù)據(jù)庫(kù)添加信息,通常使用INSERT主要在包括用戶注冊(cè),論壇,添加商品到購(gòu)物車,等等。檢查INSERT使用的弱點(diǎn)和檢查WHERE一樣。你可能不想使用INSERT,如何避免被利用弱點(diǎn)是一個(gè)重要的考慮問(wèn)題。INSERT注入嘗試常常會(huì)讓數(shù)據(jù)庫(kù)以行形式返回結(jié)果導(dǎo)致泛濫的單獨(dú)的引用和SQL關(guān)健字的意義可能改變.取決于管理員的注意和信息對(duì)數(shù)據(jù)庫(kù)的操作,這個(gè)是要引起注意的,剛剛說(shuō)過(guò)的那些,INSERT注入和SELECT注入的不同。我們?cè)谝粋€(gè)允許用戶進(jìn)行各種注冊(cè),這就提供了一個(gè)你輸入你的名字,地址,電話等等的表單。在你提交了這個(gè)表單之后,為了得到進(jìn)一步的INSERT的弱點(diǎn),你必須能夠看到你提交的信息。它在那里不要緊??赡墚?dāng)你登陸根據(jù)在數(shù)據(jù)庫(kù)里存儲(chǔ)的名字的給予你權(quán)利的時(shí)候,可能在發(fā)送你的spam郵件的。。,誰(shuí)知道,尋找一個(gè)途徑至少可以看到你輸入的信息。 3.3.2 一個(gè)插入的請(qǐng)求看起來(lái)象這樣:INSERT INTO TableName VALUES (Vaule One,Value Two,Value Three) 你想可能利用一個(gè)在參數(shù)VALUES中的子句來(lái)看到其他的數(shù)據(jù)。我們可以使用這種辦法,sql的代碼象這樣:SQLString ="INSERT INTO TableName VALUES (" & strValueOne & ", " & strValueTwo & ", " & strValueThree & ")"我們象這樣填寫(xiě)表單:Name: + (SELECT TOP 1 FieldName FROM TableName) + Email: blah@blah.com Phone: 333-333-3333 使SQL的聲明象這樣 : INSERT INTO TableName VALUES ( + (SELECT TOP 1 FieldName FROM TableName) + , blah@blah.com, 333-333-3333)當(dāng)你到了個(gè)人設(shè)置頁(yè)面查看你的使用信息,你將看到的第一個(gè)字段這個(gè)通常是用戶名r如果你使不在你的subselect中使用TOP 1,你將得到一個(gè)錯(cuò)誤信息說(shuō)你的subselect返回了太多記錄,你能查看表中所有的行,使用NOT IN()同樣的方法你可以得到單獨(dú)的記錄。 3.4. SQL服務(wù)器存儲(chǔ)過(guò)程利用 3.4.1 存儲(chǔ)過(guò)程基礎(chǔ) 4. 一個(gè)完整安裝的MSSQL服務(wù)器有上千的存儲(chǔ)過(guò)程。如果你能在一個(gè)后臺(tái)使用mssql的網(wǎng)頁(yè)應(yīng)用程序得到SQL注入,你能使用這些存儲(chǔ)過(guò)程完成一些非凡的成果。我將討論很少的特殊的過(guò)程。取決于網(wǎng)頁(yè)程序使用數(shù)據(jù)庫(kù)的用戶,只有一些可以工作,并不是所有的用戶都可以利用。第一件事你應(yīng)該知道存儲(chǔ)過(guò)程注入不能通過(guò)存儲(chǔ)過(guò)程的返回值來(lái)確定你的注入是否成功.取決于你想完成什么,你可能不需要得到數(shù)據(jù)。你可以找到返回給你的數(shù)據(jù)的其他意義。存儲(chǔ)過(guò)程注入比一般的查詢注入要容易些,存儲(chǔ)過(guò)程的注入的弱點(diǎn)利用看起來(lái)象這樣。 simplequoted.asp?city=seattle;EXEC master.dbo.xp_cmdshell cmd.exe dir c: 注意, Notice how a valid argument is supplied at the beginning and followed by a quote and the final argument to the stored procedure has no closing quote. This will satisfy the syntax requirements inherent in most quoted vulnerabilities. You may also have to deal with parentheses, additional WHERE statements, etc.但是在這以后將不需要擔(dān)心列和數(shù)據(jù)的類型的匹配。這個(gè)可能弱點(diǎn)的輸出象程序無(wú)法返回錯(cuò)誤信息一樣。我最喜歡存儲(chǔ)過(guò)程。 5. 3.4.2. xp_cmdshell xp_cmdshell [, no_output] master.dbo.xp_cmdshell是存儲(chǔ)過(guò)程的圣杯,它帶來(lái)了一個(gè)問(wèn)題,能夠調(diào)用命令行的數(shù)據(jù)庫(kù)用戶的和他的運(yùn)行權(quán)限,這個(gè)并不可用除非這個(gè)網(wǎng)頁(yè)程序使用的數(shù)據(jù)庫(kù)用戶是SA. 運(yùn)行級(jí)別為6 sp_makewebtask [@outputfile =] outputfile, [@query =] query 6. 另外一個(gè)好的調(diào)用對(duì)象是master.dbo.sp_makewebtask,象你所看的,它是一個(gè)本地的輸出文件和一個(gè)SQL statement。sp_makewebtask可以查詢并建立一個(gè)包含輸出的網(wǎng)頁(yè)。注意你可以象使用一個(gè)UNC路徑名一樣使用一個(gè)本地輸出。這個(gè)意思就是這個(gè)輸出文件可以放有在任何一臺(tái)連在Inte.net并且有個(gè)可寫(xiě)的SMB共享(SMB請(qǐng)求不需要任何的身份驗(yàn)證)。如果有一個(gè)防火墻限制了服務(wù)器對(duì)Internet,試著把輸出文件放在網(wǎng)頁(yè)目錄下(你要知道或者猜測(cè)網(wǎng)頁(yè)的目錄)。同樣值得注意的是引用查詢可能是 包括執(zhí)行其他的存儲(chǔ)過(guò)程。Making "EXEC xp_cmdshell dir c:" 這個(gè)查詢將在網(wǎng)頁(yè)中給出"dir c:"的輸出。當(dāng)你進(jìn)行嵌套引用的時(shí)候,記得單獨(dú)的引用和雙引號(hào)。 4. 解決 4.1數(shù)據(jù)處理 所有的客戶端數(shù)據(jù)可以被惡意的提交的字符或字符串清除。這些可能在所有的應(yīng)用程序做到,不僅僅是使用SQL查詢的。Stripping quotes or putting backslashes in front of them is nowhere near enough.最好的過(guò)濾數(shù)據(jù)的方式是不用規(guī)則的表達(dá)方式,使它只包括你所想要的字符類型。舉個(gè)例子,下邊的regxp將只能返回字母和數(shù)字,盡可能的過(guò)濾象s/[^0-9a-zA-Z]//g 這樣的特殊字符??赡艿臅r(shí)候盡量使用數(shù)字,在這以后只使用數(shù)字和字母。如果你需要包括各種各樣的標(biāo)志或標(biāo)點(diǎn)。確信完全的把它們轉(zhuǎn)換成html標(biāo)記,像“"e;" or ">”。例如,一個(gè)用戶提交了一個(gè)email地址只允許使用數(shù)字和字母還有"@", "_", "." 和"-"。僅僅只有這些字符可以轉(zhuǎn)換成html標(biāo)記。 4.2. 編寫(xiě)安全的web程序 這里同樣有很少的特殊的sql注入規(guī)則。First, prepend and append a quote to all user input。 盡管數(shù)據(jù)使數(shù)字。其次,限制網(wǎng)頁(yè)應(yīng)用程序的數(shù)據(jù)庫(kù)用戶在數(shù)據(jù)庫(kù)里的權(quán)限。不要給這個(gè)用戶訪問(wèn)所有的存儲(chǔ)過(guò)程的權(quán)利如果這個(gè)用戶只需要訪問(wèn)一些預(yù)定義的。 這部分包括了所有在sql注入中有用的系統(tǒng)表,你可以在google上搜索到每一個(gè)的表的列的定義

5.1. MS SQL Server Sysobjects syscolumns

5.2. MS Access Server MSysACEs MSysObjects MSysQueries MSysRelationships

5.3. Oracle SYS.USER_OBJECTS SYS.TAB SYS.USER_TABLES SYS.USER_VIEWS SYS.ALL_TABLE S SYS.USER_TAB_COLUMNS SYS.USER_CONSTRAINTS SYS.USER_TRIGGERS SYS.USER_CATALOG

 

來(lái)源 電腦技術(shù)網(wǎng) www.memoryoverflow.cn
發(fā)表留言
發(fā)表留言請(qǐng)先登錄!
免責(zé)聲明:本站發(fā)布的信息和評(píng)論純屬網(wǎng)民個(gè)人行為,并不代表本站立場(chǎng),如發(fā)現(xiàn)有違法信息或侵權(quán)行為,請(qǐng)直接與本站管理員聯(lián)系,我們將在收到您的信息后24小時(shí)內(nèi)作出處理!
欧美一区二区三区播放老司机| 亚洲精品美女久久7777777| 在线观看国产91| 激情图区综合网| 免费av一区二区三区四区| 宅男在线观看免费高清网站| xxxxwwww在线免费观看| 国产99久久九九精品无码免费| 免费看91的网站| 亚洲三级视频网站| 亚洲一区美女| 亚洲影院高清在线| 久操成人在线视频| 精品福利av导航| 偷拍一区二区三区四区| 99久久精品免费| 视频一区二区不卡| 欧美大人香蕉在线| 国产精品99久久免费观看| 波多野结衣在线高清| 涩爱av在线播放一区二区| 激情美女网站| 欧美人与z0zoxxxx特| 91中文字幕在线播放| 久久久久久蜜桃| 国产精品免费无码| 欧洲成人午夜精品无码区久久| 无码中文字幕色专区| 欧美区高清在线| 91精品久久久久久久久中文字幕| 久久天天躁狠狠躁夜夜爽蜜月 | 米奇777在线欧美播放| 亚洲最大在线| 国产精品日本一区二区三区在线| 欧美女同一区| 超碰免费在线| 三上悠亚在线观看| 欧洲免费av| 国产黄色免费| 亚洲一| 欧美天堂在线视频| 一级全黄裸体免费视频| 天码人妻一区二区三区在线看| 91狠狠综合久久久| 高潮毛片无遮挡| 亚洲美女精品视频| 日韩在线一区视频| 99视频在线视频| 欧美老熟妇喷水| 九九热只有这里有精品| 超碰超碰超碰超碰超碰| 伊人久久av导航| 一区二区三区av| 亚洲精品影院| 亚洲人成影视在线观看| 日韩av高清| 欧美在线视频二区| 欧美日韩电影一区二区三区| 成人午夜影院在线观看| 成人午夜影院在线观看| 北条麻妃高清一区| 成人一区二区在线| 精品国产乱码一区二区三区四区 | 亚洲美女色播| 伊人久久大香伊蕉在人线观看热v 伊人久久大香线蕉综合影院首页 伊人久久大香 | 午夜精品福利视频网站| 亚洲国产一区二区三区| 亚洲国产精品久久久男人的天堂 | 国产日韩欧美综合精品| 国产经典一区二区三区| 国产日韩二区| 欧美一区观看| 一区二区三区欧美在线| 成人在线观看毛片| 很污的网站在线观看| 国产视频一视频二| 冲田杏梨av在线| 古装做爰无遮挡三级聊斋艳谭| 欧美视频亚洲图片| 国产性生活毛片| 欧美巨胸大乳hitomi| 永久免费看黄网站| 久久久久久久久久影院| 97免费观看视频| 一区二区三区电影网| 国产在线观看色| www视频免费| 传媒视频在线| 毛片av在线| 亚洲黄色免费av| 精品一区二区三区四区五区| 欧美午夜寂寞| 66视频精品| 秋霞电影网一区二区| 成人午夜电影久久影院| 国产精品成人一区二区三区夜夜夜| 亚洲精品国产品国语在线app| 黄色一区二区在线| 欧美一级日韩一级| 亚洲天堂av在线播放| 欧美黄色性视频| 亚洲一区二区少妇| 在线看视频不卡| 黄色在线视频网| 少妇大叫太粗太大爽一区二区| 2021亚洲天堂| 99久久夜色精品国产亚洲| 欧美人与动性xxxxx杂性| jizzjizzjizz亚洲女| 国产一二在线观看| 97成人资源| 欧美日韩123| 爽好久久久欧美精品| 久久久影院官网| 欧美日韩中文字幕在线视频| 亚洲国产精品yw在线观看| 久久99久久亚洲国产| 成人av影视在线| 九九热只有这里有精品| 亚洲av成人精品一区二区三区| 99精品久久久久| 亚洲精品免费在线观看视频| 免费下载黄色软件| 2017亚洲天堂1024| 日韩欧美中文在线观看| 激情综合视频| 久久先锋资源网| 欧美少妇xxx| 欧美巨大黑人极品精男| 国产伦视频一区二区三区| 中国丰满熟妇xxxx性| 自拍视频一区二区| 中日精品一色哟哟| 嫩草影院入口一二三免费| 国产黄在线看| 影音先锋欧美激情| 久久久一二三| 一区二区高清在线| 亚洲天堂av在线播放| 成人黄色在线免费| 男人靠女人免费视频网站| 美国美女黄色片| 日本黄视频在线观看| 特黄特色大片免费视频大全| 天天免费亚洲黑人免费| 伊人狠狠色j香婷婷综合| 久久九九久精品国产免费直播| 在线免费一区三区| 久久久久这里只有精品| 亚洲一区二区不卡视频| 日本一区二区在线观看视频| 一区二区三区黄色片| jizzjizz视频| 女厕盗摄一区二区三区| 国产精品成人a在线观看| 成人av综合在线| 欧美日韩另类一区| 国产97免费视| 黄页免费在线观看视频| 少妇影院在线观看| 久草国产视频| av免费在线观看网址| 免费看av成人| 99r国产精品| 欧美一区二区三区视频| 国产精品爽黄69| 久久精品免费一区二区| 久久综合色综合| www.91在线播放| 精品众筹模特私拍视频| 黄色亚洲精品| 偷窥国产亚洲免费视频| 国内揄拍国内精品少妇国语| 国产a级黄色大片| 日本青青草视频| 6699久久国产精品免费| 色戒汤唯在线观看| 国产精品日韩精品欧美精品| 亚洲第一激情av| 欧美国产日韩xxxxx| 少妇一晚三次一区二区三区| 免费一级黄色大片| 免费女人毛片视频| 国产成人精品123区免费视频| 欧美综合国产| 在线观看日韩毛片| 国产精品中文久久久久久久| 午夜剧场高清版免费观看| 亚洲一区精品在线观看| 最近中文视频在线| 成人情趣视频| 一区二区高清视频在线观看| 97精品在线视频| 日韩免费高清在线| 99久久国产免费| 77777影视视频在线观看| 欧美疯狂party性派对| 伊人性伊人情综合网| 97精品视频在线| www欧美激情| 亚洲精品911| 欧美jizzhd欧美| 亚洲精品影院在线观看| 欧美撒尿777hd撒尿| 粉嫩精品一区二区三区在线观看| 亚洲成人av免费在线观看| 亚洲欧美日韩色图| 欧美特大特白屁股xxxx| 成人一区二区三区视频| 日韩有码片在线观看| 97超碰青青草| a在线观看免费| 成人a在线视频免费观看| 乱码第一页成人| 欧美成人性战久久| 吴梦梦av在线| 自拍偷拍精品视频| 大地资源网3页在线观看| 日日夜夜免费精品视频| 亚洲二区中文字幕| 久久亚洲a v| av综合在线观看| 超碰在线cao| 99久久精品国产毛片| 色综合久久88色综合天天看泰| 成人亚洲视频在线观看| 天堂网av在线播放| 人人视频精品| 久久久精品黄色| 欧美在线国产精品| 中国美女乱淫免费看视频| 色先锋资源网| 国产九一精品| 日本精品一级二级| 日韩精品久久久| 在线观看av大片| 免费影视亚洲| 99久久久久免费精品国产 | 好看的中文字幕在线播放| 国产成人一区二区精品非洲| 久久久精品2019中文字幕神马| 日韩av卡一卡二| 小小女视频网站色琼网站| 亚洲精品一级二级三级| 91黄色免费版| 欧美日韩视频免费在线观看| 99视频免费看| 国产a亚洲精品| 亚洲欧美一区二区久久| av成人免费观看| 国产成人无码一区二区三区在线| av在线电影免费观看| 国产精品一区二区黑丝 | 欧美 日本 国产| 电影天堂最新网址| 夜久久久久久| 精品国产一区二区三区久久狼黑人| 国产传媒免费观看| 菠萝蜜网站在线观看| 亚洲视频电影在线| 亚洲韩国日本中文字幕| 黑森林精品导航| 高清wwwwxxxx| 一区二区视频欧美| 日韩一区在线视频| 爱爱免费小视频| 日韩欧美亚洲系列| 国产精品456| 丁香激情综合国产| 日本精品免费一区二区三区| 国产在线免费看| 日本免费中文字幕在线| 成人18视频日本| 91免费综合在线| 欧美日韩综合一区二区三区| 精品三级久久| 亚洲国产成人tv| 只有这里有精品| 四虎4hu影库永久地址| 九九热爱视频精品视频| 欧美成人video| 黄色片免费网址| 国产超碰在线观看| 国产精品一品二品| 成人免费自拍视频| 一级黄色免费片| 国产成人免费av一区二区午夜| 色综合久久精品| 337p粉嫩大胆噜噜噜鲁| 美女在线不卡| 老妇喷水一区二区三区| 日韩免费高清在线观看| 国产乱国产乱老熟| 九九热这里有精品| 欧美私模裸体表演在线观看| 波多野结衣天堂| videoxxxx另类日本极品| 国产成人综合在线观看| 亚洲自拍偷拍一区| 欧美自拍第一页| 久久在线播放| 欧美高清视频在线观看| 欧美精品亚洲精品日韩精品| 四虎精品在线观看| 精品卡一卡二卡三卡四在线| 最新在线黄色网址| av电影免费在线观看| 亚洲午夜电影在线| avav在线看| а√天堂www在线а√天堂视频| 成人毛片老司机大片| 欧美日韩电影一区二区| 国产精品亚洲色图| 日本欧美在线看| 99视频在线| 久久日.com| 国产精品综合色区在线观看| 国产精品欧美一区二区三区奶水| 91片黄在线观看喷潮| 国产videos久久| 欧美美女操人视频| 青青草免费观看视频| 亚洲精品观看| 亚洲视频自拍偷拍| 久久久久人妻一区精品色欧美| 成人黄色在线| 日韩精品丝袜在线| 青娱乐国产在线| 日本成人手机在线| 色偷偷亚洲男人天堂| 国产无遮挡又黄又爽又色| 免费观看性欧美大片无片| 亚洲少妇激情视频| 制服.丝袜.亚洲.中文.综合懂色| 澳门久久精品| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 欧洲色大大久久| 性欧美18—19sex性高清| 中文字幕免费高清电视剧网站在线观看| 婷婷中文字幕一区三区| 性xxxxxxxxx| av女在线播放| 欧美精品一区二区三区在线| 欧美色图亚洲视频| 51精品国产| 久久精品国产精品| 在线中文字幕网站| 国产精品久久久久久精| 国产精品色一区二区三区| 男人日女人逼逼| 日本一区视频| 欧美日韩美女在线| 国产人妻人伦精品1国产丝袜| 不卡av影片| 一区二区三区天堂av| 啪啪小视频网站| 欧美+日本+国产+在线a∨观看| 国产一区欧美二区三区| 国产精品一区二三区| 99热这里都是精品| av动漫在线观看| av免费在线观看网址| 精品少妇一区二区三区| 日韩毛片在线播放| 欧美一区免费| 国产伦精品一区二区三区在线| xfav资源| 亚洲精品一二三四区| 三上悠亚 电影| 老司机精品视频网| 欧美激情日韩图片| 中文字幕人成高清视频| 福利一区福利二区| 日韩精品无码一区二区三区免费| 性欧美ⅴideo另类hd| 日韩av一卡二卡| 一本一道人人妻人人妻αv| 99精品欧美| 一级日韩一区在线观看| 亚洲私人影吧| 欧美精品三级日韩久久| 国产亚洲精品久久久久久无几年桃 | 成人在线播放网站| 亚洲制服丝袜在线| www.av欧美| 亚洲aa在线| 97在线电影| 伦理电影国产精品| 色婷婷久久一区二区三区麻豆| 男女性高潮免费网站| 婷婷精品进入| 欧美日韩高清免费| 黄色视屏网站在线免费观看| 日韩欧美一级二级三级| a片在线免费观看| 蜜桃一区二区三区在线| 欧美aⅴ在线观看| 网友自拍亚洲| 国内自拍欧美激情| 人人插人人干|