欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

基于时延的盲道研究:受限环境下的内容回传信道

来源: 作者: 时间:2019-02-24 21:00 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助

在一次漏洞赏金活动中,挖到个命令注入的洞,我先以时延作为证明向厂商提交该漏洞,厂商以国内网络环境差为由(的确得翻墙)拒收,几次沟通,告知若我能取回指定文件 secret.txt 才认可。目标是个受限环境:禁止出口流量、NAT 映射至公网、无页面回显、无法猜测 web 目录,换言之,没有出口流量无法反弹 shell、NAT 隔离也就不能建立正向 shell、页面无输出想看到命令结果不可能、找不到 web 目即便成功创建 webshell 没有容器能解析。我如何才能查看 secret.txt,顺利拿到赏金呢?(嗯,金额是敏感信息嘛 5C7ZR2FOWDS35FZANBQXEZDTMVSWIIHFSCL67PE74W7IRZN7VPS25A7FWCDOLJEN422LX354QEFA====)
0×00 浅入深出
探讨技术问题,我习惯拿大家都能访问得到的环境作为例子,这样,一方面,你能通过操作来验证我的想法是否正确,另一方面,实践也能触发你对同个问题的不同思考。由于保密协议的原因,我没法对前面提到的真实案例作更多的细节描述,好不容易找到了一个环境类似的 wargame,与你分享。
http://natas9.natas.labs.overthewire.org,账号 natas9:W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl,提供源码,你得想法查看 /etc/natas_webpass/natas10 的内容:

命令注入,我习惯上先摸清服务端有哪些限制条件,是否限制内容长度、是否过滤特殊字符、是否过滤系统命令、白名单还是黑名单、是否要闭合单/双引号、操作系统类别,这些信息对于构造载荷至关重要。页面右下角给出了源码,难度降低了不少,但摸清限制条件,是你在其他黑盒测试场景中值得优先考虑的。ok,现在查看源码:

从代码可知,服务端未作任何恶意输入检查,直接将输入 $key 作为 grep -i $key dictionary.txt 的命令行参数传递给 passthru() 函数执行系统命令。
显然,未过滤最基本的命令替换符 $(),那么,提交 $(sleep 4),若应答延迟 4s 则可确认漏洞存在。(关闭攻击端网络带宽占用高的应用,避免影响结果)我先提交普通字符串 xxxx,应答为:

页面无实际内容输出,耗时约 0.3s。接下来提交 xxxx%24%28sleep+4%29,应答如下:

耗时约 4.3s,那么,可确认该接口存在命令注入漏洞。其中,两点注意:一是,载荷直接写在 burp 拦截的数据包中,没有经过浏览器 URL 编码,所以你得手动将字母和数字之外的字符按 URL 编码(burp 的 decoder 模块);二是,攻击载荷尽量包含先前一样的普通字符串,避免引起计时误差。
要利用漏洞获取 /etc/natas_webpass/natas10 内容,当前的代码环境为 grep -i $key dictionary.txt,首先呈现的思路是,注入命令分隔符以结束 grep -i,注入查看 natas10 内容的命令,注释掉余下的 dictionary.txt,这样,原始命令行被分隔成语法正确的三部份。命令分隔符用 ;,注释符号用 #。所以,构造如下载荷(黄色高亮)作为参数 key 的输入:

提交后可成功查看 natas10 内容 nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu:

适当增加难度,假设服务端过滤了所有命令分隔符(;|& 以及回车符),能否突破?简单思考后想到一种方式,代码环境中有 grep,它只要匹配上一个字符即可输出该字符所在行,那么,找个存在于 flag 中的任意字符,grep 就能输出完整的 flag。所以,构造如下载荷:

碰碰运气,看下 a 是否在 flag 中:

运气不错,同样成功拿到 flag。
再增加下难度,如果无页面回显,还有手法拿到 flag 么?
0×01 老姿势玩不转
针对无页面回显的场景,我常用获取内容的方式有如下几种:第一种,写入或下载 webshell;第二种,用 nc、bash、python 或其他脚本语言反弹 shell;第三种,用 curl、wget 访问我自己的 VPS,将内容放入 URL 的路径中,查看网络访问日志即可获取内容,这也是你喜爱的盲注。
第一种,写 webshell。先用 touch foo 确认 web 目录有无写权限:

查看文件列表:

[1] [2] [3] [4]  下一页

