AMF(Action Message Format)是一种二进制的数据格式,即数据(actionscript里面的Object, Array, Boolean, Number等)经过了序列化成二进制。
有amf0和amf3,当数据流中有0×11标记时,表示这个数据属于AMF3。
AMF基于HTTP协议,大致处理过程:
获取客户端请求(request) - 服务端反序列化请求 - 处理请求 - 序列化响应(response) - 返回http响应给客户端
AMF的传输效率较高。
AMF相关参考资料:
https://www.cnblogs.com/yaozhongxiao/archive/2013/04/12/3016302.html
https://my.oschina.net/yan5845hao/blog/692474
https://www.biaodianfu.com/amf.html
https://github.com/nccgroup/AMFDSer-ngng
有些响应解码返回空,报异常,请求都没问题。
相关issue:
https://github.com/nccgroup/AMFDSer-ngng/issues/2
反序列化并编码为xml的效果
可以转为xml给sqlmap
给intruder模块
类似的还有
https://github.com/khai-tran/BurpAMFDser
都是将AMF反序列化再利用xtream库编码为xml。
安装flash player IE
https://github.com/ikkisoft/blazer
firebug+amfexplorer
firebug+flashbug
//这两种组合未测试。
某管理系统
先安装flash player,抓包发现是二进制格式,可以发现是AMF
利用burp插件即可反序列化并编码为xml格式。
撕开遮蔽的外衣,是时候探索无尽的宝藏了。
登录处会发一个请求,执行getuserlistbyname的操作,参数中输入a就把a开头的用户信息返回了。
类似用户名枚举,登录处会发一个getuserbyid的请求,参数填一个数字id即可返回该id用户的详细信息,包括加密后的密码。
有些开发可能为了方便前端调用,后端直接执行select * from xxx把用户所有信息都返回前端。
这些信息可以利用burp-info-extractor提取,方便进一步渗透。
利用id几乎可以获取系统所有用户大量敏感信息(包括管理员)
尝试利用管理员登录,抓包改密码为获取的加密后的密码
成功登录
登录数据包发送到intruder即可
去掉jsessionid值触发报错
单引号出发了sql报错,明显可以注入
poc:
<string>bbb' and 1=(ordsys.ord_dicom.getmappingxpath((select banner from sys.v_$version where rownum=1),user,user))--</string>
poc:
<string>bbb' and 1=(ctxsys.drithsx.sn(1,(select user from dual)))--</string>
插件burp-unauth-checker可以方便检测未授权访问漏洞。
去掉jsessionid,未授权即可获取接收人信息。
竟然有个delete=false,那改为true会发生什么......
意料之内,成功删除该文件,无法下载了,如果filePath没做安全处理,可能可以删除任意文件。
可以利用burp-sensitive-param-extractor方便检测提取各种敏感参数,比如这里的filePath,方便进行测试,避免遗漏。
遇到加密/编码的数据,不要轻易放弃,解出明文后,可能就是无尽的漏洞!