SQL注入基本知识


information_schema   

MySQL 中存储所有数据库名、所有表名、所有字段名的系统数据库叫 information_schema ,这是在 MySQL 数据库初始化就存在的系统库。库里存储数据库名、表名、字段名的表分别为 schemata 、tables、columns(原始表名为大写,但小写也能取到数据)。

SELECT  *  FROM  information_schema.TABLES  WHERE  TABLE_SCHEMA='数据库名';               解释:从总表中将所需的数据库名查出来

SELECT  *  FROM   information_schema.xxxxx     WHERE     TABLE_NAME = 'sss' ;                     解释:从xxxx数据库中把表名为sss里面的数据查出来

表名 关键字段
schemata schema_name [数据库名]
tables table_schema [数据库名],table_name [表名]
columns table_schema [数据库名],table_name [表名],column_name [列名]
select  schema_name   from    information_schema.schemata      查询所有的数据库名称

select  table_name    from   information_schema.tables   where   table_schema  = 'mysql '     查询名为 mysql 数据库中的表名

select  column_name   from   information_schema.columns  where table_name = 'user'  and table_schema = 'mysql'      查询名为mysql数据库下user表中的字段名称

select (user,password)  from mysql.user       查询数据库为mysql下user表中user和password字段下的内容

concat()函数

功能:将多个字符串连接成一个字符串。

语法:concat(str1, str2,...)

返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。

1:select concat (id, name, score) as info from student;

返回的结果就是   1小明79

若是嫌格式数据显示不够清楚,可以加 ‘-’

select concat (id, '-',name, '-', score) as info from student;

返回的结果就是   1-小明-79

group_coucat函数()

group_concat (  [DISTINCT] 要连接的字段      [Order BY ASC/DESC 排序字段]      [Separator '分隔符']  )

将group by产生的同一个分组中的值连接起来,返回一个字符串结果

例:select name, group_concat (id) from student  group by name;

小明 | 1,5,6

小丽 | 2,4

小伟 | 3

小红 | 7

这样就使用group_concat()和group by显示相同名字的人的id号

order by

语句判断,判断该表中一共有几列数据

order by 3页面回显正常,order by 4页面回显不正常,说明此表一个有3列。

union 联合查询

根据SQL语言的特性,使用联合查询联合的结果集之间必须具有相同数量的列名(也就是列数)(也就是说,必须在已知列数的情况下才能使用联合查询,所以联合查询的使用必须在  order by 之后)

查询数据库信息    @@version    @@datadir

查询用户名,数据库名     user()   database()

文件读取  union select 1,load_file('C:\\wondows\\win.ini')#

写入 webshell       select..into  outfile...

回显点

联合注入是需要显示结果的,这里就会用到一个叫做回显点的东西。

回显点就是 SQL 查询结果显示在页面上位置,有回显点的 SQL 注入叫做回显点注入。

比如一篇文章的标题、作者、时间、内容等等,这些都可能成为回显点。

继续上面的,查询字段数可以通过 order by x 实现。这边我学到一个知识点,order by 不仅可以按照表中的某个字段名排序,还可以用数字代表查询结果的列(col­umn)进行排序。

比如查询结果有两列,id、name,order by 1 就等于 order by id

limit 不同,order by 从 1 开始计数,0 列不存在,大于查询结果列数会报错。

所以可以通过 order by x 测算出查询结果列数。

select id,name from user where id=1 order by 3 报错,则说明运行的 SQL 语句查询字段数为 2。

知道了查询结果列数,就可以通过联合查询返回需要回显的信息了。

想要显示我们需要的信息,可以将当前的查询结果置空,即判断条件改成 false。

就比如说一共有三列      ?id=1    返回正常  我们需要构造  ?id= -1 union select 1,2,3  from  xxx   where   xxx

目的就是,数据库查询不到 id=-1 的数据,就不会有结果返回,也就没有显示,但是后面的语句会查询出来,会出现在原先的显示位置,这样就把我们想要的数据查询出来 了

sql注释符

#     单行注释   注意与url中的#区分,常编码为%23

--空格      单行注释  注意为短线短线空格

/*()*/      多行注释  至少存在俩处的注入   /**/常用来作为空格

注入流程

是否存在注入并且判断注入类型

判断字段数   order by

确定回显点      union select 1,2

查询数据库信息    @@version    @@datadir

查询用户名,数据库名     user()   database()

文件读取  union select 1,load_file('C:\\wondows\\win.ini')#

写入 webshell       select..into  outfile...

补充一点,使用sql注入遇到转义字符串的单引号或者双引号,可使用HEX编码绕过

SQL注入----盲注

基于布尔 SQL 盲注

基于时间的 SQL 盲注

基于报错的 SQL 盲注

