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

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

来源:本站整理 作者:yangyangwithgnu 时间:2018-09-10 TAG: 我要投稿

其中,base64 命令输出默认按每行 76 个字符进行折行,用参数 -w0 取消该行为。
现在,我能把任意字符串转为只含字母和数字的新字符串,由于猜解字母和数字的方式不同,所以,还剩最后一个问题,如何区分待猜解的字符是字母还是数字?我的思路如下:
• 第一步,不管三七二十一,执行 sleep ?,将待猜解字符直接丢给 sleep,若有延迟则肯定为数字,延迟几秒则为几,若无延迟则可能为 0、字母、+、/、=;
• 第二步:执行 sleep $(echo ? | tr 0 4) 问询是否为 0,若延迟说明是 0,否则可能为字母、+、/、=;
• 第三步,执行 sleep $(echo ? | tr a 4) 问询是否为 a,若延迟说明是 a,否则可能其他字母、+、/、=
• 第四步,重复第三步即可猜解出。
观察下,第二、三步相同,所以,结论是:先当成数字给丢 sleep ?,若延迟则是几秒就是数字几;若无延迟则用字典 [0a-zA-Z+/=] 执行 sleep $(echo ? | tr §x§ 4) 暴破,其中,? 代表待猜解字符、§x§ 为枚举变量。
0×03 再次挑战
好了,已经探索出用时延作为字符猜解的方法,前面的 wargame 在假定的受限环境下(禁止出口流量、页面无输出、web 目录无写权限),我们尝试用时延作为传输内容的载体。
通过其他手法我们已经晓得 flag 为 U82q5TCMMQ9xuFoI3dYX61s7OZD9JKoK,并不包含特殊字符,为了我们讨论的主线清晰,暂不将其进行 base64 编码。ok,开始表演!
第一步,了解正常访问耗时作为基准值。尽可能让攻击端带宽空闲,提交普通字符串 xxxx:

页面无实际内容输出,耗时约 0.3s。
第二步,获取 /etc/natas_webpass/natas10 的内容长度。目标上执行 $(sleep $(cat /etc/natas_webpass/natas10 | wc -c)),等待时长即为 natas10 内容长度:

耗时 33.4s,抛去基准值,可推测出 natas10 内容长度大概是 33,由于 cat 自动添加换行符,所以准确值应为 32。如果担心单次测试存在误差,可以多试几次,取高概率值(非均值)。URL 编码后的载荷看起来不直接,你把光标移过去后稍作停留,burp 自动解码,这样是不是清晰多了。
另外,natas10 内容并不太多,延迟 32s 还能接受,如果是 1024s 呢?那就只能借助 cut 逐一提取各位后猜解,你,应该明白我在说什么嘛。
第三步,猜解所有数字字符。前面说过,猜解数字([1-9])和字母([0a-zA-Z+/=])采用完全不同的手法,我先将字符串的中的每个字符当成数字,逐一给丢 sleep ?,哪个字符有延迟则其一定是非零的某个数字,且延迟几秒就是数字几。
目标上执行 $(sleep $(cat /etc/natas_webpass/natas10 | cut -c1)) 猜解第一个字符,我要猜解 32 个字符,所以,将 cut -c§1§ 中的 -c 参数作为枚举变量、字典为 [1-32]:

我把并发数设为 64,十秒不到就暴破完了,要查看每次请求的耗时,只需在 intruder attack 窗口中,勾选 columns – response completed 即可,按耗时降序排列:

其中,由于当前猜测的是 [1-9] 的数字,网络误差只可能大于最小的 1s,所以耗时小于 1s 的可忽略,大于 1s 的就一定准确吗?网络耗时受诸多元素影响,单次结果不能代表真实情况,我得多次验证。所以,我选中耗时大于 1s 的 15 条记录,点击 request items again 再次批量提交请求:

这次只剩 6 条、第三次提交后变成 5 条、第四次 4 条、第五六七次的数量和耗时均与前次相同,稳定值可作为信任值:

由图可知,27 位的字符为数字 7、15 位 1、5 位 1、22 位 1,填入 32 位的 flag 中 ????1?????????1??????1???7?????。
第四步,猜解所有字母字符。说得不太严谨哈,应该是 [0a-zA-Z+/=]。目标上执行 $(sleep $(cat /etc/natas_webpass/natas10 | cut -c§1§ | tr §x§ 2)),其中,将 cut -c§1§ 中的 -c 参数作为枚举变量 1、字典为 [1-32] 剔出 27、15、5、22 之外的数字,将 tr §x§ 2 中的参数 §x§ 作为枚举变量 2、字典为 [0a-zA-Z+/=],两个枚举变量采用 cluster bomb 方式组合暴破:

如果字典是连续数字,intruder 的 payload type 选 numbers 可以快速生成,但这里的枚举变量 1 的字典并非连续数字,而是从 [1-32] 中剔出 27、15、5、22,三十来个数字,咬咬牙手动输入也还能接受,如果是三千个数字呢?得找个自动化的方式。隔壁王姐都会的 python 肯定是选择之一,现在我们不是在讨论命令注入么,命令行是我的首选,seq 1 32 > num.lst 再剔出那 4 个数字即可:

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

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