攻防世界 favorite_number

本文详细介绍了如何解决一道PHP代码审计题,涉及到数组溢出漏洞、正则表达式跨行检测的绕过方法以及命令执行的技巧。通过利用PHP5.5.9的数组溢出特性,构造特定payload,成功绕过首元素限制。对于数字检测,使用换行符%0a进行跨行检测的绕过,并通过Burp Suite进行测试。在命令执行部分,提出了两种方法,包括利用inode和将命令输出到文件后再执行,以此获取flag。

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

在这里插入图片描述
打开后发现是一道php代码审计题
1.首先是个判断,既要数组强等,又要首元素不为admin
2.做了一个正则匹配,要求字符串全为数字,大小写不敏感,跨行检测
3.写了一个黑名单,把常用的都排除了

数组判断

这个第一个绕过就让人头疼
想了想他这提示了php5.5.9,那应该是从php5.5.9这个版本的本身漏洞着手
查了查有数组溢出漏洞
参考:
PHP的信息安全(入侵获取$flag)的题目【Q2】
PHP数组的key溢出问题
看了其他大佬的wp,发现这个php5.5.9版本的数组溢出值为4294967296,当数值溢出的时候就会覆盖0键值(我没有php5.5.9的环境,用5.4测试反正是没过)
然后构造payload

stuff[4294967296]=admin&stuff[1]=user&num=123

在这里插入图片描述
成功绕过了

数字检测

然后是数字检测
查了查
跨行检测可以绕过
用换行符%0a
payload如下:

stuff[4294967296]=admin&stuff[1]=user&num=123%0als

这里发现用hackbar没有用,我们可以用burp来试试。

在这里插入图片描述
hackbar不能成功的原因是浏览器会自动在换行符%0a前面加上回车符%0d,凑成%0d%0a,使绕过失败。

第二个条件
最后是命令执行
查了查

显示有如下的办法
在这里插入图片描述
我们可以用tac
文件则有两个比较好用的方法

方法1

用inode
索引节点
在这里插入图片描述
找的flag的inode
读取flag
payload如下:

stuff[4294967296]=admin&stuff[1]=user&num=123%0atac ` find / -inum 23337141`

反引号的命令,首先将反引号内的命令执行一次,然后再将已经执行过的命令得到的结果再执行一次
在这里插入图片描述

方法2

输出到文件里

然后执行文件
在这里插入图片描述

得到flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值