sql注入-实用小手册

时间:2020-04-08 19:22:59   收藏:0   阅读:129


前言
本文没有包含细致的原理讲解,只是简单列举基本概念、注入的大致思路和需要的注入语句,写成这样是为了方便捋顺思路,能更好的看清整个注入过程。

前置知识


information_schema数据库的三个表及其中的字段

几个函数

一、union注入


适用条件
查询后直接将结果数据直接显示在页面的情况,可以尝试union注入。
判断是否存在注入
尝试id=1id=1‘,查看结果是否相同;
尝试id=1 and 1=1id=1 and 1=2 ,查看结果是否相同;
结果不同表示可能存在sql注入。
判断查询语句的字段数
order by后跟的数字可以暗示查询语句中查询了几个字段。
id=1 order by 1
id=1 order by 2
id=1 order by 3均可以执行,与id=1结果相同。
id=1 order by 4id=1结果不同,则表示查询字段有3个。

为什么要知道查询语句的字段数
在union查询中,前后两个查询语句查询的字段数必须相同。

注入语句

1. 修改id,使id=-1

2. 查看可输出位置

3. 查询数据库

4. 查询表名

5. 查询字段名

6. 查询字段对应的数据

二、Boolean注入


Boolean注入是构造sql判断语句,根据页面返回结果,来推测哪些判断条件是成立的,以此来获取数据库的数据。

适用条件
修改id后的内容,当页面不返回数据而是只返回yes或no时,无法使用union注入,可以尝试Boolean注入。
获取参数后,代码中通过preg_match过滤了“union/sleep/benchmark”等危险字符,然后才将参数拼接到sql语句进行查询。

判断是否可以进行Boolean注入
尝试id=1id=1‘,查看结果,第一个为yes,第二个为no。
尝试id=1‘ and 1=1id=1‘ and 1=2 ,查看结果,结果认为yes和no。
尝试修改id的值,返回结果依旧是yes和no,由此可判断页面只返回yes和no,需要进行Boolean注入。

注入语句

1. 判断数据库名长度

2. 逐字符判断数据库名

3. 表名及字段名查询

三、时间注入


时间注入利用sleep()和benchmark()等函数使sql查询执行时间延长,从而判断条件是否正确,推断数据库信息。

适用条件
修改id后的内容,当页面不返回数据而是只返回yes或no时,无法使用union注入,且可以使用sleep()函数使得sql查询执行时间延长,可以尝试时间注入。

与Boolean注入的区别
没有过滤"sleep"或“benchmark”字符。

注入语句

1. 判断数据库名长度

2. 逐字符判断数据库名

四、报错注入


利用错误回显,使用floor()、updatexml()等函数将所需信息输出到页面上。

适用条件
尝试id=1‘,多一个单引号会引发错误,页面回显错误信息,可以尝试报错注入。

注入语句

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!