SQL注入基本知识点总结的更多相关文章

  1. sql注入知识点整理(基础版)

    sql注入知识点整理(基础版) 基本步骤 判断是否报错 判断闭合符号 判断注入类型 构建payload 手工注入或者编写脚本 基本注入类型 报错型注入 floor公式(结果多出一个1):and (se ...

  2. sql注入原理+mysql相关知识点

    什么是SQL注入 sql就是经常说的数据库,而sql注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.SQL注入是比较常见的网络攻击 ...

  3. 关于防止sql注入的几个知识点

    1.PDO预处理是首选. 你可以把他看成是要运行的sql的已经编译过的模板,它可以用变量参数进行定制 它有两个显著优点: 1.1:查询仅需解析一次,但可以用相同或者不同参数执行多次.换句话说如果要以不 ...

  4. sql注入知识点

    需找sql注入点1\无特定目标inurl:.php?id= 2\有特定目标:inurl:.php?id= site:target.com 3\工具爬取spider,对搜索引擎和目标网站的链接进行爬取 ...

  5. 有关SQL注入的一些小知识点

    1.判断注入点: 本质原理是找一个需要后台处理后,提交给数据库的点,我理解为用户可以控制并输入后台数据库的变量,比如我们DVWA SQL injection 的ID  ,我们可以通过闭合单引号,#注释 ...

  6. C# sql语句拼接时 like情况的防sql注入的用法

    今天下午同事问我一个比较基础的问题,在拼接sql语句的时候,如果遇到Like的情况该怎么办. 我原来的写法就是简单的拼接字符串,后来同事问我如果遇到sql注入怎么办.我想了下,这确实是个问题. 刚在网 ...

  7. SQL注入原理及绕过安全狗

    1.什么是SQL注入攻击 SQL注入攻击指的是通过构造特殊的输入作为参数插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令 http://www.xxx.com/list. ...

  8. SQL注入关联分析

    在Web攻防中,SQL注入绝对是一个技能的频繁项,为了技术的成熟化.自动化.智能化,我们有必要建立SQL注入与之相关典型技术之间的关联规则.在分析过程中,整个规则均围绕核心词进行直线展开,我们简单称之 ...

  9. Sql注入测试--Sqlmap

    慕课网sqlmap学习笔记: 一.SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 例如 (1)在url上 ...

随机推荐

  1. 使用CleanMyMac快速管理应用程序 优化Mac

    CleanMyMac作为一款专业的苹果电脑清理软件,它不仅仅能单纯的卸载不用.少用的应用,同时还支持:1.清理应用程序的数据文件,将应用重置回初始状态,减少空间占用:2.自动检查应用更新,保持应用的最 ...

  2. css3系列之linear-gradient() repeating-linear-gradient() 和 radial-gradient() repeating-radial-gradient()

    linear-gradient()  (线性渐变) repeating-linear-gradient()   (重复的线性渐变) radial-gradient()  (镜像渐变) repeatin ...

  3. idea中安装阿里巴巴的代码规范插件

    1.打开iead软件,从左上角点击File  ->  Settings  ->  Plugins 2.安装完成后,重启idea软件,即可正常使用了.

  4. CET-6备考丨词组、佳句积累

    一.片段积累 (2020/09/17) 近三年 CET6 - 翻译 Phrases or Expressions Notes drive to commute to and from work 开车上 ...

  5. Java lambda 分组后多列求和

    主要思路是reducing,可以像sql一样分组后多列求和处理成新对象等: select code,max(name)as name,sum(chengJi)as chengJi,sum(age)as ...

  6. python 爬虫 汽车之家车辆参数反爬

    水平有限,仅供参考. 如图所示,汽车之家的车辆详情里的数据做了反爬对策,数据被CSS伪类替换. 观察 Sources 发现数据就在当前页面. 发现若干条进行CSS替换的js 继续深入此JS 知道了数据 ...

  7. Redis分布式锁—SETNX+Lua脚本实现篇

    前言 平时的工作中,由于生产环境中的项目是需要部署在多台服务器中的,所以经常会面临解决分布式场景下数据一致性的问题,那么就需要引入分布式锁来解决这一问题. 针对分布式锁的实现,目前比较常用的就如下几种 ...

  8. Sql注入--数字型手工测试

    Sql注入--数字型手工测试 漏洞原因:是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的"数据"拼接到SQL语句中后,被当作SQL语句的一部分执行. 从而 ...

  9. Python的富比较方法__le__、__ge__之间的关联关系分析

    Python的富比较方法包括__le__.__ge__分别表示:小于等于.大于等于,对应的操作运算符为:"<=".">=".那么是否象普通数字运算一 ...

  10. 第九章 Python文件操作

    前一阵子写类相关的内容,把老猿写得心都累了,本来准备继续介绍一些类相关的知识的,如闭包.装饰器.描述符.枚举类.异常等,现在实在不想继续,以后再开章节吧.本章弄点开胃的小菜提提神,介绍Python中文 ...