所谓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注入的原理和步骤的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!