域名注册官方网站厦门网站制作报价
文章目录
- php的基础概念
 - php的基础语法
 - 1. PHP 基本语法结构
 - 2. PHP 变量
 - 3.输出数据
 - 4.数组
 - 5.超全局变量
 - 6.文件操作
 
- php的命令执行
 - 可以执行命令的函数
 - 命令执行绕过
 - 利用代码中命令(如ls)执行命令
 - 替换过滤
 - 过滤特定字符串
 - 神技:利用base64编码解码的绕过
 - 拼接绕过过滤
 - 符号过滤绕过
 
php的基础概念
- php的代码执行:不同于python rsa.py的形式,php的代码执行为http://baidu.com/index.php,浏览器会自行处理php代码并返回结果
 - 所需环境:phpstudy
 - GET包的特点,所有参数都在url里,而POST包将数据单独放到一个表单里
 
php的基础语法
- 文件与变量之间用?分隔
 - 变量与变量之间用&分隔
 
1. PHP 基本语法结构
PHP 代码通常嵌入到 HTML 中,PHP 语句用 <?php ... ?> 标签包裹。
<?php// 这里是 PHP 代码echo "Hello, World!";
?>
 
2. PHP 变量
PHP 变量以 $ 符号开头,后面跟上变量名。PHP 变量不需要显式声明类型,可以自动根据值类型推断。
<?php$name = "John";  // 字符串类型$age = 25;       // 整型$is_active = true;  // 布尔类型$pi = 3.14159;   // 浮点型
?>
 
3.输出数据
PHP 使用 echo 或 print 来输出数据:
<?phpecho "Hello, World!";  // 输出字符串print "PHP is fun!";
?>
 
4.数组
- 索引数组
 
<?php$fruits = array("apple", "banana", "cherry");echo $fruits[0];  // 输出 apple
?>
 
- 键值对数组
 
<?php$person = array("name" => "John", "age" => 25);echo $person["name"];  // 输出 John
?>
 
5.超全局变量
- $_GET:用于获取 URL 查询字符串中的数据。
 
<?phpecho $_GET['name'];  // 获取 URL 中 name 参数的值
?>
 
- $_POST:用于获取表单提交的数据。
 
<?phpecho $_POST['email'];  // 获取表单中 email 字段的值
?>
 
6.文件操作
读取文件
<?php$content = file_get_contents("file.txt");echo $content;
?>
写入文件
<?phpfile_put_contents("file.txt", "Hello, World!");
?>
 
php的命令执行
可以执行命令的函数

 
 
 
命令执行绕过
一般默认命令执行是在linux服务器上执行
利用代码中命令(如ls)执行命令
;两条命令分别执行
eg:dir=;cat \flag
&&前一条命令执行成功了才会执行下一条命令,注意在输入参数时一定要进行url编码,如果不进行编码它会当作多个参数的分隔符
 || 两条命令只要一条成功即结束 ,即第一条成功就不会执行下一条(如果不给回显,可以利用这个特点将不给回显的代码短路)
替换过滤
比如将关键字cat替换为空
- 绕过策略:双写绕过:ccatat,替换后得到cat
 
过滤特定字符串
比如flag
- 利用通配符 ∗ * ∗, ∗ * ∗ 代表任意长度字符串
 - 利用占位符?,?表示一个字符
 
神技:利用base64编码解码的绕过
在Linux环境中,比如输入cat ‘echo ‘love’’,会先执行单引号中的内容,使其成为cat love,那么利用这一点,我们就可以先将cat love进行base64编码,假设结果是x,接下来执行‘echo ‘x’|base64 -d’,从而绕过关键词过滤,同样的道理,可以使用其他类型的编码解码进行绕过
拼接绕过过滤
a=c;b=at;c=fla;d=g.php;$a$b {c}{d}
即可执行cat flag.php的命令
符号过滤绕过
有了以上几种方法,关键字过滤其实没啥用,那么如果空格被禁用呢?
- PHP 符号过滤空格绕过,在 PHP 中,可以通过以下几种方法绕过空格过滤:
 
- 使用 
chr()函数
chr(32)可以表示空格字符,因此可以用chr(32)代替空格。 
示例:
$a . chr(32) . $b;
 
- 使用 HTML 实体
 
$a . ' ' . $b;
$a . ' ' . $b;
 
- 使用数组合并
 
implode('', array($a, ' ', $b));
 
- 使用字符串的转义
 
$a . '\x20' . $b;
 
- 读文件时可以用<>代替空格
 - 使用${IFS}可以代替空格(利用IFS变量存储空格)
 - %09 %0b %0c 代替绕过(可以用payload爆破了试试看,注意url编码两位一编,所以需要设置两位有效位)
 - 利用字符串截取绕过空格(利用已有的环境变量 env)
 

