SQL注入漏洞(SQL injection)
是Web層面最高危的漏洞之一。
在2005年前后,SQL漏洞隨處可見,用戶在搜索時(shí),輸入一個(gè)單引號(hào)就可以檢測出這種漏洞。
2008年-2010年期間,SQL注入漏洞連續(xù)3年在OWASP年度十大漏洞排行中排名第一。
SQL注入形成的原因就是:用戶輸入的數(shù)據(jù)被SQL解釋器執(zhí)行。
在一個(gè)表單中:
賬號(hào):? ? ? ? ? ? ? ? ? ? 密碼:? ? ? ? ? ? ?
輸入用戶名“ `or 1=1-- ” ,密碼隨意,也可不填,點(diǎn)擊登入,發(fā)現(xiàn)可以正常登入,這是為什么呢?
select count(*) from admin where username='admin' and password='password'
在數(shù)據(jù)庫中,存在admin用戶,并且密碼為password,所以此時(shí)返回結(jié)果為“1”。顯然,1大于0,所以通過驗(yàn)證,用戶可以成功登陸。
select count(*) from admin where username='' or 1=1--' and password=''
終于找到問題的根源了,SQL語句的本義是:
username=‘賬戶’? and? password=‘密碼’
而現(xiàn)在變?yōu)椋?/p>
username=‘賬戶’ or 1=1--’ and password=‘’
此時(shí)的password被注釋!,而username=‘賬戶’ or 1=1? 這句話永遠(yuǎn)為真,最終執(zhí)行相對于:
select count(*)from admin? ? ? ? ? //查詢admin表所有數(shù)據(jù)條數(shù)
很顯然,條數(shù)大于1,驗(yàn)證通過,這就是一次簡單的SQL注入,雖然簡單,但是危害很大。可以對專門的靶場進(jìn)行試驗(yàn)。
利用以下語句可以直接把a(bǔ)dmin表直接刪除,危害極大,請勿隨意對網(wǎng)站進(jìn)行測試,僅供學(xué)習(xí)交流
`or 1=1; drop table admin --
PS1:在SQL注入前,要判斷該數(shù)據(jù)庫類型。
僅供學(xué)習(xí)交流,謹(jǐn)記國家網(wǎng)絡(luò)安全法。