标签:结果 进一步 修改 alt 命令 sql注入 图片 erp 记录
什么是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.避免直接向用户显示数据库错误
标签:结果 进一步 修改 alt 命令 sql注入 图片 erp 记录
原文地址:https://www.cnblogs.com/xuedognqing/p/12986486.html