Java“后反序列化漏洞”利用思路
“后反序列化漏洞”指的是在反序列化操作之后可能出现的攻击面。反序列化漏洞是Java中最经典的一种,所以大家可能的关注点都集中在反序列化过程中的触发点而忽略了反序列化之后的攻击面,这里我会分享一些在Java反序列化后的攻击思路。
后反序列化攻击调试中的IDE
这里主要是指在一些反序列化功能下,假如在IDE的调试过程中恶意的对象被反序列化出来后可能造成的任意代码执行。注意了,这里说的不是在反序列化过程中触发。IDE就是我们常说的集成开发环境,它包含了常见的功能比如编译,调试等。下面我会主要用JetBrains的IntelliJ IDEA来做例子。当然JetBrains没有认为这是他们的漏洞,这是可以理解的,因为这更大程度上取决于用户代码的编写。这里我把它当作一个小思路分享给大家。
Variables in debugging
Debugger为我们提供了很多锦上添花的功能,在调试界面中的Variables区域我们其实可以发现一些有意思的问题。
Debugger需要为我们展示各种变量,而这时我们可以清楚的看到其值会显示到界面上。这是怎么做到的?我突然意识到IDEA内部可能是直接调用了对象的toString
方法来显示。
于是我做了下面的验证
1 2 3 4 5 6 7 8 9 10 11 |
public class A { @Override public String toString() { try { Runtime.getRuntime().exec("open /System/Applications/Calculator.app"); } catch (IOException e) { e.printStackTrace(); } return super.toString(); } } |
首先声明一个A类,重写它的toString
方法并在另一个位置去对它进行实例化。
在实例化之后设置断点。
果然,IDEA在内部自动调用了它的toString
方法,然后我又测试了Eclipse,需要点击一下变量才会触发,不过证明了它也是这样的处理方法。