探讨log4j2的一些绕过方式与注入

            回到刚刚的2个问题,最先剖析除开jndi外还有哪些lookup可以被使用,实际上能完成注入使用的仅有jndi,可是别的方法依然会造成一些数据泄露,如set、ENVI、system等方法。网络攻击者可以利用dnslog将比较敏感数据传出去,下边列出一些比较敏感数据的lookup实例仅供参考:尽管危害不大,可是做为waf可以充分考虑开展统一化的关键词屏蔽。

outputo-20211227-144607-018-ejtf.png

第2个问题是剖析什么lookup方法可以用于切分命令的,最先想起的是拼凑空格符的方法来搭配。通过检测和剖析,当lookup里的suffix去解析包错误构造的name值时便会立即回到空格符,如${log4j:234}、${set:234}等,使用这一特点咱们期待jnd${log4j:234}i和jndi的輸出结果是相同的,但遗憾的是log4j并不兼容对空格符的拼凑。另一种构思是利用关键词数据库索引来取代某一英文字母,如${system:es.number}的輸出为windows,咱们期待能利用輸出英文字母数据库索引的方法(如${system:es.number}[2:1])来替代字母i,但遗憾的是log4j对字符串数组数据库索引的读取也不兼容。

此外便是大伙儿了解的lower和upper2个lookup方法了,可是通过检测,仅有2.10以上的版本号适用lower和upper2个lookup方法,具体危害十分不足。对于lower和upper2个lookup,也有一些小窍门仅供参考。一个是开展小写转大写的未必是英文字母,后面接字符也不会出错,如${lower::}和:是一个輸出,${lower:/}和/也是一个輸出;二是一些特殊符号在通过lower或upper后就变为和一般英文字母相同了,这一点做过ctf经验的小伙伴们应当较为了解,比如jndı(这儿的ı(\u0131)并非小写字母i(\x69)),反而是某一特殊符号通过upper后就变成了JNDI了,使用这种特点还可以绕过一些waf规则的预备处理和屏蔽。那样除开lower和upper外就没有别的切分方法了么?回答是不可以的,上文章中提及log4j给予了字符切分符":-",可以了解因而符号会把后面的字符做为纯字符串数组输入,而且对前边所输内容并无本质规定。

分享:

相关推荐