Java序列化
ysoserial:payload生成工具
Java中的api实现:
位置:java.io.ObjectOutputStream java.io.ObjectInputStream
序列化:ObjectOutputStream类–>writeObject()
该方法对参数指定的对象进行序列化,并把字节序列写到一个目标输出流中,按Java的标准是给文件一个.ser的扩展名
反序列化:ObjectInputStream–>readObject()
该方法从一个源输入流中读取字节序列,然后反序列化为一个对象,并返回结果。
检测:黑盒:数据格式点:HTTP请求中的参数(特征),自定义协议,工具扫描
白盒:java.io.ObjectOutputStream
java.io.ObjectInputStream
XMLDecoder.readObject
XStream.fromXML
ObjectMapper.readValue
JSON.parseObject
特征:以rO0AB开头,为Java序列化base64加密后的结果
以aced开头,为Java序列化后的16进制
关于反弹shell 当构造payload时,如果没回显,需要考虑反弹shell。
reverse shell,就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。通常用于被控端因防火墙受限、权限不足、端口被占用等情形。