PHP代码审计
一.php基础;
1.简介:PHP是创建动态网页的最流行的服务器端脚本语言,并且是开源免费的。PHP代表超文本预处理器。PHP是一种非常流行且广泛使用的开源服务器端脚本语言,用于编写动态生成的Web页面。PHP最初由 Rasmus Lerdorf 于1994年创建。它最初被称为个人主页。PHP脚本在服务器上执行,结果以纯HTML格式发送到Web浏览器。PHP可以与众多流行数据库集成,包括MySQL,PostgreSQL,Oracle,Microsoft SQL Server,Sybase等。PHP的当前主要版本是7.本教程中的所有代码都已针对最新版本的PHP 7进行了测试和验证。
1 | <!DOCTYPE html> |
2.php中注释:
1 | <!DOCTYPE html> |
3.php变量:
1 |
|
创建(声明)PHP 变量,PHP 没有声明变量的命令,变量在您第一次赋值给它的时候被创建;
PHP 是一门弱类型语言,在上面的实例中,我们注意到,不必向 PHP 声明该变量的数据类型,PHP 会根据变量的值,自动把变量转换为正确的数据类型,在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称。
PHP 变量作用域,变量的作用域是脚本中变量可被引用/使用的部分。PHP 有四种不同的变量作用域:local,global,static,parameter
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$x=5;
$y=10;
function myTest()
{
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
}
myTest();
echo $y;
$x=5;
$y=10;
function myTest()
{
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y;
上述代码在PHP5版本下输出值是15;但是PHP中文网在线实例环境是PHP7版本的,所以输出值应为10。因为在最新的php7版本中,PHPglobal变量处理机制进行了修改,此版本下global关键字只能引用简单变量。
1 |
|
每次调用该函数时,该变量将会保留着函数前一次被调用时的值。
1 |
|
4.PHP echo/print
echo 可以输出一个或多个字符串 ,print 只允许输出一个字符串且返回值总为1。
echo 输出的速度比 print 快,echo 没有返回值,print有返回值1。
1 | <?php |
1 | <?php |
5.php函数:
isset($_GET[‘id’])判断get传参的内容是否为空;
$_REQUEST[‘hello’]可以获取以POST方法和GET,cookie方法提交的数据,但是速度比较慢;
eval()把字符串按照php代码来计算,该字符串必须是合法的php代码,且必须以分号结尾;
var_dump()用于输出变量的相关信息;
file()
6.代码审计;
可变变量:
1 |
|
二.文件上传漏洞审计;
文件上传功能判断:
1 | move_uploaded_file |
1 | 1.前端JS; |
1 | 2.MIME类型检测绕过; |
1 | 3.后缀名黑名单绕过; |
4.str_ireplace()
函数进行过滤;
1 | $is_upload = false; |
1 |
|
5.
1 | fopen()函数:打开文件或者 URL。 |
6.验证文件是否是图片;
1 | function getReailFileType($filename){ |
7.getimagesize函数
1 | function isImage($filename){ |
8.exif_imagetype()函数:判断一个图像的类型;
1 | function isImage($filename){ |
7.
1 | <?php |
php正则表达式
1 | pattern1='/1.*1/'; |
<?php
$filename=”wzj.php3”;
if(preg_match('/\.php$/', $filename)){
exit(“压缩包内不允许含有php文件!”); //加上$不能匹配到php3,php5
}else {
echo(“NO!!”);
}
?>
三.rce漏洞审计;
1 | php关键函数: |
php伪协议参考链接:
https://www.cnblogs.com/endust/p/11804767.html
1 | preg_match_all("/(\||\&)/", $ip, $m) //|,&被过滤 |
四.
1 | preg_match_all("/(\||\&)/", $ip, $m) //|,&被过滤 |