CTF web
一、CTF web 反序列化
1、是什么?
序列化:是将变量转换为可保存或传输的字符串的过程;实现函数是serialize()
反序列化:把这个字符串再转化成原来的变量使用,就是序列化的逆过程。实现函数是unserialize()
2、怎样做:
实现函数是:serialize()和unserialize()
反序列化数据格式
O:对象
7:名称的长度
2:属性的个数
{ s:字符串 4:name字节 name:值 i:整数 90:值 }:属相情况
反序列化:
3、为什么:
序列化和反序列化结合起来,可以轻松地存储和传输数据,使程序更具维护性
4、漏洞概念:
反序列化漏洞:也叫对象注入,就是当程序在进行反序列化时,会自动调用一些函数,但是如果传入函数的参数可以被用户控制的话,用卢可以输入一些恶意代码到函数中,从而导致反序列化漏洞。
4、例题:
例题1
做题步骤::
1.复制源代码到本地
2.注释掉和属性无关的内容
3.根据题目需要,给属性赋值(这是关键)
04.生成序列化数据,通常要urlencode
5.传递数据到服务器(攻击目标)
运行得到:
粘贴到 hackbar:
说明phpinfo()测试通过
改为查看系统命令 :system(ls)
重新运行,粘到hackbar即可
例题2
修改
运行复制hackbar即可
http:/ /122.114.252.87∶1126/unserialize / ?
exp=0%3A5%34%22Login%22%3A1%3A4%7Bs%3A11%3A%22%Q0Login%99user%22%3Bs%3A5%3A%22admin$22%3B%7D
.
二、CTF web 魔术方法
1、手册:
2、属性赋值
1.直接赋值:优点是方便,缺点是只能赋值字符串。
2.外部赋值:优点是可以赋值任意类型的值,缺点是只能操作public属性。
3.构造方法赋值(万能方法)︰优点是解决了上述的全部缺点,缺点是有点麻烦。
…
三、CTF web POP链
POP(面向属性编程)链是指从现有运行环境中寻找一系列的代码或指令调用,然后根据需求构造出一组连续的调用链。
**反序列化利用就是要找到合适的POP链。 **
反序列化题目做题步骤:
1.复制源代码到本地
2.注释掉和属性无关的内容
3.根据题目需要,给属性赋值(这是关键)寻找POP链:
a .起点: unserialize的参数可控的地方
b.终点:执行代码或者可以任意读取文件的地方。
c.连接起点和终点:研究属性和方法(特别是魔术方法)
4.生成序列化数据,通常要urlencode
5.传递参数到服务器(攻击目标)
该部分开个头,之后补充