写一下在这个记录PHP的学习,不过现在php用的越来越少,现在主要是Java,以后可能学点golang,这个现在比较火,文章只求能看懂php语言,了解可能出现的漏洞。
语法
PHP以 <?php 开始,以 ?> 结束
<?php
//php代码
?>
当解析一个文件时,PHP会寻找起始和结束标记,也就是<?php ?>, 这告诉PHP开始和停止解析二者之间的代码。此种解析方式使得PHP可以被嵌入到各种不同的文档中,而任何起始和结束标记之外的部分都会被PHP解析器忽略。
<?php
// 这是 PHP 单行注释
/*
这是
PHP 多行
注释
*/
?>
输出
在 PHP 中有两个基本的输出方式: echo 和 print。
echo 和 print 区别:
-
echo:输出字符串。 -
print_r():输出复杂数据类型。比如数组、对象。 -
var_dump():输出详细信息。
<?php
echo '123'//输出123
?>
变量
-
变量以
$符号开头,其后是变量的名称。大小写敏感。 -
变量名称必须以字母或下划线开头。
-
例如$a1,$_a1
PHP弱类型
$a= 1;
$a = array();
$a = "array";
弱类型的语言对变量的数据类型没有限制,你可以在任何地时候将变量赋值给任意的其他类型的变量,同时变量也可以转换成任意地其他类型的数据。
php中有一些相等的值
''==0==false==NULL
'123'==123
'abc'==0
'123a'==123
'0x01'==1
'0e123456789'=='0e987654321'
[false] ==[0]==[NULL]==['']
true == 1
在PHP中,比较两个值是否相等可以使用“==”或“===”,前者会自动进行类型转换。
<?php
$input = "1abc";
if($input==1)
{
echo "flag";
}
?
如上图,可以通过PHP弱类型进行PHP的绕过
工具
phpstorm:php开发IDE
phpstudy:php搭建环境
PHP漏洞利用
php弱类型

如图,以get形式传入a,b的值,要求:a等于零还不能为0,b不能是数字但要大于1234。那我们将传入a=abc&b=12345a(abc可替换为任意字符,==一个字符串和数字比较时,会把字符串转化成数字再比较。PHP转换规则是:若字符串以数字开头,则以开头字母为转换结果,若无则输出0。)
php文件
#文件上传类:-任意文件上传
#文件下载类:-任意文件下载
#文件删除类-任意文件删除
#文件内容操作类-任意文件读取&写入
#文件包含-任意文件包含
#Web 漏洞核心:
php输入输出,留言板
在这些界面里有输入界面,当你在输入框中执行以下语句:
<script>
alert(1)
<script>
这是简单的js语句,如果可以实现就表示出现了XSS漏洞
X-Forwarded -for
如果登录时出现了限制地区和IP访问,可以使用X-FORWARDER-FOR进行绕过
cookie和session
后台管理系统有多个文件界面,为了方便验证,一般选择cookie和session,都有安全隐患
cokkie:身份验证,存放到客户端浏览器,cokkie伪造
可以通过XSS漏洞获取用户的cookie值,从而无需账号密码直接登录
session:身份验证,存放到服务端服务器内,session更加安全,session劫持
状态回显 - 登录 - 状态码,通过burpsuite抓包,Do intercept ,修改状态码
php漏洞
== 弱类型对比,=== 还会对比类型
MD5比较,可以MD5碰撞
MD5加解密网站:cmd5.com
//==
echo MD5('QNKCDZZO')= 0e830400451993494058024219903391
echo MD5('240610708')=0e462097431906509019562988736854
二者开头都是0e,因为是弱类型比较,可以绕过
//===
可以构造如?user[]=1&password[]=2进行跳过
因为MD5加密无法对数组进行加密,所以user[]=1会被判定为null,此时null=null,成功绕过
如果进行了过滤,那么可以进行MD5碰撞,网上有现成的MD5碰撞值
intval()
intval是一个过滤函数,可以强制转换为整数,例如:
intval 42.2 42
intval 042 34 进制转换
in_array()
in_array的第三个参数如果没有设置为true,那么就等于== ,会发生==的漏洞
preg_match()
数据过滤的函数,但是没有过滤数组,可以通过如arr[]=1来过滤
str_replace()
替换函数,例如可以把hello world替换为world,可以把你的select过滤掉,缺点是无法迭代,可以用selectselect过滤,只能过滤一次
strpos
寻找字符串出现的参数,可以通过换行绕过,?num=%0a666
想要对php安全有更深了解可以到ctfhow刷题
本文介绍了PHP的基本语法,如变量和输出,并强调了PHP的弱类型可能导致的安全问题,如漏洞利用。提到了当前更受欢迎的语言Java和Golang。文章讨论了PHP中的输出方法、变量定义、类型转换以及一些常见的安全漏洞场景,如文件上传、下载和包含,同时提及了XSS攻击、MD5碰撞和过滤函数的潜在风险。

814

被折叠的 条评论
为什么被折叠?



