PHP代码审计的第一天

零PHP基础学习代码审计。
学习方法:菜鸟教程,看PHP的语法,(有其他语言基础)。
通过bugku的代码审计题目通过了解常见安全函数来积累。

1.extract变量覆盖
extrat().括号里填一个数组,把键名作为一个变量名,然后把键值赋给它。类似于python里的字典。
isset()确认某个变量是否存在,如果存在,则是true,否则为false
file_get_contents(“a.txt”),把a.txt里的数据读出来作为字符串
trim(),去掉字符串两侧的空白符和其他预定义字符
知识点:
extract能覆盖设置过的变量,所以直接通过传参,把变量覆盖掉,直接把flag和shiyan覆盖掉。
***Q:为什么为不能覆盖成字符串,要覆盖为空?***(未解决)
2.strcmp比较字符串
die(),输出完后退出当前脚本
strcmp(‘a’,‘b’),比较两个字符串,相等返回0,a>b 返回一个大于0的数,反之返回小于0的数
知识点:
通过strcmp的bug,如果比较数组则返回一个0
Q:返回的是数字0吗?
3.urldecode二次编码绕过
eregi(正则,字符串),通过正则表达式匹配字符串,不区分大小写。出错返回false,找到返回匹配的字符串长度
urldecode(),进行url解码
知识点:
当你将参数传递上去会先被服务器解码一次,所以需要加密两次
4.md5()函数
md(),把字符串通过md5加密
知识点:
md5()无法加密数组,所以可以使用,会返回null。username[]=1&password[]=2.
Q:怎么在程序上实现传入一个数组来做实验
5.数组返回NULL绕过
ereg(),通eregi的函数,但是区分大小写
strpos(‘a’,‘b’),查找字符串首次出现的位置,从0开始
知识点:
在ereg和strpos接受到数组时,都认为是null,所以可以直接password[]
%00截断,即?password=a%00–
则ereg在匹配时读取到%00就默认读取结束,所以不会找到后面的–
strpos不受影响,只是返回值时候占了一个位置。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值