MySQL約束攻擊的原理和復(fù)現(xiàn)方式
MySQL約束攻擊的原理和復(fù)現(xiàn)
在MySQL數(shù)據(jù)庫(kù)中,數(shù)據(jù)是有字符長(zhǎng)度限制的。
對(duì)于下面這個(gè)數(shù)據(jù)庫(kù):

username和password的限制都是設(shè)置為15個(gè)字符。
當(dāng)嘗試注冊(cè)一個(gè)超過(guò)15字的字符串時(shí),系統(tǒng)就會(huì)報(bào)錯(cuò)。

這是由于在MySQL環(huán)境變量sql_mode中添加了STRICT_TRANS_TABLES字樣,規(guī)定了嚴(yán)格模式。
但如果有些數(shù)據(jù)庫(kù)沒(méi)有設(shè)置嚴(yán)格模式,系統(tǒng)就會(huì)對(duì)輸入的非法字符串進(jìn)行轉(zhuǎn)換,
出現(xiàn)了SQL約束攻擊
在SQL注冊(cè)的時(shí)候,是不能夠注冊(cè)已經(jīng)存在的用戶(hù)名的(即使在后面加空格也不可以),但是可以考慮創(chuàng)建一個(gè)名字叫‘admin 1’的超長(zhǎng)字符串用戶(hù),在SQL比對(duì)時(shí),它顯然是和admin不同的(因?yàn)槟┪灿幸粋€(gè)1,所以空格是有效的),但是在非嚴(yán)格模式下,SQL會(huì)去掉后面多余的字符,將“admin ”注冊(cè)到用戶(hù)中,
數(shù)據(jù)庫(kù)就變成了這樣:

發(fā)現(xiàn)數(shù)據(jù)庫(kù)中出現(xiàn)了兩個(gè)admin,然后再使用admin、mypass登陸,由于比對(duì)的時(shí)候,末尾的空格是被忽略掉的,所以就成功登入了admin。

總結(jié)
如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
相關(guān)文章
mysql啟動(dòng)失敗之mysql服務(wù)無(wú)法啟動(dòng)(服務(wù)沒(méi)有報(bào)告任何錯(cuò)誤)的解決方法
作為一名程序猿,必不可少的便是和mysql打交道,那當(dāng)mysql故障,服務(wù)無(wú)法啟動(dòng)時(shí)該怎么解決呢,下面這篇文章主要給大家介紹了關(guān)于mysql啟動(dòng)失敗之mysql服務(wù)無(wú)法啟動(dòng),服務(wù)沒(méi)有報(bào)告任何錯(cuò)誤的解決方法,需要的朋友可以參考下2022-05-05
mysql批量替換數(shù)據(jù)庫(kù)中某字段部分內(nèi)容兩種方法
MySQL數(shù)據(jù)庫(kù)批量替換是指在數(shù)據(jù)庫(kù)中批量更新或替換特定的數(shù)據(jù)內(nèi)容,這篇文章主要介紹了mysql批量替換數(shù)據(jù)庫(kù)中某字段部分內(nèi)容的兩種方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-11-11
Linux下mysql新建賬號(hào)及權(quán)限設(shè)置方法
Linux下mysql新建賬號(hào)及權(quán)限設(shè)置方法,其實(shí)linux與windows下的設(shè)置方法一樣的,都是命令行操作2012-07-07
mysql 5.6.26 winx64安裝配置圖文教程(一)
這篇文章主要為大家詳細(xì)介紹了mysql 5.6.26 winx64安裝配置圖文教程,感興趣的小伙伴們可以參考一下2016-08-08
MySQL 日志相關(guān)知識(shí)總結(jié)
這篇文章主要介紹了MySQL 日志相關(guān)知識(shí)總結(jié),幫助大家更好的理解和實(shí)用MySQL,感興趣的朋友可以了解下2021-02-02
Mysql覆蓋表中重復(fù)記錄的兩種實(shí)現(xiàn)方式
replaceinto和onduplicatekeyupdate這兩種方式都需要表中存在主鍵或者唯一索引,前者會(huì)先刪除再插入,后者則直接更新,如果沒(méi)有主鍵或唯一索引,則兩者都相當(dāng)于insertinto操作2026-04-04
MySQL數(shù)據(jù)庫(kù)恢復(fù)(使用mysqlbinlog命令)
binlog是通過(guò)記錄二進(jìn)制文件方式來(lái)備份數(shù)據(jù),然后在從二進(jìn)制文件將數(shù)據(jù)恢復(fù)到某一時(shí)段或某一操作點(diǎn)。2011-08-08

