php基础语法及常见漏洞利用

PHP 脚本在服务器上执行,然后将纯 HTML 结果发送回浏览器;可以放在文档中的任何位置;PHP 以 尖括号、问号、PHP 问号、尖括号结束:

PHP 文件的默认文件扩展名是 ".php"; 通常包含 HTML 标签和一些 PHP 脚本代码;

一、声明PHP变量
PHP 是一门弱类型语言,没有声明变量的命令,变量在第一次赋值给它的时候被创建 不必向 PHP 声明该变量的数据类型,PHP 会根据变量的值,自动把变量转换为正确的数据类型。 而在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称。
二、echo和print语句
注意echo 和 print 区别:
· echo - 可以输出一个或多个字符串
· print - 只允许输出一个字符串,返回值总为 1
· echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。

PHP的大部分用法和我现在学的C语言很像,就不一一举例了,开始讲讲我了解到的PHP漏洞吧

一、 PHP基本弱类型漏洞
PHP是弱类型语言,不需要明确的定义变量的类型,变量的类型根据使用时的上下文所决定,也就是变量会根据不同表达式所需要的类型自动转换,比如求和,PHP会将两个相加的值转为long、double再进行加和。每种类型转为另外一种类型都有固定的规则,当某个操作发现类型不符时就会按照这个规则进行转换,这个规则正是弱类型实现的基础。
a.(数组比较)
在php手册中写道,当数组(array)与任何非数组进行比较时,数组总是最大的,所以有以下结果:

b.= =与= = =的区别
==:
在进行比较时,向将两边的类型转化成相同类型再进行比较,如果涉及到数值内容的字符串,则字符串会被转化成数值(通过intval()函数),并且按照数值大小进行比较(>、<同理)。
1.“根据php手册中所讲,字符串的开头决定了它转换后的值,如果该字符串以合法的数值开始,则使用该合法数值,否则其值为0”
2.如果字符创中没有包含.、e、E并且其数值在整形范围内,该字符被当做int来取值,其他所有情况都被作为float来取值。
3.0e开头的字符串被认为是科学技术计数法,且0e开头的数值为0
4.当一个整形与其他类型进行比较时,会先把其他类型进行intval()后再进行比较

=:
先判断两边类型是否相同,再比较大小。
= = =是防止了弱类型比较漏洞,若两边类型不同,则直接false而不会再进行比较。

一、 弱类型的函数漏洞利用

PHP在处理哈希字符串时,会利用!=或= =来对哈希值进行比较,它把每一个以“0e”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都以“0e”开头,那么PHP将会认为他们相同,都是0。



PHP伪协议结合文件包含漏洞
1、包含漏洞


2、伪协议
涉及的相关协议:file://、php://filter、php://input、zip://、compress.bzip2://、compress.zlib://、data://

posted @ 2020-11-30 21:49  paidx0  阅读(163)  评论(0编辑  收藏  举报