Reber's Blog

会一点点编程、会一点点渗透


PHP 之字符串

0x00 特点

  1. 字符串可以使用数组的处理函数操作,但并不是真正的数组
  2. 双引号中的变量用{}括起来,因为字符串中若遇到$符号,解析器会尽可能多的获取后面的字符以组成一个合法的变量名
<?php
        $lamp = array('os' => 'Linux', 'webserver' => 'Apache', 'db' => 'Mysql', 'language' => 'PHP');
        
        echo "A OS is $lamp[os].";  // ok
        echo "A OS is $lamp['os'].";  // false
        echo "A OS is {$lamp['os']}.";  //ok
        echo "A OS is {$lamp[os]}.";  // ok

        echo "This square is $square->width meters broad."; //ok
        echo "This square is $square->width meters broad."; //ok
        echo "This square is $square->width meters broad."; //ok
?>

0x01 常用字符串输出函数

函数名功能描述
echo输出字符串
print()输出一个或多个字符串
die()输出一条消息,并退出当前脚本
printf()输出格式化字符串
sprintf()把格式化字符串写入到一个变量中

0x02 函数echo()

输出一个或多个字符串
void echo(string arg1 [,string …])

more...

PHP 之面向对象

0x00 面向对象

  1. 面向对象概念
    • 面向对象是达到了软件工程的三个目标:重用性、灵活性和扩展性,使其编程的代码更加简洁、更易于维护、并且具有更强的可重用性。
  2. 类和对象的关系
    • 在面向对象的编程语言中,类是一个对立的程序单位,而对象的抽象就是类。类描述了一组有相同特性(属性)和相同行为(方法)的对象。开发时要先抽象类再用该类去创建对象。而我们的程序中直接使用的是对象而不是类。
  3. 什么是类
    • 在面向对象的编程语言中,类是一个对立的程序单位,是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了同意的抽象描述,其内部包括成员属性和服务的方法两个部分。
  4. 什么是对象
    • 在客观世界里,所有的事物都是由对象和对象之间的联系组成的。对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,一个对象由一组属性和有权对这些属性进行操作的一组服务的封装体。

0x01 类的声明

  1. 类名和变量名还有函数名的命名规则类似,都遵循PHP中定义名称的命名规则。
  2. 若类名由多个单词组成,习惯上每个单词的首字母要大写
  3. 类中成员可分为属性和方法
  4. 属性为静态描述,方法为动态描述
  5. 在类中声明成员属性时,变量前面一定要有关键字,如:public、private、static等
  6. 若不需要有特定意义的修饰,则使用var关键字
格式:
[一些修饰类的关键字] class 类名 {
    类中成员;
}

Class Person {
成员属性:
    姓名、性别、年龄、身高、体重、电话、住址等
成员方法:
    说话、学习、走路、吃饭、开车、使用手机等
}

例子:
<?php
    class Person {
        var $name;
        var $age;
        var $sex;
        function say() {
            echo "人在说话";
        }
        function run() {
            echo "人在走路";
        }
    }
?>

0x02 实例化对象

格式:
$变量名 = new 类名称([参数列表]);
$变量名 = new 类名称;

例子:
<?php
    class Phone {
    // ...
    }
    class Person {
    // ...
    }
    $person1 = new Person();
    $person2 = new Person();
    $person3 = new Person;
    $phone1 = new Phone();
    $phton2 = new Phone();
    $phton3 = new Phone;
?>

0x03 对象中成员的访问

<?php
	/**
    *声明一个人类Person,其中包含三个成员属性和两个成员方法
    */
    class Person
    {
    	var $name;
        var $age;
        var $sex;
        
        function say() {
        	echo "我的名字:".$this->name.",性别:".$this->sex.",年龄:".$this->age."。<br />\n";
        }
        function run() {
        	echo $this->name."在走路<br />\n";
        }
    }
    
    $xiaoming = new Person();
    $wyb = new Person();
    
    $xiaoming->name = "小明";
    $xiaoming->sex = "男";
    $xiaoming->age = 16;
    
    $wyb->name = "wyb";
    $wyb->sex = "男";
    $wyb->age = 18;
    
    $xiaoming->say();
    $wyb->run();
