真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SQL注入原理及代碼分析是怎樣的

這篇文章給大家介紹SQL注入原理及代碼分析是怎樣的,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)、達(dá)孜網(wǎng)絡(luò)推廣、微信小程序開發(fā)、達(dá)孜網(wǎng)絡(luò)營銷、達(dá)孜企業(yè)策劃、達(dá)孜品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供達(dá)孜建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com

前言

我們都知道,學(xué)安全,懂SQL注入是重中之重,因?yàn)榧词故乾F(xiàn)在,SQL注入漏洞依然存在,只是相對(duì)于之前現(xiàn)在挖SQL注入變的困難了。而且知識(shí)點(diǎn)比較多,所以在這里總結(jié)一下。通過構(gòu)造有缺陷的代碼,來理解常見的幾種SQL注入。下面只是講解幾種注入原理,沒有詳細(xì)的利用過程。

SQL注入原理


SQL注入漏洞的產(chǎn)生需要滿足兩個(gè)條件


  1.  參數(shù)用戶可控:前端傳給后端的參數(shù)內(nèi)容是用戶可以控制的。


  2. 參數(shù)帶入數(shù)據(jù)庫查詢:傳入的參數(shù)拼接到SQL語句并帶入數(shù)據(jù)庫查詢。


所以在實(shí)際環(huán)境中開發(fā)者要秉持“外部參數(shù)皆不可信原則”進(jìn)行開發(fā)。


幾種常見的SQL注入攻擊


union注入攻擊

先看代碼

";
?>

在union注入頁面中,程序獲取GET參數(shù)id,對(duì)用戶傳過來的id值沒有進(jìn)行過濾,直接拼接到SQL語句中,在數(shù)據(jù)庫中查詢id對(duì)應(yīng)的內(nèi)容,并將這一條查詢結(jié)果中的user和password 輸出到頁面。進(jìn)行union注入攻擊前提是頁面有回顯。
然后就是注入的常規(guī)思路,判斷類型,判斷字段數(shù),使用union查詢相關(guān)數(shù)據(jù)。

布爾盲注攻擊

先看代碼

在布爾盲注頁面中,程序先獲取GET參數(shù)id,通過preg_match()函數(shù)判斷其中是否存在union sleep benchmark等危險(xiǎn)字符。然后將參數(shù)id拼接到SQL語句,從數(shù)據(jù)庫查詢,如果有結(jié)果,返回yes,否則返回no。所以訪問這個(gè)頁面,代碼根據(jù)查詢結(jié)果返回只返回yes和no,不返回?cái)?shù)據(jù)庫中的任何結(jié)果,所以上一種的union注入在這里行不通。嘗試?yán)貌紶柮ぷⅰ?br/>布爾盲注是指構(gòu)造SQL判斷語句,通過查看頁面的返回結(jié)果來推測哪些SQL判斷是成立的。例如,我們可以判斷數(shù)據(jù)庫名的長度構(gòu)造語句如下。

and length(database())>=1 #依次增加,查看返回結(jié)果

SQL注入原理及代碼分析是怎樣的
SQL注入原理及代碼分析是怎樣的通過上面的語句我們可以猜到數(shù)據(jù)庫名長度為4。
接著使用逐字符判斷的方式獲取數(shù)據(jù)庫庫名,數(shù)據(jù)庫庫名范圍一般都是a~z,字母0~9。構(gòu)造語句如下。

and substr(database(),1,1)=要猜解的字母(轉(zhuǎn)換成16進(jìn)制)

substr是截取的意思,構(gòu)造語句的含義是,截取database()的值,從第一個(gè)開始,每次返回一個(gè)。這里要注意,要和limit語句區(qū)分開,limit從0開始排序,substr從1開始排序。因?yàn)槲抑罃?shù)據(jù)庫的第一個(gè)字母是d,所以直接換成d,轉(zhuǎn)換成16進(jìn)制就是0x64。結(jié)果如下。

