赏金猎人学习纪录6

渗透技巧 11个月前 admin
44 0 0

声明:没有经过原作者授权,不得转载;

前言

今天星云安全第三期明天正式上线了,有想报名的欢迎大家报名!!

漏洞一:First SQLI

这是一个下载某音乐音频的接口

赏金猎人学习纪录6

简简单单来一个万能的单引号

赏金猎人学习纪录6

然后我们需要判断这个注入点是不是完整且可用的。发现闭合似乎还是没用,我们就要判断是不是可能存在其他类型的注入,总之就是尝试且别放弃!

赏金猎人学习纪录6

true条件

赏金猎人学习纪录6

false条件

赏金猎人学习纪录6

到这里我想兄弟们应该能有办法去注入了,但是这里也需要提醒兄弟们谨记一句话,你挖到了SQL并不代表你能注入成功(G哥名言)

还有这位博主的一些建议我觉得非常不错“所以基本上你的第一个目标是试图确定你可以注入什么,以及你可以在SQL查询中的哪个位置注入,在这里,你应该对在后端插入的查询有一个更远的想象力,并假设很多想法,比如看到参数名称,观察开发人员在实现这个名称的参数时是怎么想的?他是否尝试检索音频与某种其他参数,他结合他们与UNION查询?或者他只是想用MySQL查询将你的更新结果保存在数据库中?”

