1、简介
这几天在翻乌云漏洞库的时候意外看到这样一个sql注入,通过convert()转换类型的函数将用户名密码暴露出来,这种用法我还是头一次看到,所以自己在mysql、sqlserver两个主流数据库中做了下试验,尝试一下这个函数的适用范围,同时尝试一下oracle中转化数据类型的函数是否也有相同的效果,这里也将试验结果发到论坛供大家参考,如果早知道这种用法的大佬也勿喷勿喷(つд⊂)
https://www.madebug.net/static/bugs/wooyun-2016-0223093.html
上面是乌云漏洞库的地址,其实单看这个漏洞,这个函数的使用范围还是比较窄的,毕竟需要目标系统直接将数据库报错暴露出来,一般系统应该都会对返回信息做一个掩盖的,但是多知道点总是好的。想想这好像也是一种报错注入。
啊,本来想把试验过程也写出来的,想想好麻烦,直接写结果了,图多,直接看最后总结可以
2、SQL Server
如图sql server数据库,新建一个表,id和username均为varchar类型,
之后去创建语句查询
可以看到我们的id和username都在报错中被暴露了出来
但是如果我们将其中一个改为int类型,
那么,当varchar值在前面的才会被报错出来(这里有个中间连接符的问题)
3、Mysql
同样建表,id int,username varchar,
可以看到,mysql中将字符型转化成了0,所以convert在MySQL中不适用
当然,cast也不行
4、oracle
如上图还是新建一个表,两个varchar值,
可以看到,当varchar中内容为非数值型字符串时会报错,但并不会暴露表中信息
5、总结
这种方式基本只适用于sqlserver数据库,当updatexml被禁用的时候不妨试一试
select convert(int,name) from sysobjects
另外关于以上有说中间连接符的问题,当以非数值型字符连接时,如果前面的字段为int,那么就可以将后面的varchar暴露出来,但这里后面的varchar还要是非数值型的字符串,所以这样情况太多,还不如直接以某个非数值字符进行连接,换一下字段的顺序就可以
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.
xuetu
发表于 2021-7-29
SQL server: sql server 2014
Mysql:5.7.31
oracle:12C
评论列表
加载数据中...