sql注入

SQL Injection

SQL注入,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的。SQL注入漏洞的危害是巨大的,常常会导致整个数据库被“脱裤”,尽管如此,SQL注入仍是现在最常见的Web漏洞之一

SQL 注入分类 按SQLMap中的分类来看,SQL注入类型有以下 5 种: 

UNION query SQL injection(可联合查询注入)  

Stacked queries SQL injection(可多语句查询注入) 

Boolean-based blind SQL injection(布尔型注入)  

Error-based SQL injection(报错型注入) 

Time-based blind SQL injection(基于时间延迟注入)

SQL注入基础知识铺垫

1. select有关的函数

  • select user();   查看当前用户
  • select session_user();   同上
  • select database();  查看数据库
  • select @@version   查看当前MySQL版本
  • select @@basedir   查看MySQL安装路径
  • select @@datadir   查看MySQL数据存储路径

2.myslq中的默认表和作用

  • Information_schema:提供了所有数据库中的元数据,存储了整个mysql中的所有库/表/列名等信息.
  • Mysql:mysql的核心数据库,用来存储所有用户名/密码和数据库访问权限等信息.
  • Performance_schema:记录了各种日志信息

3.必会基本查询语句

  • select database();                             #查看当前库名;
  • select table_name from information_schema.tables where table_schema=database()  ;                                                #查看当前库下的表名
  • select column_name from information_schema.columns where table_schema=database() and table_name='user';  #查询列名
  • select name,password from user;   #获取用户名和密码列

4.mysql中的注释风格(以下方式都可以)

  • # (url编码为%23)
  • -- (--后边要跟上一个或多个空格)
  • /* ..... */
  • /*! .... */ 内联注释
  • select * /*!22222from*/ users;   #数字小于当前mysql版本号,就正常显示;等于或大于就查询异常

SQL注入判断

SQL注入一般分为整数型、字符型和搜索型,整数型:用户从前端传输到服务器的数据被当做整数来处理,字符型:用户从前端传输到服务器的数据当做字符来处理。因为服务器处理整数和字符型数据,类型不同,整数型数据,不需要使用单引号封装,而字符型需要使用单引号封装。所以整数型和字符型注入过程中,最大的区别在于,字符型注入需要先对前面的数据进行封装,再结尾加上注释符号,而整数型就不需要封装和结尾注释。搜索型:这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有“keyword=关键字”,有的不显示在的链接地址里面,而是直接通过搜索框表单提交。此类注入点提交的 SQL 语句,其原形大致为:select * from 表名 where 字段 like '%关键字%'

如何判断是否存在SQL注入:www.xxx.com/load?id=1

方法一:加符号判断法

第一步:再数据后门加单引号或者双引号,如果单引号页面显示异常,再加#后,页面正常显示,为单引号注入,如果双引号显示异常,再加#后显示正常,则为双引号注入

第二步:如果加单引号或者双引号后,不正常显示,加#后还是不能恢复正常页面,则尝试在引号后添加一到两个” )“右括号,查看是否能恢复正常,如果恢复正常,则为引号和右括号注入。

SQL注入冲代码上来看分为以下几类:

  • select * from user where id = 1
  • select * from user where id = '1'
  • select * from user where id = "1"
  • select * from user where (id = 1)
  • select * from user where (id = '1')
  • select * from user where (id = "1")

方法二:正确错误判断法

在数据后门添加上and 1=1  或者 and 1=2 ,1=1正确,1=2错误,查看页面是否会返回不同的响应,当使用and 1=1进行测试时返回正常页面而and 1=2进行测试时返回错误页面或者页面没有正常显示则说明该链接存在SQL 漏洞。

SQL 注入分类

SQL注入类型有以下 5 种: 

UNION query SQL injection(可联合查询注入)  

Stacked queries SQL injection(可多语句查询注入) 

Boolean-based blind SQL injection(布尔型注入)  

Error-based SQL injection(报错型注入) 

Time-based blind SQL injection(基于时间延迟注入)

前面博客有先关的,自行查看

SQL注入之二次注入

原理:用户向数据库里存入恶意的数据,在数据被插入到数据库之前,肯定会对数据库进行转义处理,但用户输入的数据的内容肯定是一点摸样也不会变的存进数据库里,而一般都默认为数据库里的信息都是安全的,查询的时候不会进行处理,所以当用户的恶意数据被web程序调用的时候就有可能出发SQL注入。

举例:数据库中存在一个账户admin,密码:未知

通过注册功能,注册一个新的账户admin'#,密码:admin,注册成功后,登录之后更改admin'#的密码,密码为:123456,最后admin账户的密码变成的123456

原理:由于注册的时候,未过滤,导致admin'#账号的特殊符号也写入数据库。而更改密码的数据库语句为:username="admin'#" new_pass="123456" old_pass="admin"

$ sql = "update users set password ='$ new_pass' where username='$ username' and password='$ old_pass' ";

加入更改密码数据后为:

$ sql = "update users set password ='123456' where username='admin'#' and password='admin' ";

观察发现得,#后面的' and password='admin' ";被注释,修改的用户名为admin,执行后admin的用户名被更改

SQL注入之重叠注入

在SQL语句中,语句的结束都是以”;“结尾,但是如果我们在”;“后面再加上一条SQL语句,两条语句会一起执行吗?这也就是造成堆叠注入的原因了。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值