Oracle ==> SELECT banner FROM v$versionMicrosoft SQL Server ==> SELECT @@versionPostgreSQL ==> SELECT version()MySQL ==> SELECT @@version
MySQL & MSSQL: ?lugu=316+AND+(SELECT+SUBSTRING(@@version,1,1))='4'Oracle: ?lugu=316+AND+(SELECT+SUBSTR(version(),1,1)+FROM+DUAL)='4'PostgreSQL: ?lugu=316+AND+(SELECT SUBSTRING(version(), 1, 1) = '4'

根据自己组合sqlpayload进行注入确定

赏金猎人学习纪录6

赏金猎人学习纪录6

赏金猎人学习纪录6

到这里这位博主依旧在告诉我们注入不能只用sqlmap,因为sqlmap留下了很多waf和检测设备的特征或者流量,很有可能你刚注入那边就内部已知了,而且面对一个注入时我们应该要判断他的数据库类型从而才能组合payload,那么我们应该怎么去判断数据库?当然你可以尝试一些数据库的特征、一些不一样的函数、不一样的注释符等等。其实说白了就三步,发现注入、判断注入、实现注入。别小看这三步,很有可能你一步都搞不定

然后我们继续进行注入

SELECT 1 FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME LIKE 'a%'
  • INFORMATION_SCHEMA.SCHEMATA:是存储数据库元数据的系统目录表。

  • SCHEMA_NAME:是这个表中存储数据库名称的列。

  • LIKE ‘a%’ :是过滤数据库名称的条件,只返回以字母“a”开头的数据库名称。

  • 因此,如果数据库以(a)字符开头,则该查询将返回1

赏金猎人学习纪录6

已经获得INFORMATION_SCHEMA表中数据库名称的正确第一个字符剩下就好操作了。这里可以闭环注入了!

漏洞二:Second SQLI

同一个项目不同的接口,一个从数据库中搜索商店中的项目,按照第一个SQLI案例说的,我们要站在开发的角度,或者长远的角度去思考这个接口可能走后端吗?可能走数据库吗?可能有注入吗?开发会怎么写呢?

赏金猎人学习纪录6

还是用我们万能的单引号,发现成功报错了sql语句

赏金猎人学习纪录6

三步流,可能存在注入、判断是mysql数据,因为有一个mysql_fetch_array的方法、实现注入

u'+AND+(SELECT+1+FROM+(SELECT(SLEEP(10)))a)+AND+'u'%3d'u

赏金猎人学习纪录6

赏金猎人学习纪录6

漏洞三:Third SQLI

没错还是同一个项目,检索与音频相关某些信息。

赏金猎人学习纪录6

继续上万能的单引号

赏金猎人学习纪录6

不知道兄弟们有没有看到响应体的变化。不是响应的长度,而是响应的内容,注意两张图片上的响应,它在两种情况下看起来是一样的,这就是很多师傅们在看到一样的内容或浏览器上的响应没有差异时继续测试的原因,但实际上,这个接口只是在页面的末尾检索HTML格式响应中的小尺寸音频信息,这是存储在数据库中,只是打印它的名称和其他一些属性相关的音频,如(文件名、音频作者、上传音频的日期等),当注入单引号时,开发人员在注入任何恶意字符时似乎在后端处理这种情况,他从查询中退出,并没有执行它,也没有给予任何关于音频的信息,这就是我对为什么响应的长度减少了近2500字节的假设,所以这就是你需要如何考虑你测试的任何功能,所以这里的区别实际上是在响应的主体中,但在HTML响应的结尾处,在你的屏幕上不明显,你应该向下滚动查看整个响应,这就是为什么我从一开始就告诉你,在第一个错误的提示,观察任何(微小的变化),我字面上的意思是,差异(响应的长度,响应的内容,响应延迟时间)如果你想知道的反应’的内容我想让兄弟们明白的是,在某些情况下,当你注入单引号或双引号所描述的,你会发现服务器响应的长度相同,但响应的主体完全不同。

回到注入本身,我们猜测可能是存在注入的,因为长度发生了变化。这种时候我一般也会用延迟来更加判断我的猜想。

u'|(IF((now())LIKE(sysdate()),SLEEP(6),0))|'u

赏金猎人学习纪录6

赏金猎人学习纪录6

很遗憾这个注入最终读取不了数据,这位赏金的白帽也叫了不少师傅进行了测试,最终都不能读数据。

漏洞四:Fourth SQLI

还是这个项目,负责检索域上传到数据库的音频作者相关的信息。和大多数情况一样,单双引号起手。

赏金猎人学习纪录6

赏金猎人学习纪录6

看到了sql语句的报错信息,我们三步可以继续了。

博主分析了这个SQL语句

图片中的报错显示了列名lang_id,表名cms_objects和object_id(也是来自数据库的另一个列名),所有这些语句似乎不是像这样检索,所以我用错误的SQLIPAYLOAD

一般他面对报错注入,他的方法是两个||这里是用来连接SQL中的字符串的,你要不会就百度,还不行就谷歌

' || (select '') || '

如果它给出200OK,这意味着它是一个MySQL或MSSQL,但如果它在响应中给出一个错误,这将表明它不是MSSQL或MySQL,所以根据我的经验,这是一个有效的查询在MSSQL和MySQL,但它不是在Oracle,因为Oracle需要子句FROM。

' || (select '' from dual) || '

如果它给出一个200OK,这意味着它是一个Oracle数据库,那兄弟们要提问了什么是dual?

在Oracle SQL中,DUAL表是一个单行、单列表,当您需要执行计算或检索单个值而不引用实际表时,通常会使用该表。它是计算表达式、函数或子查询的方便方法。

通常,当您想要选择或操作不是来自表的数据时,例如函数或表达式的结果,可以使用DUAL。

赏金猎人学习纪录6

它给了我 200OK,这表明它是一个 Oracle,并表示这是一个完全不同的响应长度,这里这位赏金博主产生了疑惑,为什么服务器响不同的长度,这里有大哥看到了欢迎私信留言!!到这里报错注入的思想可以拜拜了,我们应该要换成延迟了。

?id=708'+ANd+E%4cT/**/(1337%3d1337,/**/sL%45EP%283*4)/**//**//**/)+OR+/**/'1337'%3d'bug4y0u

拆分payload讲解

  • ELT(1337=1337,SLEEP(12)):字符串的这一部分是试图使用ELT函数执行基于时间的SQL注入攻击。如果条件1337=1337为真,它会尝试让数据库服务器暂停12秒。

  • or:用于合并条件,但也是有效载荷的一部分。

  • 1337’=’Bug4y0u’:这部分字符串只是试图将 1337 与 Bug4y0u 字符串进行运算,在这种情况下当然会返回 false,但是,由于存在 AND 和 OR 运算,从左边开始的 AND 运算会在 OR 运算之前先进行运算,所以在有效载荷的最末端添加 OR 部分看起来毫无用处 

  • 在某些情况下,这种看起来没用的操作,即在 “1337’=’Bug4y0u'”这样错误的运算中加入 OR 运算,有时就能绕过防火墙规则,或者甚至可以在有效载荷中加入 “1’=’2′”这样任何错误的 OR 运算,当然,有时需要适当的编码和一点混淆才能通过。

赏金猎人学习纪录6

赏金猎人学习纪录6

到这里三步曲才算正式闭环

总结:

兄弟们可能日常挖洞都是一些什么逻辑洞,XSS这类。很多时候都在思考这年头注入应该早就没了。其实不然,我跟圈里很多师傅交流过,现在的注入依然还有,依然还在一直挖。这时候就要思考人家为什么能挖到这个SQL。希望这篇文章对兄弟们有所收获!

原文始发于微信公众号(炮炮安全):赏金猎人学习纪录6

版权声明:admin 发表于 2023年12月15日 下午1:06。
转载请注明:赏金猎人学习纪录6 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...