所谓SQL注入攻击,是指攻击者将SQL命令插入Web表单的输入字段或页面请求的查询字符串中,欺骗服务器执行恶意的SQL命令。下面这篇文章主要为大家介绍SQL注入的原理和一般步骤,有需要的朋友可以参考一下。
目录
原则一般用步骤1。确定注入点2。确定查询字段的数量3。检查数据库名称、版本号、用户名等信息4。查询表名5。查询字段名6。查询记录内容摘要。
原理
SQL注入是一种攻击模式,将恶意代码插入字符串,然后将字符串传递给SQL Server的实例进行分析和执行。应该对构成SQL语句的任何进程进行注入检查,因为SQL Server将执行它收到的所有语法上有效的查询。
(摘自微软SQL注入,但需要注意的是,SQL注入并不局限于SQL Server,几乎任何数据库引擎都有这个问题)
一般利用步骤
1.判断注入点
判断注射点有很多意义,一是找到可能存在注射的位置,二是判断那里是否可以进行注射。在靶场环境中,我们已经知道GET的参数id是它与数据库交互的点,然后就可以判断它是否可以被注入。
Id为1,查询成功,回显正常
Id为1 ',数据库报错,根据错误信息猜测关闭方式为单引号。
Id为1'-,查询成功,正常回显,确认猜测,
id分别是1 '和1=1-以及1 1 '和1=2 -。通过呼应情况,可以进一步判断是否可以进行注射。
1=1永远为真,当1查询成功时,如果1=1也查询成功,页面将返回正常,1=2永远为假,所以如果执行1=2,页面将返回异常。通过比较两种方法返回的结果,可以知道是否可以通过改变点来进行注射。
2.判断查询字段数
为了在页面上显示期望的结果,我们需要使用联合查询。联合查询的条件之一是保证查询语句前后的字段个数相等,所以我们需要判断查询中的字段个数。
通常,采用order by或union select,如下所示:
当订单数大于3时,页面异常返回;当它小于或等于3时,它返回正常,知道原始查询语句中的字段数是3。或者
当我们联合查询4列时,我们得到的错误是查询语句由不同的列组成。当查询3列时:
查询成功,原始查询语句只有三列。
3.查数据库名、版本号、用户名等信息
联合查询的规则是在前一个查询失败时执行第二个查询。我们知道该查询有三个字段。接下来,传入id为0,并且判断三个场的回声位置。
然后通过数据库中内置的version()、database()和user()可以找到版本号、当前数据库名称和当前用户。
4.查询表名
根据前面的查询,目前的数据库版本是5.5.53,MySQL5.5以后的所有版本都内置了数据库information_schema,它存储了数据库中所有的表名、字段名等信息。以便您可以构造一个查询语句并获得表名。
有效载荷:id=0' union select 1,(select group _ concat(table _ name)from information _ schema . tables其中table_schema=database()),3 -
这里group_concat()是SQL语句内置的聚合函数,用来将查询结果以字符串的形式输出。
(使用有效载荷:id=0' union select 1,(select group _ concat(schema _ name from information _ schema . schemata),3 -)
5.查询字段名
知道了所有的表名,选择一个表并查询所有的字段名。
有效载荷:id=0' union select 1,(select group _ concat(column _ name)from information _ schema . columns where table _ name=' users '),3 -
6.查询记录内容
通过表名和字段名,您可以展开数据库中的记录。
有效载荷:id=0' union select 1,group_concat(用户名),group_concat(密码)from users -
以上是SQL注入的一般流程,当然还有一些手势如错误注入、请求头注入、选择入outfile编写木马等。在后续的学习过程中逐步补充。
总结
这篇关于SQL注入的原理和一般步骤的文章到此为止。关于SQL注入的原理和步骤的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。