重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
PHP代码审计中常见漏洞函数有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
为隆阳等地区用户提供了全套网页设计制作服务,及隆阳网站建设行业解决方案。主营业务为网站制作、做网站、隆阳网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
PHP是一种创建动态交互性站点的强有力的服务器端脚本语言,免费并且使用非常广泛。PHP环境目前的搭建也相当简单,可使用PhpStudy等工具一步到位。
除了除理论上去解释PHP常见函数的漏洞利用,更结合CTF题目,实战解释。
众所周知,PHP一门弱类型的脚本语言,这里介绍的漏洞,均是是从类型转换缺陷、类型转换不严入手。
PHP提供了is_numeric函数,用来判断变量是否为数字。PHP弱类型语言的一个特性,当一个整型和一个其他类型行比较的时候,会先把其他类型intval数字化再比。
intval() 函数用于获取变量的整数值。
2019){ // 若a大于2019输出flag echo $flag; } ?> //解题思路,要求输入一个大于2019的数字才能获取flag,但是如果变量为数字就结束程序,陷入矛盾, //利用PHP弱类型比较的特点,一个其他类型与整型比较时,会将其他类型自动取整型再比较,利用此特性绕过,即赋值a为10000abc,绕过
构造Payload:http://192.168.200.148/php_lab/lab1.php?a=10000a
该函数要求我们输入一个a,这个a不能是240610708,但是要求其MD5值是一致,同样陷入矛盾困局。
此时还是利用PHP弱类型缺陷
首先240610708的MD5值为:0e462097431906509019562988736854
这里是0e开头的,在进行等于比较的时候,PHP把它当作科学计数法,0的无论多少次方都是零。 所以这里利用弱类型的比较的缺陷来进行解题:如果md5的值是以0e开头的,那么就与其他的0e开头的Md5值是相等的。我们找到:s1885207154a,其MD5为:0e509367213418206700842008763514
构造Payload:http://192.168.200.148/php_lab/lab2.php?a=s1885207154a
本章节会涉及一点正则相关的知识,如果零基础的同学,可以通过下方链接学习。
https://www.runoob.com/regexp/regexp-syntax.html正则表达式学习
我们将a赋值为 4abc,符合匹配要求,最后在判断的时候,因为4abc不是整型,会自动进行转换取整,故数值为4,得到flag。
构造Payload:http://192.168.200.148/php_lab/lab3.php?a=4abc
int strcmp ( string $str1 , string $str2 ),函数介绍:如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。
但strcmp只会处理字符串参数,如果给个数组的话呢,就会返回NULL。而NULL==0是 bool(true),满足if判断的逻辑,就得到flag了
构造payload:http://192.168.200.148/php_lab/lab4.php?a[]=7
a and b can not be same!'; else if (sha1($_GET['a']) === sha1($_GET['b'])) //判断a和b的sha1值是否相等,如果相等则输出flag echo 'flag{sha1_pass}'; else echo 'You are failure.
'; } else echo 'You are failure!
'; //题目要求a和b的sha1值相等,但是变量值不能相等,此处为突破点 ?>
sha1()函数默认的传入参数类型是字符串型,那要是给它传入数组则会出现错误,使sha1()函数返回false,两个false也就符合条件输出flag了。
构造Payload:http://192.168.200.148/php_lab/lab5.php?a[]=6&b[]=7
看完上述内容,你们掌握PHP代码审计中常见漏洞函数有哪些的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!