ctfshow 萌新web10
web12
web 13
ctfhub技能树 web
信息泄露
bak文件
vim缓存
当开发人员在线上环境中使用 vim 编辑器,在使用过程中会留下 vim编辑器缓存,当vim异常退出时,缓存会一直留在服务器上,引起网站源码泄露。vim缓存文件的后缀为.swp,因为文件是隐藏的,所以在前加.。
.DS_Store
.DS_Store 是 Mac OS 保存文件夹的自定义属性的隐藏文件。通过.DS_Store可以知道这个目录里面所有文件的清单。
访问.DS_Store,得到一个文件,在访问文件里的字符串。
PHP
php语法
1. 以<?php开始,?>结束,每行代码以;隔开。注释://或/*....*/
2. echo和print是两个基础输出语言
3. 定义变量$+变量名,变量名必须是字母或者下划线开头,全局变量不能在函数内使用,若要引用,需要使用global关键字,php将所有的全局变量储存在$GLOBALS[index]数组中,可以通过这个数组访问变量,index为变量名。例如$GLOBAL['x']=$GLOBAL['x']+$GLOBAL['y'](x,y为全局变量)。
4. echo可以输出一个或者多个字符串,print只能输出一个字符串,返回值1。
5. php中用var_dump()返回变量的数据类型和值。
6. 数组
array()用于创建数组:$a = array("123","234");
数组有三种类型:数值数组,关联数组,多维数组。
(1)数值数组:
count()函数用于返回数组长度。
(2)关联数组
6. foreach用法:
两种用法:
foreach(array as $value)
foreach(array as $key => $value)
$b = array("li","we","er");
foreach($b as $value)
{
echo $value."<br>";
}
7. 常量:用define()函数
例:define("as","12",true);
定义了一个as常量,常量的值为12,true表示不区分大小写。echo as输出12
8. strpos()函数:
strpos("hello word","world"); 在前一个字符串中查找后一个字符串,返回后一个字符串出现位置首地址。
9. intdiv( , )函数第一个参数除于第二个参数的值并取整(向下取整)
10. 一些运算符
11. 一些排序函数
sort() - 对数组进行升序排列
rsort() - 对数组进行降序排列
asort() - 根据关联数组的值,对数组进行升序排列
ksort() - 根据关联数组的键,对数组进行升序排列
arsort() - 根据关联数组的值,对数组进行降序排列
krsort() - 根据关联数组的键,对数组进行降序排列
12.超级全局变量
13. php函数
function functionname()
{
}
与C语言函数大致类似。
14. 一些常量
_LINE_:表示当前行号
_FILE_:文件的完整路径和文件名。
_DIR_:文件所在的目录
_FUNCTION_:函数名称
_CLASS_:类的名称
_TRAIT_:Trait的名字
_METHOD_:类的方法名
_NAMESPACE_:当前命名空间的名称
15. 命名空间
<?php
namespace MyProject {
class Connect { }
function connect() { }
}
namespace AnotherProject {
const CONNECT_OK = 1;
class Connection { }
function connect() { }
}
?>
避免重名问题,声明命名空间前唯一可使用的代码是declare(encoding = ' '),
16. 面向对象
类定义:class 类名{}
<?php
class phpClass {
var $var1;
var $var2 = "constant string";
function myfunc ($x) {
[..]
}
}
$x = new phpClass;
?>
变量 $this代表自身的对象。(类似于结构体,定义一个x变量,使用new)
PHP_EOF 为换行符。
析构函数
void __destruct ( void )
继承
class Child extends Parent {
// 代码部分
}
其中Child继承了Parent,并且进行扩展。
17. 接口
<?php
// 声明一个'iTemplate'接口
interface iTemplate
{
public function f($name, $var);
public function g($template);
}
// 实现接口
class Template implements iTemplate
{
private $vars = array();
public function f($name, $var)
{
$this->vars[$name] = $var;
}
public function g($template)
{
foreach($this->vars as $name => $value) {
$template = str_replace('{' . $name . '}', $value, $template);
}
return $template;
}
}
使用接口可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
使用接口,需要用到implements关键字。
18. 抽象类
abstract class AbstractClass
{
// 强制要求子类定义这些方法
abstract protected function f1();
abstract protected function f2($prefix);
// 普通方法(非抽象方法)
public function printOut() {
print $this->f1() . PHP_EOL;
}
}
抽象类不能被实例化,被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
当一个子类继承抽象类时,必须定义抽象类的所有抽象方法
此外,子类方法可以包含父类抽象方法中不存在的参数。
19. Static:声明类属性或方法为 static,就可以不实例化类而直接访问。
<?php
class Foo {
public static $x = 'we';
public function f() {
return self::$x;
}
}
print Foo::$x . PHP_EOL;
$foo = new Foo();
print $foo->f() . PHP_EOL;
?>
输出:we we
静态属性不可以由对象通过 -> 操作符来访问。
20. final关键字
若一个类中的方法被定义了final,则该方法不能被子类继承。
21. 在子类中调用父类的构造方法使用:parent::_construct()
22. PHP构造函数
<?php
class BaseClass {
function __construct() {
print "BaseClass 类中构造方法" . PHP_EOL;
}
}
class SubClass extends BaseClass {
function __construct() {
parent::__construct(); // 子类构造方法不能自动调用父类的构造方法
print "SubClass 类中构造方法" . PHP_EOL;
}
}
class OtherSubClass extends BaseClass {
// 继承 BaseClass 的构造方法
}
// 调用 BaseClass 构造方法
$obj = new BaseClass();
// 调用 BaseClass、SubClass 构造方法
$obj = new SubClass();
// 调用 BaseClass 构造方法
$obj = new OtherSubClass();
?>
构造方法,定义一个变量时就执行。
ctfshow web 入门
web 19
查看页面源码,得到密码
再抓一下包,改一下密码。