- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
BurpWeb安安全全学学院院[不不安安全全的的反反序序列列化化]
介介绍绍
burpsuite官⽹上⼀套不安全的反序列化实验(免费)
本⽂是在这个实验室学习的记录
针对实验的解决,也别的⼀些
如如何何识识别别不不安安全全的的反反序序列列化化
测试不安全的反序列化之前,您肯定要能够识别出序列化对象,下⾯简略介绍两种语⾔的序列化格式
以便您能够在遇到它们的时候识别出它们
PHP序序列列化化格格式式
PHP的序列化对象是可读的,可以⽤⽂本表⽰的(JAVA的则是⼆进制流,您⽆法⽤⽂本阅读器查看)
其中字母代表数据类型,数字代表每项的长度
若User具以下属性的对象:
$user-name=carlos;
$user-isLoedIn=true;
序列化后,该对象可能看起来像这样:
O:4:User:2:{s:4:name:s:6:carlos;s:10:isLoedIn:b:1;}
解释:
O:4:User-具4个字符的类名称的对象User
2-对象具2个属性
s:4:name-第⼀个属性的键是4个字符的字符串name
s:6:carlos-第⼀个属性的值是6个字符的字符串carlos
s:10:isLoedIn-第⼆个属性的键是10个字符的字符串isLoedIn
b:1-第⼆个属性的值是布尔值true
PHP序列化的⽅法是serialize()和unserialize()
Java序序列列化化格格式式
JAVA(还⼀些别的语⾔Ruby等)使⽤⼆进制序列化格式
这使⼈难以阅读,但是序列化数据⼀些固定的特征
例如,序列化的Java对象始终以相同的字节开头,它们是aced
Base64下显⽰为显⽰rO0。
如
rO0ABXNyACJkYXRhLnNlc3Npb24udG9rZW4uQWNjZXNzVG9rZW5Vc2Vyc1%2bhUBRJ0u8CAAJMAAthY2Nlc3NUb2tlbnQAEkxqYXZhL2xhbmcvU3RyaW5nO0wACHVzZXJuYW1lcQB%2bAAF4cHQAIEhyUGQ1WVRiYThnb3VMbkZKNE5RSlVNUGFIM0h5
任何实现该接⼝的类java.io.Serializable都可以序列化和反序列化
readObject()⽅法⽤于从中读取和反序列化数据InputStream。
操操作作序序列列化化对对象象
不安全的反序列化就包括了⽤户可以对序列化对象进⾏修改
这可能导致⼀些越权,代码执⾏等漏洞
修改幅度⼤⼩,的是仅仅修改序列化中的部分字符
的则是重新⽣成⼀个序列化对象,传给⽹站进⾏反序列化
在处理序列化对象时可以采⽤两种⽅法:
可以直接以对象的字节流形式对其进⾏编辑,
也可以使⽤相应的语⾔编写简短的脚本来⾃⼰创建和序列化新对象。
使⽤⼆进制序列化格式时,后⼀种⽅法通常更容易
修修改改对对象象属属性性
介介绍绍
属于修改幅度较⼩的清空,仅仅修改属性不会使反序列化报错
也保留了原对象的结构
举⼀个简单的例⼦,考虑⼀个使⽤序列化User对象的⽹站,该⽹站将关⽤户会话的数据存储在cookie中。
如果攻击者在HTTP请求中发现了序列化对象,则他们可能会对其进⾏解码以找到以下内容:
O:4:User:2:{s:8:username:s:6:carlos;s:7:isAdmin:b:0;}
注意到这⾥的isAdmin属性,
攻击者可以简单地将该属性的布尔值更改为1(true),重新编码对象,然后使⽤此修改后的值覆盖其当前cookie
加⼊⽹站⽤如下代码检查当前⽤户是否权访问某些管理功能:
$user=unserialize($_COOKIE);
if($user-isAdmin===true){
//allowaccesstoadmininterface
}
就可以越权访问某些页⾯
实实验验
⼀个购物⽹站页⾯
利⽤给我们的wiener:peter可以登录
登录后查看Cookie,base64解码后为
O:4:User:2:{s:8:username;s
文档评论(0)