SQL注入原理及代碼分析是怎樣的
在真實(shí)環(huán)境中,自己手工的話,工作量有點(diǎn)大,可以借助burp的爆破功能爆破要猜解的字母。
同樣,也可以利用substr()來猜解表名和字段。構(gòu)造語句

and substr((select table_name from information_schema.tables where table_schema=庫名 limit 0,1),1,1)=要猜解的字母(這里指表名)


SQL注入原理及代碼分析是怎樣的
用這樣的方法,可以猜解出所有的表名和字段,手工會(huì)累死,可以借助burp或者sqlmap。

爆錯(cuò)注入攻擊

先看代碼

查看代碼,在報(bào)錯(cuò)注入頁面中,程序獲取GET參數(shù)id后,將id拼接到SQL語句中查詢,如果執(zhí)行成功,就輸出ok,如果出錯(cuò),就通過echo mysqli_error($con)將錯(cuò)誤信息輸出到頁面。我們可以利用這種錯(cuò)誤回顯,通過updatexml()、floor()等函數(shù)將我們要查詢的內(nèi)容顯示到頁面上。
例如,我們通過updatexml()獲取user()的值,構(gòu)造如下語句。

and updatexml(1,concat(0x7e,(select user()),0x7e),1) #0x7e是~16進(jìn)制編碼

發(fā)現(xiàn)查詢出了user()的值
SQL注入原理及代碼分析是怎樣的同樣,我們也可以查詢出database()的值

and updatexml(1,concat(0x7e,(select database()),0x7e),1) #0x7e是~16進(jìn)制編碼

查詢出了數(shù)據(jù)庫名
SQL注入原理及代碼分析是怎樣的
我們可以用這種方法查詢出剩下的所有表名和字段,只需要構(gòu)造相關(guān)的SQL語句就可以了。

時(shí)間盲注攻

先看代碼

no");
}
$result=mysqli_query($con,"select * from users where `user_id`=".$id);
$row=mysqli_fetch_array($result);
if ($row){
    exit("yes");
}
else{
    exit("no");
}
?>

查看代碼,在時(shí)間盲注頁面中,程序獲取GET參數(shù)id,通過preg_match()函數(shù)判斷是否存在union危險(xiǎn)字符,然后將id拼接到SQL語句中,并帶入數(shù)據(jù)庫查詢。如果有結(jié)果返回yes,沒有結(jié)果返回no。不返回?cái)?shù)據(jù)庫中的任何數(shù)據(jù)。
它與布爾盲注的不同在于,時(shí)間盲注是利用sleep()或benchmark()等函數(shù)讓執(zhí)行時(shí)間變長。一般和if(expr1,expr2,expr3)結(jié)合使用,這里的if語句的含義為如果expr1為真,則if()返回expr2,否則返回expr3。所以判斷數(shù)據(jù)庫的長度,咱們構(gòu)造的語句如下

if (length(database())>3,sleep(5),1) #判斷數(shù)據(jù)庫長度,如果大于3,休眠5秒,否則查詢1

SQL注入原理及代碼分析是怎樣的SQL注入原理及代碼分析是怎樣的

由上面圖片,我們通過時(shí)間可以判斷出,數(shù)據(jù)庫的長度為4。
得到長度后,通過substr()來查詢數(shù)據(jù)庫的第一個(gè)字母,這里和布爾盲注很類似,構(gòu)造如下語句。

and if (substr(database(),1,1)=庫的第一個(gè)字母,sleep(5),1)

SQL注入原理及代碼分析是怎樣的依次進(jìn)行猜解。依次類推,可以猜解出數(shù)據(jù)庫完整的庫名,表名,字段名和具體數(shù)據(jù)。手工的話依舊是一個(gè)浩大的工程,一般借助工具。

今天對(duì)union注入、布爾盲注、報(bào)錯(cuò)注入、時(shí)間盲注的原理和代碼進(jìn)行了簡單的分析。

關(guān)于SQL注入原理及代碼分析是怎樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


文章題目:SQL注入原理及代碼分析是怎樣的
網(wǎng)頁地址:http://weahome.cn/article/gpdjdd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部