在一次漏洞赏金活动中,挖到个命令注入的洞,我先以时延作为证明向厂商提交该漏洞,厂商以国内网络环境差为由(的确得翻墙)拒收,几次沟通,告知若我能取回指定文件 secret.txt 才认可。目标是个受限环境:禁止出口流量、NAT 映射至公网、无页面回显、无法猜测 web 目录,换言之,没有出口流量无法反弹 shell、NAT 隔离也就不能建立正向 shell、页面无输出想看到命令结果不可能、找不到 web 目即便成功创建 webshell 没有容器能解析。我如何才能查看 secret.txt,顺利拿到赏金呢?(嗯,金额是敏感信息嘛 5C7ZR2FOWDS35FZANBQXEZDTMVSWIIHFSCL67PE74W7IRZN7VPS25A7FWCDOLJEN422LX354QEFA====)
0×00 浅入深出
探讨技术问题,我习惯拿大家都能访问得到的环境作为例子,这样,一方面,你能通过操作来验证我的想法是否正确,另一方面,实践也能触发你对同个问题的不同思考。由于保密协议的原因,我没法对前面提到的真实案例作更多的细节描述,好不容易找到了一个环境类似的 wargame,与你分享。
http://natas9.natas.labs.overthewire.org,账号 natas9:W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl,提供源码,你得想法查看 /etc/natas_webpass/natas10 的内容: 内容来自无奈安全网

命令注入,我习惯上先摸清服务端有哪些限制条件,是否限制内容长度、是否过滤特殊字符、是否过滤系统命令、白名单还是黑名单、是否要闭合单/双引号、操作系统类别,这些信息对于构造载荷至关重要。页面右下角给出了源码,难度降低了不少,但摸清限制条件,是你在其他黑盒测试场景中值得优先考虑的。ok,现在查看源码:

从代码可知,服务端未作任何恶意输入检查,直接将输入 $key 作为 grep -i $key dictionary.txt 的命令行参数传递给 passthru() 函数执行系统命令。
显然,未过滤最基本的命令替换符 $(),那么,提交 $(sleep 4),若应答延迟 4s 则可确认漏洞存在。(关闭攻击端网络带宽占用高的应用,避免影响结果)我先提交普通字符串 xxxx,应答为:

本文来自无奈人生安全网



页面无实际内容输出,耗时约 0.3s。接下来提交 xxxx%24%28sleep+4%29,应答如下:

耗时约 4.3s,那么,可确认该接口存在命令注入漏洞。其中,两点注意:一是,载荷直接写在 burp 拦截的数据包中,没有经过浏览器 URL 编码,所以你得手动将字母和数字之外的字符按 URL 编码(burp 的 decoder 模块);二是,攻击载荷尽量包含先前一样的普通字符串,避免引起计时误差。
要利用漏洞获取 /etc/natas_webpass/natas10 内容,当前的代码环境为 grep -i $key dictionary.txt,首先呈现的思路是,注入命令分隔符以结束 grep -i,注入查看 natas10 内容的命令,注释掉余下的 dictionary.txt,这样,原始命令行被分隔成语法正确的三部份。命令分隔符用 ;,注释符号用 #。所以,构造如下载荷(黄色高亮)作为参数 key 的输入:

www.wnhack.com



提交后可成功查看 natas10 内容 nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu:

适当增加难度,假设服务端过滤了所有命令分隔符(;|& 以及回车符),能否突破?简单思考后想到一种方式,代码环境中有 grep,它只要匹配上一个字符即可输出该字符所在行,那么,找个存在于 flag 中的任意字符,grep 就能输出完整的 flag。所以,构造如下载荷:

碰碰运气,看下 a 是否在 flag 中:
本文来自无奈人生安全网
运气不错,同样成功拿到 flag。
再增加下难度,如果无页面回显,还有手法拿到 flag 么?
0×01 老姿势玩不转
针对无页面回显的场景,我常用获取内容的方式有如下几种:第一种,写入或下载 webshell;第二种,用 nc、bash、python 或其他脚本语言反弹 shell;第三种,用 curl、wget 访问我自己的 VPS,将内容放入 URL 的路径中,查看网络访问日志即可获取内容,这也是你喜爱的盲注。
第一种,写 webshell。先用 touch foo 确认 web 目录有无写权限:

查看文件列表:
无奈人生安全网

[1] [2] [3] [4]  下一页

内容来自无奈安全网

。 (责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。