首页 > 数据库 >实战篇——SQL注入sqli-labs-master靶场实战一

实战篇——SQL注入sqli-labs-master靶场实战一

时间:2024-07-01 18:09:57浏览次数:17  
标签:实战篇 单引号 闭合 labs sqli 报错 盲注 id concat

实战篇——SQL注入sqli-labs-master靶场实战(1)

SQL注入的原理

没有对用户的输入进行合法性判断或过滤,而是直接将其拼接至SQL查询语句当中作为命令执行,从而导致非法操作。

SQL注入的检测

也就是闭合方式的判断,根据报错信息的不同情况可以分为3类——(1)有报错信息 (2)无报错信息,但语法错误和语法正确可区分 (3)无报错信息,语法错误和语法正确不可区分。

(此处参考了https://blog.csdn.net/weixin_46634468/article/details/120480080?spm=1001.2014.3001.5506)

(1) 有报错信息

这是最理想的情况,直接跟上转义字符\即可。

当闭合字符遇到转义字符时,会被转义,那么缺少闭合字符的语句就不完整了,就会报错。

因此转义字符后面跟着的字符就是闭合字符,如果没有就是数字型。

Less-1:单引号闭合

image-20240701150916173

Less-2:数字型

image-20240701151023493

Less-3:单引号加括号闭合

image-20240701151116572

Less-4:双引号加括号闭合

image-20240701151205476

(2) 无报错信息,但语法错误和语法正确可区分

首先尝试:
?id=1'
?id=1"
都报错就是数字型。

单引号报错,双引号不报错:
继续尝试:
?id=1'#
不报错就是单引号闭合,报错就是单引号加括号闭合。

单引号不报错,双引号报错:
继续尝试:
?id=1"#
不报错就是双引号闭合,报错就是双引号加括号闭合。

事实上语法正确又可以分为两类——查询结果非空和查询结果为空,上述判断方法针对的是语法错误和查询结果非空可区分的情形,而针对语法错误和查询结果为空可区分的情形只需将1改为-1即可。

image-20240701152614539

image-20240701152633622

单引号报错,双引号不报错

image-20240701152741587

单引号加注释符不报错,判断为单引号闭合。

(3) 无报错信息,语法错误和语法正确不可区分

也就是回显内容和输入内容无关(时间盲注),这种情况可以通过and sleep(5)#这样的方式根据响应时间判断。

正常情况:

image-20240701153612955

延时响应:

image-20240701153703721

据此判断为单引号闭合。

SQL注入的利用:

(1) 联合注入

有显示位首选联合注入

1.通过order by判断字段数为3

image-20240701154108311

image-20240701154146216

2.通过union select 1,2,3判断显示位为2和3

image-20240701154311972

3.爆库(group_concat)

image-20240701154606674

4.爆表(group_concat)

image-20240701154849680

5.爆字段(group_concat)

image-20240701155057453

6.爆数据(group_concat+concat_ws)

image-20240701155518086

(2) 报错注入

无显示位但有报错信息首选报错注入。

报错注入一般需要使用特定的函数,下面介绍三个可用于报错注入的函数。

(此处参考了https://blog.csdn.net/l2872253606/article/details/124423275)

1. extractvalue

EXTRACTVALUE (XML_document, XPath_string);
第一个参数:XML_document是String格式,为XML文档对象的名称;
第二个参数:XPath_string (Xpath格式的字符串);

返回内容:若Xpath正确则返回目标XML查询的结果,否则返回Xpath错误内容

在Xpath中,插入~和^等特殊字符是非法的,会报错,利用concat函数可以解析SQL语句。

?id=1' and extractvalue('a',concat('~',database(),'~'))#

image-20240701161614870

具体的爆库爆表爆字段爆数据的过程和联合注入没啥区别,唯一需要注意的是报错回显的内容最多只有32位,因此当字符串过长时需要使用substr、mid等截取函数

image-20240701161845929

image-20240701162442167

2. updatexml

UPDATEXML (XML_document, XPath_string, new_value);

第一个参数:XML_document是String格式,为XML文档对象的名称;

第二个参数:XPath_string (Xpath格式的字符串);

第三个参数:new_value,String格式,替换查找到的符合条件的数据;

返回内容:若Xpath正确则返回更改对象名称,否则返回Xpath错误内容

?id=1' and updatexml('a',concat('~',database(),'~'),'a')#

其实和extractvalue函数没啥区别

image-20240701163220663

3. floor

当group by与rand一起使用时,如果临时表中没有该主键,rand会再计算一次并将第二次计算结果插入临时表,导致主键重复报错

?id=1' and (select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.schemata group by x)a limit 0,1)#

image-20240701164515424

需要注意的是利用floor进行报错注入不能使用group_concat函数(原因我也不清楚),只能使用limit子句一个一个查询

image-20240701165018208

image-20240701165156637

(3) 布尔盲注

如果既没有显示位也没有报错信息,但查询结果非空和查询结果为空可区分,那么可以使用布尔盲注。

?id=1' and boolean_expression#
?id=-1' or boolean_expression#

手工盲注过程比较繁琐,可以考虑使用相关工具,下面利用Burpsuite进行布尔盲注。

先判断库的数量为9

image-20240701170705734

image-20240701170734458

再判断每个库名的长度(非手工盲注不需要这一步)

image-20240701171147451

image-20240701171549262

最后判断每个库的名称

image-20240701172013236

image-20240701173650584

可见第一个库的名称是information_schema......

后续爆表爆字段爆数据的过程就不再演示了,和爆库的过程基本一致。

(4) 时间盲注

如果既没有显示位也没有报错信息,甚至连查询结果非空和查询结果为空都不可区分,那就只好用时间盲注了。

?id=1' and if(boolean_expression,sleep(5),1)#

image-20240701174905773

image-20240701174825788

根据响应时间,判断库的数量为9。

利用时间盲注爆库爆表爆字段爆数据的过程就不再演示了,和布尔盲注基本一致。

标签:实战篇,单引号,闭合,labs,sqli,报错,盲注,id,concat
From: https://www.cnblogs.com/yaoguyuan/p/18278574

相关文章

  • sql-labs通关笔记(上)
    sql-labs通关笔记(上)这里我们先只讲解less-1到less-9联合查询注入Less-1:GET-Errorbased.Singlequotes-string界面在url中加入?id=1?id=-1判断注入点使用’或\来判断是否存在注入点payloadhttp://127.0.0.1/sqli/Less-1/?id=-1'报错信息near''-1''LIMIT0......
  • sqli-labs基础篇(1-22)
    ‍less-1字符型判断是否存在sql注入​?id=1and1=1--+​​​​?id=1'and1=1--+​​​​?id=1'and1=2--+​​​说明存在sql注入,并且注入类型为字符型注入联合注入先判断列数​?id=1'orderby3--+​有回显​​​?id=1'order......
  • 【sqlite3】联系人管理系统
    SQLite3实现简单的联系人管理系统有关sqlite3的基础知识请点击:SQLite3的使用效果展示:创建一个名为contacts.db的数据库首先,我们需要创建一个名为contacts.db的数据库,并建立一个名为"contact"的表,用于存储联系人信息。该表包含四个列:id、name、phone和email。以下是创......
  • SqlSugar操作Sqlite数据库
    SqlSugar操作Sqlite数据库SqlSugar官网.netcore和.net5/.net6/.net7/.net8/.net9/.net10  安装SqlSugarCore。netframework4.6+   安装SqlSugar。以下代码都在一个SqlSugarMethod类中。获得数据库对象:  这里要注意的是FilePath路径为生成程序的目录\bin\Debug\ne......
  • 小说爬虫-02 爬取小说详细内容和章节列表 推送至RabbitMQ 消费ACK确认 Scrapy爬取 SQL
    代码仓库代码我已经上传到Github,大家需要的可以顺手点个Star!https://github.com/turbo-duck/biquge_fiction_spider背景介绍上一节已经拿到了每个小说的编码:fiction_code,并且写入了数据库表。接下来,我们写一个小工具,将数据表中的数据,都推送到RabbitMQ中。为了保......
  • Uipath 如何连接SQLite数据进行操作
      1、下载SQLiteDatabaseActivitiesforUipathpackages,无需安装SQLite数据库驱动。2、SQLite查询操作   2.1添加查询活动:在UIPathStudio的“Activities”面板中,搜索并添加“ExecuteQuery”活动。这个活动用于执行SQL查询语。在“ExecuteQuery”活动的属......
  • Sqlite3数据库基本使用
    文章目录一、基本概念二、安装三、使用(一)系统命令(二)关系型数据库表(三)sql语句1.建表语句2.插入语句3.查询语句4.更新语句5.删除语句6.删除表7.对列的操作(一般不会用到)8.主键9.其他命令四、常用的API接口函数(一)API接口函数1.打开和关闭数据库文件2.获取错误信......
  • Web安全中的XSS攻击详细教学(一),Xss-Labs靶场通关全教程(建议收藏)
    Web安全中的XSS攻击详细教学,Xss-Labs靶场通关全教程(建议收藏)漏洞原理xss(crosssitescript)跨站脚本攻击,指的是攻击者往web页面插入恶意脚本代码,当用户浏览时,嵌入web页面里的脚本代码就会执行,从而达到恶意攻击用户的特殊目的,它主要分为俩种类型1. 存储型XSS(持久型):攻击者将......
  • INFINI Labs 助力开源与教育:免费许可证计划全面升级
    在数字化浪潮席卷全球的今天,INFINILabs深刻认识到开源项目和教育机构在技术创新与人才培养中的核心作用。因此,我们郑重推出全新升级的免费许可证计划,旨在全球范围内为开源社区和教育界提供有力支持,共同推动软件生态的繁荣与进步。一、产品实力与荣誉1.INFINIPizza:实时搜索的......
  • 【第19章】Vue实战篇之主页面
    文章目录前言一、代码1.主界面代码2.App.vue二、展示总结前言登录完成之后,应该自动跳转到主页面,接下来我们搭建主界面。一、代码1.主界面代码<scriptsetup>import{Management,Promotion,UserFilled,User,Crop,EditPen,......