php代码审计1(ctf相关)

前些阵子开始研究ctf,先从web开始吧.

趁着博客刚建起来,把碰到过的php代码审计类题都总结一下,持续更新.

 

1. 搞定php弱类型

php弱类型问题很常见,问题在于==与!=的比较.php中==不同于===,===在进行比较前先判断等式两边类型是否相同,而==会先将两边类型转化成相同再比较.php类型比较表

所以,我们有,

  • 当一个整型和一个其他类型比较时,会把其他类型转换为整型再比较(所以会有’123’==123)
  • 当整型与字符串比较,且字符串中有字母时,类型转换的结果取决于字符串左边的数字(’123a’==123),到非数字(除.)即截止.
  • 若字符串以’0x’开头,或是以’0’开头,后面接一串数字或前段为数字,则会分别被识别为十六进制和八进制.(经测试此特性在php7中失效)
  • 同样,若字符串以’0e’开头,则会被识别为科学计数法.

可以看到,如果是”==”或”!=”,就存在通过弱类型比较绕过.

趁热打铁,来看一个switch弱类型

 

2. 变量覆盖

变量覆盖ctf题遇见过,就顺便查查把变量覆盖问题总结一下.

变量覆盖漏洞就是用户将自定义的值替换原有的变量值.以下介绍几种情况.

  • $$使用不当导致的变量覆盖问题

  • extract()函数导致的变量覆盖问题

extract从数组中将变量导入到当前的符号表,就是以键名为变量名,以值为变量的值提取数组.有一个flag参数,是关于提取出的变量名与已有冲突的解决办法,详情前往.

  • parse_str函数导致的变量覆盖问题

parse_str(string,array) 函数用于把查询字符串解析到变量中,如果没有array 参数,则由该函数设置的变量将覆盖已存在的同名变量。

  • import_request_variables()函数导致的变量覆盖问题

3. strcmp字符串比较漏洞

4. md5(原值不等,md5相等)

今天先更新这几个,在学习过程中再充实总结,继续更新.

 

 

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注