?>

0x04 构造方法和析构方法

  • 构造方法和析构方法是对象中两个特殊的方法
  • 构造方法是对象创建完成后第一个被对象自动调用的方法
  • 析构方法是对象在销毁之前最后一个被对象自动调用的方法
  • 通常用构造方法完成一些对象的初始化工作,用析构方法完成一些对象在销毁前的清理工作
function _ _construct([参数列表]) {
	//方法体,通常用来对成员属性进行初始化赋值
}

function _ _destruct([参数列表]) {
	//方法体,通常用来完成一些在对象销毁前的清理工作
}

PHP 之数组

0x00 分类

  1. 索引数组 索引值从0开始,依次递增
  2. 关联数组 以字符串为索引,键和值对是无序组合,每个键都是唯一的

0x01 数组的定义

两种方法:

  1. 直接为数组元素赋值即可声明数组
  2. 使用array()函数声明数组
<?php
        // 1.直接为数组元素赋值即可声明数组
        $contact_index[0] = 1;
        $contact_index[1] = "高某";
        $contact_index[2] = "A公司";
        $contact_index[3] = "北京市";
        $contact_index[] = "gao@a.com";
        var_dump($contact_index);
        
        $contact_key["ID"] = "2";
        $contact_key["姓名"] = "峰某";
        $contact_key["公司"] = "B公司";
        $contact_key["邮箱"] = "feng@b.com";
        var_dump($contact_key);

        // 2.使用array()函数声明数组
        $contact_key_array = array(
            "ID" => 1;
            "姓名" => "峰某";
            "公司" => "B公司";
            "邮箱" => "feng@b.com";
        );
        var_dump($contact_key_array);
?>

0x02 数组的遍历

  1. for语句遍历数组
  2. foreach语句遍历数组
<?php
        // for语句遍历索引数组
        $cars=array("Volvo","BMW","SAAB");
        $arrlength=count($cars);
        for($x=0; $x < $arrlength; $x++) {
            echo $cars[$x];
            echo "<br>";
        }

        // foreach语句遍历关联数组
        $age=array("Bill"=>"35", "Steve"=>"37", "Peter"=>"43");
        foreach($age as $x => $x_value) {
            echo "Key=" . $x . ", Value=" . $x_value;
            echo "<br>";
        }
?>

0x03 预定义数组

  1. 它就是一个特殊数组,操作方式没有区别
  2. 不用声明它们,每个PHP脚本中默认存在
  3. 它们在全局范围内自动生效
    预定义数组说明
    $_SERVER变量由Web服务器设定或者直接与当前脚本的执行环境相关联
    $_ENV执行环境提交至脚本的变量
    $_GET经由URL请求提交至脚本的变量
    $_POST经由HTTP POST方法提交至脚本的变量
    $_REQUEST经由GET,POST,COOKIE机制提交至脚本的变量,该数组不值得信任
    $_FILES经由HTTP POST文件上传而提交至脚本的变量
    $_COOKIE经由HTTP Cookies方法提交至脚本的变量
    $_SESSION当前注册给脚本会话的变量
    $GLOBALS包含一个引用指向每个当前脚本的全局范围内的有效的变量。该数组的键名为全局变量的名称

0x04 合并数组

  • array_merge()函数将数组合并到一起,返回一个联合的数组。

  • array array_merge(array array1 array2…,arrayN)

more...

PHP 之基础

0x00 PHP的作用

1. 收集表单数据
2. 生成动态网页
3. 字符串处理
4. 动态输出图片
5. 处理服务器端文件系统
6. 编写数据库支持的网页
7. 会话跟踪控制
8. 处理XML文件
9. 支持大量的网络协议
10. 服务器端的其他相关操作

