【CTF】PHP代码漏洞审计

1 变量覆盖漏洞

    extract造成的变量覆盖

      extract($array)的作用是将数组键名作为变量名,使用数组键值作为变量值。它存在一个安全漏洞,若使用函数默认参数,那么如果数组中的某个键值在php代码中的某个变量名相同,那么就会覆盖这个变量。
      例如:

<?php 
	$a=100
	$array=["a" => "Cat"]
	extract($array)
	echo $a
?>	

      这里输出变量a的值不是100,而是“cat”,这是因为原来的变量$a被数组的变量覆盖了。

      题目:bugku extract变量覆盖
      这道题的本意是想覆盖flag的值,所以构造payload时,考虑输入flag和shiyan两个参数,使得shiyan和conten的值相同。这里补充:file_put_content(path)中的路径为空时,返回false;trim()中的值时bool类型、null时,返回null。所以修改flag,使得file_put_content函数返回false,因此content的值为null,所以shiyan的值要设置成空。所以payload可以如下:

?shiyan=&flag=
?shiyan=&flag=1
?shiyan=

      flag基本可以任意取,因为只要它是无效路径就可以了


2 弱类型漏洞

      1、普通转换: 字符串和数字比较时,会先转换成数字。数字开头的字符串,则直到第一个字母出现之前的数字符号转化成数字;开头不是数字的字符串,转换成0.
      题目:【bugku】 弱类型整数大小比较绕过
      组成字符串的前四位的数字大于1336,剩余位置包含非数字符号即可。

      2、0e转换: 字符串开头时0e,其它的字符全是数字符号时,在弱类型比较下,会先把字符串转化成0。例如:“0e1234” == 0 表达式的值是True。这种性质会被利用在绕过哈希函数比较里,因为哈希函数处理某些字符串时,返回的字符串开头是0e。

md5($string) 返回是0e开头的string有:
      QNKCDZO
      240610708
      s878926199a
      s155964671a

sha1($string) 返回是0e开头的string有:
      aaK1STfY
      aaO8zKZF


      题目:【bugku】md5加密相等绕过
      传入a的值是240610708即可

3 输入数组造成漏洞

    3.1 strcmp()

      strcmp(str1,str2)比较2个字符串的大小,相等就返回0。从php5.3开始,当传入函数的不是字符串而是数组时,尽管不相等,函数返回的值也是0。

      题目:【bugku】strcmp比较字符串
      把a作为数组传入即可

?a[]

    3.2 哈希函数

      哈希函数sha1()、md5()等传入的值是数组时,返回NULL。利用NULL===NULL绕过
      题目:【bugku】md5()函数
      传入2个不相等数组即可

    3.3 strpos()、ereg()、strlen()

      传入数组时,函数返回NULL。一般利用NULL!==FALSE来绕过
      题目:【bugku】strpos()数组绕过
      传入的值是数组即可。另外,ereg()还有%00截断的漏洞,%00后的字符不解析。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CTF(Capture The Flag)竞赛中,常见的一个攻击技术是PHP代码注入(PHP Code Injection)。这种攻击利用了应用程序对用户输入的不充分验证和过滤,使得攻击者能够将恶意的PHP代码注入到应用程序中,从而执行任意代码或实施其他攻击。 以下是一些常见的PHP代码注入漏洞场景和防范措施: 1. 用户输入的直接执行:如果应用程序直接将用户输入作为PHP代码执行,而没有进行充分的验证和过滤,攻击者可以通过提交恶意代码来执行任意操作。防范措施是使用合适的输入验证和过滤,例如使用白名单来限制允许的操作或使用安全的函数来处理用户输入。 2. 变量覆盖:如果应用程序在解析用户输入时,没有正确处理变量覆盖的情况,攻击者可以通过构造特殊的输入来覆盖应用程序中的变量,并执行恶意操作。防范措施是在处理用户输入之前,将其赋值给新的变量,并确保不会被覆盖已有的变量。 3. 文件包含漏洞:如果应用程序在包含文件时没有进行充分的验证和过滤,攻击者可以通过构造特殊的文件路径来包含恶意的PHP代码文件。防范措施是使用白名单来限制允许包含的文件路径,并对用户输入进行适当的过滤和验证。 4. 数据库查询注入:虽然不是直接的PHP代码注入,但数据库查询注入漏洞可能导致执行恶意的SQL语句,从而进一步执行PHP代码。防范措施是使用参数化查询或预处理语句,避免直接将用户输入拼接到SQL查询中。 总之,要防范PHP代码注入漏洞,开发者应该始终进行充分的输入验证和过滤,使用安全的函数和方法处理用户输入,避免直接执行或拼接用户输入作为代码执行。同时,定期更新和修复应用程序中使用的框架、库和组件,以确保使用的是最新的安全版本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值