PHP代码审计中常见漏洞函数有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
前言
PHP是一种创建动态交互性站点的强有力的服务器端脚本语言,免费并且使用非常广泛。PHP环境目前的搭建也相当简单,可使用PhpStudy等工具一步到位。
除了除理论上去解释PHP常见函数的漏洞利用,更结合周大福题目,实战解释。
众所周知,PHP一门弱类型的脚本语言,这里介绍的漏洞,均是是从<强>类型转换缺陷,类型转换不严>强入手。
1. is_numeric类型缺陷转换
PHP提供了is_numeric函数,用来判断变量是否为数字。PHP弱类型语言的一个特性,当一个整型和一个其他类型行比较的时候,会先把其他类型intval中数字化再比。
intval中(),函数用于获取变量的整数值。
& lt; PHP ? ,,,error_reporting (0),,, ,,,//,关闭错误报告 ,,,flag 美元;=,& # 39;旗帜{is_numeric_pass} & # 39;; ,,,//,新建一个变量,值为:国旗{is_numeric_pass} ,,,a 美元;=,$ _GET[& # 39;一个# 39;]; ,,,//,新建一个变量,以得到的形式赋值 ,,,is_numeric(美元)?死亡(“对不起....“):空; ,,,//通过,is_numeric函数,判断id是否为数字,如果为数字,则结束,输出sorry ,,, ,,,如果(a> 2019美元){ ,,,//,若一个大于2019输出国旗 ,,,,,,,echo $国旗; ,,,}, 比;//解题思路,要求输入一个大于2019的数字才能获取国旗,但是如果变量为数字就结束程序,陷入矛盾,//利用PHP弱类型比较的特点,一个其他类型与整型比较时,会将其他类型自动取整型再比较,利用此特性绕过,即赋值为10000 abc,绕过
构造载荷:http://192.168.200.148/php_lab/lab1.php?一个=10000
该函数要求我们输入一个,这一个不能是240610708,但是要求其MD5值是一致,同样陷入矛盾困局。
此时还是利用PHP弱类型缺陷
首先240610708的MD5值为:0 e462097431906509019562988736854
这里是0 e开头的,在进行等于比较的时候,PHP把它当作科学计数法,0的无论多少次方都是零,所以这里利用弱类型的比较的缺陷来进行解题:如果MD5的值是0 e以开头的,那么就与其他的0 e开头的MD5值是相等的。我们找到:s1885207154a,其MD5为:0 e509367213418206700842008763514
构造载荷:http://192.168.200.148/php_lab/lab2.php?一个=s1885207154a
3.开关判断绕过
本章节会涉及一点正则相关的知识,如果零基础的同学,可以通过下方链接学习。
https://www.runoob.com/regexp/regexp-syntax.html正则表达式学习
& lt; PHP ? 如果收取($ _GET[& # 39;一个# 39;])){ ,,,pattern 美元;=,& # 39;/^ (?=* [0 - 9]。*)(?=? [a-zA-Z]。*)。{4} $/& # 39;; ,,,//^为开的头,。*为匹配,要求字符串开头有数字,有字母,匹配不少于4次 ,,,a 美元;=,$ _GET[& # 39;一个# 39;]; ,,,//给一个赋值 ,,,如果(preg_match(模式,一个美元)===0){ ,,,,,,,//如果不匹配正则表达式、输出格式错误 ,,,,,,,echo “format error"; 还有,,,}{ ,,,,,,,开关(美元){ ,,,,,,,,,,,//当一个值等于4的时候,可以得到国旗 ,,,,,,,,,,,//解决思路,还是弱类型转换绕过,?=4 abc ,,,,,,,,,,,case 1: ,,,,,,,,,,,,,,,echo “错误…“;; ,,,,,,,,,,,,,,,休息; ,,,,,,,,,,,case 2: ,,,,,,,,,,,,,,,echo “错误…“;; ,,,,,,,,,,,,,,,休息; ,,,,,,,,,,,case 3: ,,,,,,,,,,,,,,,echo “错误…“;; ,,,,,,,,,,,,,,,休息; ,,,,,,,,,,,case 4: ,,,,,,,,,,,,,,,echo “国旗{switch_pass}“; ,,,,,,,,,,,,,,,休息; ,,,,,,,} ,,,} } null null null null null null null null null null null null null null null null null null null null null null null null null null null null null nullPHP代码审计中常见漏洞函数有哪些