网络安全PHP基础

本文介绍了PHP的基本语法,如变量和输出,并强调了PHP的弱类型可能导致的安全问题,如漏洞利用。提到了当前更受欢迎的语言Java和Golang。文章讨论了PHP中的输出方法、变量定义、类型转换以及一些常见的安全漏洞场景,如文件上传、下载和包含,同时提及了XSS攻击、MD5碰撞和过滤函数的潜在风险。

写一下在这个记录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文件

#文件上传类:-任意文件上传

1、代码自主写  //  源代码自主编写,没有参考性
2、编辑器引用  //  可能使用了网络现成的编辑器如ueditor,可以在网上找到源码

#文件下载类:-任意文件下载

1、直连 URL 访问  //http://www.domain.com/soft/软件.zip 没有文件下载漏洞
2、传参头部修改  //http://www.domain.com/soft/down.php?filename=软件.zip 可能存在任意文件下载漏洞

#文件删除类-任意文件删除

1、文件删除
2、文件夹删除
//delfiledir函数,代码审计时需要注意

#文件内容操作类-任意文件读取&写入

1、文件读取
2、文件写入

#文件包含-任意文件包含

1、本地文件包含
2、远程文件包含
//比如上传一个图片,得到图片地址,包含图片,图片中有木马

#Web 漏洞核心:

1、可控变量 //例如?filename=
2、特定函数-函数的多样化

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劫持

通过 JavaScript 进行文件后缀筛选验证
可以通过禁用浏览器js尝试绕过
通过 Ajax 传递数据进行用户登录验证

状态回显 - 登录 - 状态码,通过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刷题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值