CTF 的基础知识 & 题型 & Trick总结
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中新增)
- ctf 常用
hello-ctf
SQL 注入
我选择 sqlmap
.
文件包含
类似于 C++
的, php
也会在源代码中进行 include
操作来进行外部文件的包含。
php
常见的四个文件包含函数
include()
include_once()
require()
require_once()
区别不是很大。
注意:如果函数里的参数可控
- 如果代码符合
php
规范,则会执行内容。 - 如果代码不符合,会暴露源码。