某IP广播系统代码审计

对某IP广播系统的一次代码审计

0x00 审计前的准备

以下相关漏洞已全部提交cnvd

01.png
熟悉目录整体架构
php目录为 代码的功能实现
主要审计php目录

0x01 文件上传getshell

uplaod/mt_parser.php 漏洞关键位置代码

02.png
无任何过滤直接构造poc上传即可

<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title></title>
</head>
<body>
<form action="http://127.0.0.1/upload/my_parser.php" enctype="multipart/form-data" method="post">
    <input class="input_file" type="file" name="upload"/>
    <input class="button" type="submit" name="submit" value="upload"/>
</form>
</body>
</html>

漏洞证明截图

03.png

0x02 查看文件

开始审计php目录下的文件
发现均包含了conversion.php

04.png

进行查看 具体实现的功能
共写了八个方法,一个个看一下

1、function arrayRecursive(&$array, $function, $apply_to_keys_also = false)

05.png
大体实现了
第一个参数传array 第二个参数传function 分别对arrayvalue进行function操作。
如果apply_to_keys_alsotrue还可以对传入的array进行改变key

2、function JSON($array, $want_url_encode = true)
06.png

大体实现了
对传入的数组进行json_encode 然后urldecode操作(这里可能实现了中文字符的传入)

3、function UdpSendJson($array, $msgType)
07.png

大体实现了
一个传送JSON数据的功能

4、function UdpSend($msg)

08.png
大体实现了
8888端口下的AppWebService的命令操作 具体干什么可能要看硬件设备了。

5、function UdpSendAndRecvJson($array, $msgType)

09.png

大体实现了
接收和发送JSON数据

6、function UdpSendAndRecv($msg)

10.png

大体实现了
发送和接收数据,对本地的8888端口发送一个POST请求 这里和function UdpSend()实现了一样的操作,只不过多加了一个Linux下的操作

7、function phplog($data)

11.png

大体实现了
写日志的功能

8、function get_real_ip()

12.png

大体实现了
通过Client_ip头获取了ip
接下来看php目录下文件实现的具体功能

0x03 任意文件上传

php/addmediadata.php 漏洞关键位置代码

13.png
满足$subpath$fullpath可以自定义目录,然后进行了一系列的检查如文件大小等
最后进入if条件中move_upload_file函数进行文件上传
构造poc

Pasted image 20220504155204.png
访问./upload/1/5.php成功访问

Pasted image 20220504155243.png
addmediadatapath.php存在相同问题
收获两枚通杀漏洞
php/addscenedata.php 漏洞关键位置代码

14.png
不多说了 自己看
构造poc

Pasted image 20220504160756.png
访问./images/scene/5.php

Pasted image 20220504160941.png

0x04 任意文件写入

$postData = $_POST['jsondata']; 需要满足这个参数
看一下传参方式

Pasted image 20220504164650.png

然后满足$caller$callee$imagename$imagecontent这三个参数不为空

Pasted image 20220504164718.png

满足$imagename用_分割后等于三个

Pasted image 20220504164841.png

$callee参与了目录拼接 这里跨目录上传 (需要知道根目录才能解析成功)

Pasted image 20220504164952.png

只传入一串base64加密的内容
进入else条件

Pasted image 20220504165102.png
Pasted image 20220504165046.png
构造POC

Pasted image 20220504165137.png
成功上传

Pasted image 20220504165151.png

0x05 任意文件读取

php/exportrecord.php 漏洞关键位置代码

15.png

获取了参数downname 需要下载的文件进行了urldecode 不用管 左思右想 想了半天也也不知道为什么要在37行加个basename
直接在41行 执行了fread操作

Pasted image 20220504172319.png

类似操作还有 exprottts.php

Pasted image 20220504173126.png

0x06 总结

此套代码几乎无过滤,这也是硬件设备的一个通病,很多厂商都以为不会"黑客"拿到源码。
还有很多漏洞 都是无过滤的 此处不一一写出来了

  • 发表于 2022-05-10 09:44:04
  • 阅读 ( 6674 )
  • 分类:漏洞分析

3 条评论

低级管理员
还是要留点厂商线索,不然容易被骂
请先 登录 后评论
花北城
下次一定
请先 登录 后评论
孤岛一L
什么设备啊,想复现都找不到,透漏一点点也行啊
请先 登录 后评论
请先 登录 后评论
花北城
花北城

5 篇文章

站长统计