mysql中的宽字符注入_深入理解Mysql宽字符注入
之前記錄過一篇 寫的不夠詳細(xì)
概念
寬字節(jié)是相對(duì)于ascII這樣單字節(jié)而言的;像GB2312、GBK、GB18030、BIG5、Shift_JIS等這些都是常說的寬字節(jié),實(shí)際上只有兩字節(jié)
GBK是一種多字符的編碼,通常來說,一個(gè)gbk編碼漢字,占用2個(gè)字節(jié)。一個(gè)utf-8編碼的漢字,占用3個(gè)字節(jié)
原理
mysql在使用GBK編碼會(huì)認(rèn)為兩個(gè)字符為一個(gè)漢字,只要前一個(gè)字符的ascii碼>128就是漢字的編碼范圍
利用場(chǎng)景
轉(zhuǎn)義函數(shù):為了過濾用戶輸入的一些數(shù)據(jù),對(duì)特殊的字符加上反斜杠“\”進(jìn)行轉(zhuǎn)義;Mysql中轉(zhuǎn)義的函數(shù)addslashes,mysql_real_escape_string,mysql_escape_string等,還有一種是配置magic_quote_gpc,不過PHP高版本已經(jīng)移除此功能
addslashes():
函數(shù)返回在預(yù)定義字符之前添加反斜杠的字符串。
預(yù)定義字符是:
單引號(hào)(')
雙引號(hào)(")
反斜杠()
NULL
繞過思路
想辦法給\前面再加一個(gè)\(或單數(shù)個(gè)即可),變成\\’,這樣\被轉(zhuǎn)義了,'逃出了限制
去掉轉(zhuǎn)義符\
\的16進(jìn)制編碼為5c
只要前一個(gè)字符的ascii碼>128就是漢字的編碼范圍
實(shí)驗(yàn)
1、加個(gè)%df跟\組成一個(gè)漢字 再加個(gè)'閉合前面的引號(hào)
2、129的十六進(jìn)制為81,我們輸入%81'試一下
這里%df url解碼后就是圖示亂字符
playload
%81' or 1=1#
%df' order by33--+
工具
總結(jié)
以上是生活随笔為你收集整理的mysql中的宽字符注入_深入理解Mysql宽字符注入的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 闺蜜爸爸希望闺蜜妈妈接受20年前的红颜知
- 下一篇: 黑豹的盔甲,美国队长的盾,金刚狼的爪,这