php安全特性学习(二)

本文围绕PHP代码安全绕过展开实验。介绍了sha()比较绕过、进制绕过、ereg()与strpos()函数绕过、session验证绕过、X - Forwarded - For绕过指定IP地址以及wakeup()函数漏洞绕过等方法,通过构造特定输入、修改请求信息等手段获取flag。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境如图:
在这里插入图片描述
4.1 实验任务一
sha()比较绕过
代码
在这里插入图片描述
访问
在这里插入图片描述
sha1()函数默认的传入参数类型是字符串型,那要是给它传入数组则会出现错误,使sha1()函数返回false,这样一来=运算符就可以满足了,需要构造username和password不相等使之满足,又构造数组类型使得sha1()返回false满足===,因为a[]和b[]同样是数组类型
在这里插入图片描述

进制绕过
代码
在这里插入图片描述
访问
在这里插入图片描述
代码中的for循环的功能是判断是否输入1到9的数字,如果输入则失败。但是后面却让比较一串数字,计算机中存在进制转换,当然也是可以拿来比较的,0x开头则表示16进制,将number变量的这串数字转换成16进制之后发现是deadc0de,在开头加上0x,代表这个是16进制的数字
在这里插入图片描述
以此为输入然后再和十进制的 3735929054比较,当然是相同的,if判断逻辑生效,返回true拿到flag
在这里插入图片描述

ereg()函数strpos() 函数绕过
代码
在这里插入图片描述
访问
在这里插入图片描述
这一关绕过有两种方法:
第一种:ereg()正则函数可以用%00截断,我们传入下图的payload就可以,因为在第二个if处,输入的payload中有字母、数字,同时%00截断了后面的–,符合条件,整个if判断为假,于是转入第一个else if,此时strpos判断出字符串中有–,于是整个判断成立,打印出flag
在这里插入图片描述
第二种:将password构造为数组,传入之后,ereg是返回NULL的,=判断NULL和 FALSE不相等,所以进入第二个判断,而strpos处理数组时,也是返回NULL,这里的判断是!,NULL!==FALSE,条件成立,拿到flag
在这里插入图片描述

session验证绕过
代码
在这里插入图片描述
访问时要求输入,随意输入则会报错
在这里插入图片描述
分析:关键判断语句if ($_GET[‘password’] == SESSION[′password′]),只有满足这个条件才能得到flag。由于session这边是随机生成的,我们传入的password正常情况下无法满足上面的语句,所以我们可以手动删除请求时的cookies,使_SESSION['password']),只有满足这个条件才能得到flag。由于session这边是随机生成的,我们传入的password正常情况下无法满足上面的语句,所以我们可以手动删除请求时的cookies,使SESSION[password])flagsessionpasswordcookies使_SESSION[‘password’]字段为NULL,并使传入password参数为NULL。
这一过程使用firebug、burp都行(新版火狐没有firebug,此处为burp的操作)
抓包
在这里插入图片描述
将cookie删掉
在这里插入图片描述
点击go,在下图右侧就得到flag了
在这里插入图片描述

X-Forwarded-For绕过指定IP地址
代码
在这里插入图片描述
直接访问就提示出错
在这里插入图片描述
分析:由代码可知指定ip为1.1.1.1才能拿到flag,所以在http报头加上x-forwarded-for:1.1.1.1即可
同样使用burp操作
抓包
在这里插入图片描述
发到repeat
在这里插入图片描述
添加x-forwarded-for字段
在这里插入图片描述
得到了flag

wakeup()函数漏洞
代码:
在这里插入图片描述
访问
在这里插入图片描述
分析:
PHP 有个 Bug,触发该漏洞的PHP版本为PHP5小于5.6.25或PHP7小于7.0.10,该漏洞可以简要的概括为:当序列化字符串中表示对象个数的值大于真实的属性个数时会跳过 __wakeup 函数的执行。在这段代码中,如何wakeup函数执行就拿不到flag了,为了拿到flag,我们可以去修改post过去的序列化后的字符串。
在字符串中,前面的数字代表的是后面字符串中字符的个数,如果数字与字符个数不匹配的话,就会报错,修改任一数值都可以,这里以修改“ctf”的数值为例,“ctf”为3,我们修改为1,因此将3改成1就会产生报错,导致不会去执行 __wakeup 函数,从而绕过该函数。
在这里插入图片描述
拿到了flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值