当前位置:   article > 正文

SQL注入使用_mysql sql注入命令执行

mysql sql注入命令执行


前言

随着自己学习网络安全有段时间了,发现自己过于自信了,什么都学,什么都觉得自己懂了,掉过头来原理都记不住,无奈,只好从头开始整理,权当自己复习一遍了

一、OWASP10

在这里插入图片描述

二、SQL注入的原理

本质上是把用户输入的数据当代码进行执行
两个关键条件即:
1.用户能控制输入
2.原本程序要执行的代码与用户的输入进行了拼接
如执行以下代码:

$id = $_GET['id'];
$query = "select * from information where id = "id" limit 0,1";
  • 1
  • 2

变量id的值由用户提交,在正常情况下,假如用户输入的是1,那么SQL语句会执行:
select * from information where id = 1 limit 0,1

但是假如用户输入一段有SQL语义的语句,比如:
1 or 1 =1 %23

那么,SQL语句在实际的执行时就会如下:
select * from information where id = 1 or 1 = 1 %23

满足了上述条件,用户可以控制变量id,原本要执行的代码,拼接了用户的输入。

1.SQL常出现场景

在这里插入图片描述
一切可以与数据库进行交互的地方都有可能出现

2.SQL注入的分类

根据数据传输方式分为:GET型、POST型、COOKIE型。
根据数据类型分为:数字型、字符型。
根据注入模式分为:
基于联合查询的注入模式
基于报错的注入模式
基于布尔的盲注
基于时间的盲注
堆叠查询的注入模式

3.SQL注入的一般步骤

1.求闭合字符
2.选择注入模式
3.爆数据库
4.爆表名
5.爆列名
6.爆字段

三、mysql的一些基本

1.mysql中的注释风格

单行注释,#后直接加内容:select user();#this is a cmmect
单行注释,–后面需加空格:select user();-- this is a commect
多行注释,/**/中见可以跨行:

select user();/*this is a cmmect*/
  • 1

或:

select user();/*this is a
 cmmect*/ +1;
  • 1
  • 2

2.mysql中的内联注释

select /*!user()*/;
或者
/*!50001 select user()*/;
  • 1
  • 2
  • 3

内联注释是MySQL数据库为了保持与其他数据库兼容,特意新添加的功能 。
为了避免从MySQL中导出的SQL语句被其他数据库使用,它把一些 MySQL特有的语句放在 /*! … */ 中,这些语句在不兼容的数据库中使用时便不会执行。而MySQL自身却能识别执行。
/*50001 */表示数据库版本>=5.00.01时中间的语句才会执行。
在SQL注入中,内联注释常用来绕过waf。

3.mysql中的union联合查询

union 操作符用于拼接两个或者多select查询语句union中的每个查询必须拥有相同的列数
如:select 1 union select 2 union select 3;可以执行成功
但是select 1,2 union select 3;执行会报错

4.mysql中的 order by 语句

order by 语句用于根据指定的列对结果集进行排序。
order by语句默认按照升序对记录进行排序.

select * from information;  --正常显示结果
select * from infoemation order by 3; --以第三列结
  • 1
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号