Reber's Blog

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


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()函数将数组合并到一起,返回一个联合的数组。

    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/

    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

    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...

Linux 之文本处理软件 awk

awk默认是以行为单位处理文本的,对文本中的每一行都执行后面 “{ }” 中的语句。

0x00 awk

  • 若有一个需要重新格式化的字典test.txt(用户名、密码、地址):
xiaosan sadasdw jiaozuo
234wer  asdfasd asdas
1111    aaaa    cccc
2222    aaaa    degd
1111    aaaa    cccc
3333    aaaa    dfger
21asd   sdfsd   sadasd
dwqx    asds    sasdfcv
  • 要求:
1.里面有重复数据,使用命令去重
2.提取出用户名和密码 每一行前面加上id数字,递增。
3.只提取出密码作为爆破字典
4.某些公司都是一个公司前缀+姓名简写,所以为用户名一栏全部改为uv_用户名
5.提取出密码一列,有些密码爆破成功率高,所以增加一列,标出密码出现次数

0x01 去重

$ cat test.txt | awk '!a[$1]++'
$ cat test.txt | uniq #作用和上面命令相同
xiaosan sadasdw jiaozuo
234wer  asdfasd asdas
1111    aaaa    cccc
2222    aaaa    degd
3333    aaaa    dfger
21asd   sdfsd   sadasd
dwqx    asds    sasdfcv

0x02 去重、添加id

一般字典不需要id、user、pass等标示符,这里只是为了便于观看

$ cat test.txt | awk '!a[$1]++' | awk -F '\t' '{print "id:"NR"\tuser:"$1"\tpass:"$2"\taddress:"$3}' | column -t  #最后一个命令可以将列对齐
id:1    user:aosan      pass:sadasdw    address:jiaozuo
id:2    user:234wer     pass:asdfasd    address:asdas
id:3    user:1111       pass:aaaa       address:cccc
id:4    user:2222       pass:aaaa       address:degd
id:5    user:3333       pass:aaaa       address:dfger
id:6    user:21asd      pass:sdfsd      address:sadasd
id:7    user:dwqx       pass:asds       address:sasdfcv

0x03 去重、添加id、添加公司前缀

$ cat test.txt | awk '!a[$1]++' | awk -F '\t' '{print "id:"NR"\tuser:uv_"$1"\tpass:"$2"\taddress:"$3}'
id:1    user:uv_aosan   pass:sadasdw    address:jiaozuo
id:2    user:uv_234wer  pass:asdfasd    address:asdas
id:3    user:uv_1111    pass:aaaa       address:cccc
id:4    user:uv_2222    pass:aaaa       address:degd
id:5    user:uv_3333    pass:aaaa       address:dfger
id:6    user:uv_21asd   pass:sdfsd      address:sadasd
id:7    user:uv_dwqx    pass:asds       address:sasdfcv

0x04 去重然后输出密码

$ cat test.txt | awk '!a[$1]++' | awk -F '\t' '{print "pass:"$2}'
pass:sadasdw
pass:asdfasd
pass:aaaa
pass:aaaa
pass:aaaa
pass:sdfsd
pass:asds

0x05 输出密码、得到密码出现次数

下面的'a[$1]++'是按第一列来去重的,若有两条数据只有第一列重复则成功,可以用$0按行来去重
$ cat test.txt | awk '!a[$1]++' | awk -F '\t' '{print $2}' | awk '{a[$1]++} END {for (j in a) print a[j],j}'
1 sadasdw
1 sdfsd
1 asdfasd
1 asds
3 aaaa

uniq 只能去除挨着的重复数据,所以先sort升序排序,然后uniq -c统计重复,再sort -r降序排序
cat test.txt | awk '{print $2}' | sed '1d' |sort | uniq -c |sort -r

0x06 其他:

  • 对!a[$1]++的解释如下:

    more...

Previous Page 16 of 18 Next Page