CTF 的基础知识 & 题型 & Trick总结

reverber / 2024-10-15 / 原文

references:
hello-ctf
ctf-wiki

web

php 语法基础

references:

php-noob

1.php 脚本的基本格式:

<?php
//coding here
?>

php 代码同样以 ; 结尾。

php 文件的后缀名大多是 php ,也有诸如 php5 php4 phps 之类,如果普通的后缀名被拦截不妨试试其他的。

php 变量用 $ 来定义,大小写敏感,但是不用声明数据类型。其他命名规则基本与 c++ 相同。

$myvar=114514;
$myvar2="1145141";

注释与 c++ 相同。

2.php 输出

echo 或者 print 使用方法:

echo $var1;
print $var1;

echo "a","b","c";

区别在于 print 只能输出单个字符串,只返回1 echo 可以输出多个。

print_r 可以输出数组,var_dump 也可以,区别大概在于 var_dump 可以输出数据类型。

3.php 比较

  • 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
  • 严格比较:用三个等号 === 比较,除了比较值,也比较类型。


4.php 数组

使用 array() 函数来创建数组,会自动分配下标。

$test=array("a","b","c");

此时 $test[0]="a",$test[1]="b"

关联数组(有点像 c++ 的 map

$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");

or

$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43"; 

然后可以指定使用的键。

<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
echo "Peter is " . $age['Peter'] . " years old.";
?>

5.php 函数

基本函数和 c++ 长得差不多。

抽象的地方在于以下

<?php
class Foo
{
    function Variable()
    {
        $name = 'Bar';
        $this->$name(); // 调用 Bar() 方法
    }

    function Bar()
    {
        echo "This is Bar";
    }
}

$foo = new Foo();
$funcname = "Variable";
$foo->$funcname();  // 调用 $foo->Variable()

?>

6.php 魔术常量

形如 __FILE__ 这样的 __XXX__ 预定义常量,被称为魔术常量。

__FILE__ //返回文件的完整路径和文件名

highlight_file(__FILE__); //代码高亮的显示当前文件内容

__LINE__

//文件中的当前行号。

__DIR__

//文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。

//它等价于 dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增) 
  1. ctf 常用

hello-ctf

SQL 注入

我选择 sqlmap.

文件包含

类似于 C++ 的, php 也会在源代码中进行 include 操作来进行外部文件的包含。

php 常见的四个文件包含函数

include()
include_once()
require()
require_once()

区别不是很大。

注意:如果函数里的参数可控

  • 如果代码符合 php 规范,则会执行内容。
  • 如果代码不符合,会暴露源码。