注入攻击基础知识

简介: 【web安全学习】注入攻击基础知识

注入攻击分类

  • SQL注入
  • 命令注入
  • XML注入
  • LDAP注入

SQL注入

概念
SQL的攻击方式是在客户端的输入数据中插入SQL命令,然后发送到 服务端,服务端对数据进行解析并执行非预期的操作。

可以SQL注入的条件

  1. SQL语句中包含不可信任的数据,如用户输入等。
  2. 动态构建SQL语句。(比如说在名字中添加一些单引号,分号,来人为的改变select语句的形式,以达到自己想要输出的结果)

例如:
==ShipCity = TianJin==
select * from OrdersTable where ShipCity = ‘TianJin’
==ShipCity = TianJin’; drop table OrdersTable- -==
select * from OrdersTable where ShipCity = ‘TianJin’; drop table OrderTable --’
(这里提示说,这个;后就表示是另一个SQL语句了,上面第二个强行在名字后加单引号,使得名字这个串就封闭了,所以后面跟的drop语句依旧可以执行,这样就达到了sql注入攻击的目的)

注:连续两个减号字符“--”后的文字 为注解;“/”和“/”包围起来的文字为注释,采用“;”字符区分不同命令 注意字符都是单引号括起来的。

SQL注入的特点

  • 普遍性
  • 隐蔽性
  • 简单性
  • 危害性

SQL注入攻击过程*重点

  1. 探测SQL注入点

    • 通常来说sql注入攻击存在于一个动态网页中,需要你输入一些参数的操作中
  • 如果参数是数字,测试id=2-1与id=1返回的结果- 是否相同,如果做了 2-1=1的运算,说明可能存在数字型注入。
  • 在参数后面加单引号或双引号,判断返回结果是否有报错
  • 添加注释符,判断前后是否有报错,如id=1' --+ 或 id=1" --+ 或 id=1' # 或id=1" --+ 这里的+号是用来当做空格来用,防止注释减一这样的情况
  • 在括号里面的参数:SELECT first_name, last_name FROM users WHERE user_id = ('$id');可以在参数后面加单双引号和括号,如 id=1') --+ 或 id=1") --+ 或id=1') # 或id=1") --+
  • 参数后面跟or 或者and,判断返回结果是否有变化,如1' or 'a'='a
    或者and 'a'='a或者1' or '1'='2
  • 如果返回的正确页面与错误页面都一样,可以使用时间延迟判断是否存 在注入,如 1' and sleep(5)
  1. 判断数据库类型 (你比如说如果是mysql数据库的话,会有一个默认的数据库名和表名来访问,也可以获得很多信息)

MySql中的information_schema 结构用来存储数据库系统信息
information_schema 结构中这几个表存储的信息,在注入中可以用到的几个表。
SCHEMATA 存储数据库名的,
关键字段:SCHEMA_NAME,表示数据库名称
TABLES 存储表名的
关键字段:TABLE_SCHEMA表示表所属的数据库名称;
TABLE_NAME表示表的名称
COLUMNS 存储字段名的
关键字段:TABLE_SCHEMA表示表所属的数据库名称;
TABLE_NAME表示所属的表的名称
COLUMN_NAME表示字段名

  1. 提升权限,进一步攻击

SQL注入分类

  1. 数字类型的注入;
  2. 字串类型的注入;
  3. GET注入;
  4. POST注入;

    1. COOKIE注入;
  5. HTTP注入。
目录
相关文章
|
2月前
|
安全 关系型数据库 Shell
Web安全-浅析CSV注入漏洞的原理及利用
Web安全-浅析CSV注入漏洞的原理及利用
130 3
|
2月前
|
XML JSON 安全
Web安全-代码注入
Web安全-代码注入
25 6
|
1月前
|
SQL 前端开发 安全
sql注入原理与实战(一)
sql注入原理与实战(一)
|
安全 网络安全 PHP
网络安全实验十四 文件上传与注入攻击
网络安全实验十四 文件上传与注入攻击
134 1
|
SQL 安全 关系型数据库
谈一谈|SQL注入之显错注入
谈一谈|SQL注入之显错注入
119 1
|
SQL 安全 Linux
Web安全——命令注入漏洞详解
Web安全——命令注入漏洞详解
561 0
|
SQL 安全 测试技术
[网络安全]SQL注入原理及常见攻击方法简析
一般而言,登录验证逻辑语句为: select * from 表名 where name(用户名)='$输入' and pass(密码)='$输入' 当数据表中同时存在输入的name和pass字段时,页面将回显登录成功。
757 0
|
SQL 存储 安全
WEB安全之常见漏洞篇之SQL注入(基础 原理篇)
WEB安全之常见漏洞篇之SQL注入(基础 原理篇)
505 0
|
SQL 存储 安全
SQL注入基础相关概念
SQL注入基础相关概念
100 0
SQL注入基础相关概念
|
SQL 网络安全 PHP
渗透测试-SQL注入之堆叠注入-攻防世界supersqli实战
渗透测试-SQL注入之堆叠注入-攻防世界supersqli实战
渗透测试-SQL注入之堆叠注入-攻防世界supersqli实战