• 主页
  • 相册
  • 随笔
  • 目录
  • 存档
Total 244
Search AboutMe

  • 主页
  • 相册
  • 随笔
  • 目录
  • 存档

php速成

2020-09-02

1. 文件

  • PHP 是 “PHP Hypertext Preprocessor” 的首字母缩略词
  • PHP 文件能够包含文本、HTML、CSS 以及 PHP 代码
  • PHP 代码在服务器上执行,而结果以纯文本返回浏览器
  • PHP 文件的后缀是 “.php”
  • 可以写在html里

1.1. 功能

  • PHP 能够生成动态页面内容
  • PHP 能够创建、打开、读取、写入、删除以及关闭服务器上的文件
  • PHP 能够接收表单数据
  • PHP 能够发送并取回 cookies
  • PHP 能够添加、删除、修改数据库中的数据
  • PHP 能够限制用户访问网站中的某些页面
  • PHP 能够对数据进行加密

2. 语法

1
2
3
4
<?php
// PHP 语句以分号结尾(;)
echo
?>
  • <?php开头
  • ?>结尾

2.1. 注释

1
2
3
4
5
6
7
8
9
<?php

// 1

/* 2 */

# 3

?>

大小写不敏感

  • 所有用户定义的函数
  • 类
  • 关键词(例如 if、else、echo 等等)

大小写敏感

  • 所有变量

2.2. 变量

  • 变量以 $ 符号开头,其后是变量的名称
  • 变量名称必须以字母或下划线开头
  • 变量名称不能以数字开头
  • PHP 没有创建变量的命令。变量会在首次为其赋值时被创建:

echo 和 print 之间的差异:

  • echo - 能够输出一个以上的字符串
    • echo 是一个语言结构,有无括号均可使用:echo 或 echo()。
    • echo $test
  • print - 只能输出一个字符串,并始终返回 1
    • print 也是语言结构,有无括号均可使用:print 或 print()。

3. 代码审计

3.1. web函数

函数用途
file_get_contents把整个文件读入一个字符串中
concat将多个字符串连接成一个字符串
group_concat()将group by产生的同一个分组中的值连接起来,返回一个字符串结果 (group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] ))
include/include_onceinclude 会将指定的文件载入并执行里面的程序;重复引用加载多次。include_once 函数会将指定的文件载入并执行里面的程序;此行为和 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含
  • require 的使用方法如 require(“MyRequireFile.php”); 。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。
  • include 使用方法如 include(“MyIncludeFile.php”); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。

3.2. 漏洞审计

intval()获取变量的整数值intval函数有个特性:“直到遇上数字或正负符号才开始做转换,在遇到非数字或字符串结束时(\0)结束转换”,在某些应用程序里由于对intval函数这个特性认识不够,错误的使用导致绕过一些安全判断导致安全漏洞.    此外有些题目还利用intval函数四舍五入的特性来绕过判断。
switch()如果switch是数字类型的case的判断时,switch会将其中的参数转换为int类型,效果相当于intval函数。
in_array()搜索数组中是否存在指定的值所有php认为是int的地方输入string,都会被强制转换
PHP弱类型的特性PHP 是一门弱类型语言,不必向 PHP 声明该变量的数据类型,PHP 会根据变量的值,自动把变量的值转换为正确的数据类型,但在这个转换过程中就有可能引发一些安全问题== 在进行比较的时候,会先将字符串类型转化成相同,再比较。    PHP在处理哈希字符串时,会利用”!=“或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0
unset毁给定的变量($var: 要销毁的变量),如果变量$var包含在请求参数中,可能出现销毁一些变量而实现程序逻辑绕过

3.3. 反序列化漏洞

php类可能会包含一些特殊的函数叫magic函数,magic函数命名是以符号__开头的,比如 __construct, __destruct,__toString,__sleep,__wakeup等等。这些函数都会在某些特殊时候被自动调用。

例如__construct()方法会在一个对象被创建时自动调用,对应的__destruct则会在一个对象被销毁时调用等等。

这里有两个比较特别的Magic方法,__sleep 方法会在一个对象被序列化的时候调用。 __wakeup方法会在一个对象被反序列化的时候调用

  • stripos($f,'pdtf')==False
    • flag在pctf.php,但又不允许直接读取pctf.php

4. 参考

  • php代码审计常见漏洞函数介绍 - 明心 | Blog
  • Program Language
  • php
  • Basic
网络小知识-2
信安小知识-7
  1. 1. 1. 文件
    1. 1.1. 1.1. 功能
  2. 2. 2. 语法
    1. 2.1. 2.1. 注释
    2. 2.2. 2.2. 变量
  3. 3. 3. 代码审计
    1. 3.1. 3.1. web函数
    2. 3.2. 3.2. 漏洞审计
    3. 3.3. 3.3. 反序列化漏洞
  4. 4. 4. 参考
© 2024 何决云 载入天数...