前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >渗透测试中利用基于时间差反馈的远程代码执行漏洞(Timed Based RCE)进行数据获取

渗透测试中利用基于时间差反馈的远程代码执行漏洞(Timed Based RCE)进行数据获取

作者头像
FB客服
发布2018-02-23 17:10:32
1.4K0
发布2018-02-23 17:10:32
举报
文章被收录于专栏:FreeBufFreeBuf

在最近的渗透测试项目中,为了进一步验证漏洞的可用性和危害性,我们遇到了这样一种情形:构造基于时间差反馈的系统注入命令(OS command injection time based ),从某逻辑隔离的服务器中实现数据获取。

以下是测试过程中的相关思路整理,仅供借鉴参考(渗透测试最终利用工具请移步GitHub-TBDEx)。

漏洞说明

由于该逻辑隔离服务器仅能通过API服务提供的程序接口实现特定服务访问,而在对该API接口的测试过程中,我们发现了一个有趣的GET request请求,其中包含了两个参数,一个为字符串,另一个为请求包的ID号。

之后在对参数的fuzzing中,其对单引号的处理方式和特征貌似像是SQL注入漏洞,但在漏洞利用过程中却不能成功实现注入攻击,然而,当我们执行了‘sleep 10′命令后,HTTP response在10秒钟之后有了回应,这下可能有戏了!我们首先想到的是,该API程序完蛋了,因为这样就可以对API服务端执行远程代码了。

Payload不能有效执行

但一切都高兴得太早,本来我们通过HTTP响应头判断API服务应该是架设在Windows平台上,但漏洞利用payload只在Bash或PowerShell下可用,所以,只能重新在Bash或PowerShell模式下进行可行性测试。

为了模拟实际测试效果,我们通过在linux环境下运行形如以下、包含sleep命令的“time if”判断语句来查看系统反馈信息:

linux下time命令可以获取到一个程序的执行时间,包括程序的实际运行时间(real time),以及程序运行在用户态的时间(user time)和内核态的时间(sys time)。

利用这种方式,我们在模拟服务器上进行了各种ncat、wget、curl测试和其它数据窃取动作,如FTP 连接、 DNS请求,甚至是ICMP请求,但依然不能成功,没有效果。后来,我们才意识到,由于目标服务器主机处于有防火墙的逻辑隔离网络内,我们执行的命令估计被防火墙阻挡了。

构造基于时间延迟的判断执行命令

之后,一个同事建议可以尝试用形如以下sleep语句来运行包含的任务命令,这样一方面可以通过时间延迟来逐字符判断输出值,又能实现命令自动化,就像从基于时间(time-based)的SQL注入中获取输出信息一样。

考虑到网络延迟,我们首先想到的是,构造一个包含以下命令,按字符位置进行猜解判断的脚本,可以看到,以下黄色框内命令中:

time if [ $(whoami | cut -c 1 == r)]; then sleep 5; fi

如果系统用户为root,通过whoami | cut -c 1 == r 方式取root的第一个字符“r”成功,则相应的时间延迟为5秒,与判断命令中的sleep 5结果一致,以此方式猜解出系统用户为root。

Linux系统cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。 -b :以字节为单位进行分割 -c :以字符为单位进行分割,cut -c 1 取第1个字符 -d :自定义分隔符,默认为制表符 -f :与-d一起使用,指定显示哪个区域 -n :取消分割多字节字符

突破限制构造有效Payload命令

你可以想像用这种方式是多么的繁杂,更烦人的是,前述发现的GET请求参数中竟然有48个字符的最大限制, 而我们构造的payload远远超过48个字符。为了绕过这种限制,我们只有把任务命令的输出结果重定向到系统某个临时文件中,然后用cut方式分割这些输出结果,取出需要的位置字符,结合time命令的时间延迟方式判断猜解,大概方法如下:

使用以上方法构造的payload可以控制在48个字符以内,但是在payload获取数据时候又遇到字符限制的问题:只能获取9个字符以内的数据。之后,我们想到可以向远程主机中分段写入命令,形成脚本,之后,利用这个过渡脚本就可以执行某种命令。

我们最终把以上这些所有想法和思路集成为了一个python工具TBDEx(Time Based Data Exfiltration Tool),另外,为了提高运行效率,用猜解判断字符的ASCII码值方式替代了单纯的字符判断。

为什么不用Commix?

Commix是一款系统命令注入漏洞自动化测试工具,它具有包含Time-based在内的很多数据获取技术。可能有人会问,怎么不用Commix呢?这主要有两方面原因:

Commix形成的payload非常长而且在我们的渗透场景中执行不成功 Commix对我们特定命令的执行非常耗时,读取一个whoami命令都很慢

TBDEx如何使用?

该工具包含三个部分:

length.py或length.bat:猜测判断重定向输出文件中包含的执行命令结果长度 ascii.py或ascii.bat:猜测判断特定位置字符的ASCII码值 timebased.py:程序执行主文件,发送命令请求并分析响应时间是否满足漏洞利用条件

数据获取过程:

把执行命令结果重定向输出到某个文件 用length.py或length.bat猜测判断执行命令结果输出长度 猜解判断获取数据的实际ASCII码值

对执行命令结果输出长度的判断,请遵循以下几个综合判断步骤:

1.输出长度是否大于 0? : python l.py 0 0 0 4 =>没有检测到延迟,这意味着它是真的; 2.输出长度是否大于10?: python l.py 10 0 0 4 =>检测到4秒延迟,这意味着这是假的 3.输出是否等于10?: python l.py 10 1 0 4 =>没有检测到延迟,这意味着是假的 4.输出是否等于9?: python l.py 9 1 0 4 => 检测到4秒延迟,这意味着我们找到了实际的输出长度

得到执行命令输出结果长度之后,我们就可以用程序进行实际的ASCII码值猜解:

python ascii.py {CHAR_POS} {ASCII_VALUE} {IS_GREATER} {WHERE_THE_OUTPUT_IS_AT} {TIME_DELAY}

当然,用主程序来执行的例子如下:

python timbesed.py -url http://192.168.207.128/ml.php?c=%here% -payload_limit 48 -tmp

执行uname -a:

完美获取长度达2863字符的/etc/password结果:

测试链接http://192.168.207.128/ml.php中的ml.php可以是以下内容,感兴趣的话,可以自行尝试:

运行TBDEx工具的必备安装组件pycurl:

pip install pycurl 或 apt-get install pycurl 或 apt-get install python-pycurl

TBDEx的使用命令和运行参数:

-h, –help show this help message and exit -url URL URL -post POST POST -threads THREADS Threads -cookie COOKIE FILE Cookie File -file HEADER FILE Burp request file -retry RETRY Retry request N times in case of network errors -timeout TIMEOUT General timeout request -time AVGTIME Added timeout to request -os OS OS type (U unix/linux , W windows) -payload limit LIMIT If there is any command length limitation -force write Force writing auxiliary files -tmp Writing auxiliary files in tmp folder

TBDEx工具下载:Github

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 漏洞说明
  • Payload不能有效执行
  • 构造基于时间延迟的判断执行命令
  • 突破限制构造有效Payload命令
  • 为什么不用Commix?
  • TBDEx如何使用?
    • 数据获取过程:
      • 运行TBDEx工具的必备安装组件pycurl:
        • TBDEx的使用命令和运行参数:
        相关产品与服务
        网站渗透测试
        网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档