0x01 PHP代码嵌入位置

可以将PHP语言嵌入到扩展名为.php的HTML文件中的任何位置,只要在文件中使用"<?php"起始符和终止符"?>"就会开启PHP模式,在PHP模式中写入PHP语句即可将PHP语言嵌入到HTML文件中。

more...

使用 theHarvester 得到邮箱

0x00 软件

使用theHarvester搜集邮箱
使用dnsenum得到邮箱服务器域名
使用nmap查看端口开启情况
使用Hydra进行弱口令猜解

0x01 设置Shadowsocks为全局模式:

设置SS为全局代理

more...

通过 gh-pages 发布博客

环境:Ubuntu 14.4

0x00 添加密钥

➜ ssh-keygen -t rsa -b 2048 -C "123456@qq.com" -f id_rsa_github # 生成密钥
➜ cd ~/.ssh/
➜ cat id_rsa_github.pub # 将公钥添加到 github

➜ git config --global user.name "reber" # 配置本地用户
➜ git config --global user.email "123456@qq.com" # 配置本地邮箱

➜ ssh -T git@github.com # 验证密钥是否添加成功

0x01 gh-pages

Github 创建项目仓库后会产生一个 main 分支,只需要再添加 gh-pages 分支就可以创建静态页面了

more...

Ubuntu 下安装 sublime text 3

环境:ubuntu14.4

0x00 安装

  1. 添加Sublime Text 3的仓库
    sudo add-apt-repository ppa:webupd8team/sublime-text-3

  2. 更新软件库
    sudo apt-get update

  3. 安装Sublime Text 3
    sudo apt-get install sublime-text-installer

0x01 解决不能输入中文的问题

  1. 新建sublime_imfix.c(位于~目录),写入如下内容
#include <gtk/gtkimcontext.h>
void gtk_im_context_set_client_window (GtkIMContext *context,GdkWindow  *window)
{
GtkIMContextClass *klass;
g_return_if_fail (GTK_IS_IM_CONTEXT (context));
klass = GTK_IM_CONTEXT_GET_CLASS (context);
if (klass->set_client_window)
    klass->set_client_window (context, window);
g_object_set_data(G_OBJECT(context),"window",window);
if(!GDK_IS_WINDOW (window))
    return;
int width = gdk_window_get_width(window);
int height = gdk_window_get_height(window);
if(width != 0 && height !=0)
    gtk_im_context_focus_in(context);
}
  1. 将上一步的代码编译成共享库libsublime-imfix.so
cd ~  
sudo apt-get install gtk+-2.0  
gcc -shared -o libsublime-imfix.so sublime_imfix.c  `pkg-config --libs --cflags gtk+-2.0` -fPIC
  1. 将libsublime-imfix.so拷贝到sublime_text所在文件夹
    sudo mv libsublime-imfix.so /opt/sublime_text/

  2. 修改文件/usr/bin/subl的内容

more...

Ubuntu 搭建 LAMP

0x00 环境

我是在虚拟机中安装14.04.4版的Ubuntu 下载Ubuntu14.04.4

0x01 配源或选择最快的更新服务器

  • 选择最快的更新服务器:
    System Settings –> Software & Updates –> Download from:other –> Select Best Server –> Choose Serve –> Close

  • 配源:
    reber@ubuntu:$ cp /etc/apt/sources.list /etc/apt/sources.list.bak
    reber@ubuntu:
    $ vim /etc/apt/sources.list

more...

Git 的用法

0x00 仓库

  • 创建仓库
    • git init
  • 克隆
  • 添加远程仓库连接
  • 删除远程仓库信息
    • git remote rm origin

0x01 添加 SSH key

生成 key

➜ ssh-keygen -t rsa -b 2048 -f id_rsa_github -C "123456@qq.com"

将 ~/.ssh/ 下生成的 id_rsa_github.pub 的内容添加到 github

more...

Previous Page 16 of 18 Next Page