分类 技术点滴 下的文章

PHP成熟源码加密方案对比

screenshot

# 方案 类型 是否免费 优劣势分析
1 Zend Guard 基于加解密客户端 收费 PHP官方出品,是目前成熟的加密方案,不支持PHP7。Zend Guard用于加密(安装在开发或打包环境),Zend Guard Loader用于解密(安装在线上环境)软件下载
市面上仅流传出Zend Guard 6.0的破解版,支持PHP 5.3 5.4,安全平台使用的是PHP 5.6.30。
2 ionCube PHP Encode 基于加解密客户端 收费 Zend Guard只能对带有PHP标记或源码的文件进行加密,而ionCube可对PHP或非PHP文件进行加密,ionCube在功能方面经过测试优胜于Zend公司的ZendGuard。
没有找到破解版。
3 Swoole Compiler 加密后可直接运行 收费 支持5.4-7.2全系列版本,优点:进行了很深入的编译优化,以目前 PHP 反汇编领域的情况看,根本破不了。
Swoole Compiler 有两道工序,第一步:从源码编译为 opcode,这一步会移除代码中除逻辑以外的其他信息,如注释、变量名称、类名、常量、函数名。 第二步:opcode 加密混淆处理。这一步才是关键,最终生成的指令连 vld、phpdbg 这些工具都无法识别。
4 PHP Screw 加密后可直接运行 免费 开源项目,没有维护了。加密算法比较弱,网上已有 破解方法
5 PHP Screw plus 基于扩展 免费 开源项目,基于扩展来加解密,采用AES256算法。他还有个功能,可阻止执行未经许可的php文件,这样黑客就算上传了webshell也不能执行。
6 PHP Beast 基于扩展 免费 开源项目,基于扩展来加解密,可选DES、AES、BASE64加密算法。支持自定义开发加密模块。

Elasticsearch数据分析实践之聚合功能介绍

1. terms聚合(group by+sum)

使用场景

获取数据中某个字段的值列表,例如nginx访问日志中clientip列表,通过内置排序取前10即为网站TOP10访客。

query DSL

{
  "size": 0,
  "aggs": { [1]
    "topIP": { [2]
      "terms": { [3]
        "field": "clientip",
        "size": 10,
        "order": {
          "_count": "desc"
        }
      }
    }
  }
}
-1- 聚合操作被置于顶层参数 aggs 之下(如果你愿意,完整形式 aggregations 同样有效)
-2- 然后,可以为聚合指定一个我们想要名称,本例中是: topIP
-3- 最后,定义单个桶的类型 terms

response

"aggregations": {
    "topIP": {
      "buckets": [
        {
          "key": "123.59.215.53",
          "doc_count": 961868
        },
        {
          "key": "115.231.24.219",
          "doc_count": 804120
        },
        {
          "key": "58.215.139.89",
          "doc_count": 439965
        },
        ……
      ]
    }
  }

可视化

饼图
饼图

条形图
条形图

2. date_histogram聚合

使用场景

时间维度上构建指标分析,如:

  • 网站今天每小时的访问量是多少?
  • 网站今天每小时的平均响应时间是多少?

query DSL

1 网站今天每小时的访问量是多少?
{
  "size": 0,
  "aggs": {
    "page_view": {
      "date_histogram": {
        "field": "@timestamp",
        "interval": "1h",
        "time_zone": "Asia/Shanghai",
        "format": "yyyy-MM-dd HH:mm",
        "min_doc_count": 1,
        "extended_bounds": {
          "min": 1493827200000,
          "max": 1493913599999
        }
      }
    }
  }
}
2 网站今天每小时的访问量和平均响应时间是多少?
{
  "size": 0,
  "aggs": {
    "page_view": {
      "date_histogram": {
        "field": "@timestamp",
        "interval": "1h",
        "time_zone": "Asia/Shanghai",
        "format": "yyyy-MM-dd HH:mm",
        "min_doc_count": 1,
        "extended_bounds": {
          "min": 1493827200000,
          "max": 1493913599999
        }
      },
      "aggs": {
        "avg_resp_time": {
          "avg": {
            "field": "upstream_response_time"
          }
        }
      }
    }
  }
}

response

"aggregations": {
    "page_view": {
      "buckets": [
        {
          "avg_resp_time": {
            "value": 0.008664544491125232
          },
          "key_as_string": "2017-05-04 09:00",
          "key": 1493859600000,
          "doc_count": 321402
        },
        {
          "avg_resp_time": {
            "value": 0.015245752238360864
          },
          "key_as_string": "2017-05-04 10:00",
          "key": 1493863200000,
          "doc_count": 456973
        },
        {
          "avg_resp_time": {
            "value": 0.01839558196852533
          },
          "key_as_string": "2017-05-04 11:00",
          "key": 1493866800000,
          "doc_count": 754249
        },
        {
          "avg_resp_time": {
            "value": 0.11747828058831987
          },
          "key_as_string": "2017-05-04 12:00",
          "key": 1493870400000,
          "doc_count": 530589
        },
        {
          "key_as_string": "2017-05-04 13:00",
          "key": 1493874000000,
          "doc_count": 64519
        }
      ]
    }
  }

可视化

3. histogram聚合

使用场景

针对数值型指标,通过设定间隔大小,快速绘制条形图。

query DSL

{
  "size": 0,
  "aggs": {
    "page_view": {
      "histogram": {
        "field": "bytes",
        "interval": 1024
      }
    }
  }
}

response

"aggregations": {
    "topIP": {
      "buckets": [
        {
          "key": 0,
          "doc_count": 199002
        },
        {
          "key": 1024,
          "doc_count": 296
        },
        {
          "key": 2048,
          "doc_count": 1754
        },
        {
          "key": 3072,
          "doc_count": 13
        },
        {
          "key": 4096,
          "doc_count": 15
        },
        {
          "key": 5120,
          "doc_count": 131
        },
        ……
      ]
    }
  }

可视化

4. cardinality聚合(unique count)

使用场景

统计去重后的数量,它提供一个字段的基数,即该字段的 distinct 或者 unique 值的数目。 SQL 形式为:

SELECT COUNT(DISTINCT color) FROM cars

query DSL

{
"size": 0,
  "aggs": {
    "2": {
      "date_histogram": {
        "field": "@timestamp",
        "interval": "30s",
        "time_zone": "Asia/Shanghai",
        "min_doc_count": 1,
        "extended_bounds": {
          "min": 1493881370817,
          "max": 1493882270817
        }
      },
      "aggs": {
        "1": {
          "cardinality": {
            "field": "uri_path"
          }
        }
      }
    }
  }
}

可视化

Ruby on Rails 入门及CVE-2016-0752远程代码执行漏洞研究

0x00 Ruby on Rails 简介


Ruby 是什么?

你说呢?

PHP是最好的语言。

Rails 是什么?

Rails 是使用 Ruby 语言编写的网页程序开发框架,目的是为开发者提供常用组件,简化网页程序的开发。只需编写较少的代码,就能实现其他编程语言或框架难以企及的功能。经验丰富的 Rails 程序员会发现,Rails 让程序开发变得更有乐趣。

0x01 Ruby on Rails 环境搭建


主要参考ruby社区文章:https://ruby-china.org/wiki/install_ruby_guide

文章中部分命令有误(估计是过时了),贴下我执行的命令情况:

$ curl -L https://get.rvm.io | bash -s stable

$ gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

$ curl -L https://get.rvm.io | bash -s stable

$ source /etc/profile.d/rvm.sh

$ rvm -v
rvm 1.26.11 (latest) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]

第一步 RVM 安装完成,接下来用 RVM 安装 Ruby 环境;

$ rvm install 2.2.4

ruby官网查看版本号,我选择的是:Previous stable: Ruby 2.2.4,没选最新的 2.3.0 ,怕有坑,新手入门还是选择历史稳定版好点。

1454039747505.png

安装完成,设置下默认版本

$ rvm 2.2.4 --default

测试下配置是否正确

$ ruby -v
ruby 2.2.4p230 (2015-12-16 revision 53155) [x86_64-linux]

$ gem -v
2.4.8

$ gem source -r https://rubygems.org
https://rubygems.org/ removed from sources

$ gem source -a https://ruby.taobao.org
https://ruby.taobao.org added to sources

安装 Bundler

$ gem install bundler

至此,Ruby 环境就已经安装好了,接下来安装 Rails。

$ gem install rails

然后测试安装是否成功。

$ rails -v
Rails 4.2.5.1

0x02 创建第一个应用(Hello World)

Rails 提供了多个被称为“生成器”的脚本,可以简化开发,生成某项操作需要的所有文件。其中一个是新程序生成器,生成一个 Rails 程序骨架,不用自己一个一个新建文件。

$ mkdir -p /home/learn-ruby/workspace && cd /home/learn-ruby/workspace

$ rails new hello_world

$ ll
total 4
drwxr-xr-x 12 root root 4096 Jan 29 00:11 hello_world

$ cd hello_world/

$ ll
total 60
drwxr-xr-x 8 root root 4096 Jan 29 00:10 app
drwxr-xr-x 2 root root 4096 Jan 29 00:11 bin
drwxr-xr-x 5 root root 4096 Jan 29 00:10 config
-rw-r--r-- 1 root root  153 Jan 29 00:10 config.ru
drwxr-xr-x 2 root root 4096 Jan 29 00:10 db
-rw-r--r-- 1 root root 1504 Jan 29 00:10 Gemfile
-rw-r--r-- 1 root root 3952 Jan 29 00:11 Gemfile.lock
drwxr-xr-x 4 root root 4096 Jan 29 00:10 lib
drwxr-xr-x 2 root root 4096 Jan 29 00:10 log
drwxr-xr-x 2 root root 4096 Jan 29 00:10 public
-rw-r--r-- 1 root root  249 Jan 29 00:10 Rakefile
-rw-r--r-- 1 root root  478 Jan 29 00:10 README.rdoc
drwxr-xr-x 8 root root 4096 Jan 29 00:10 test
drwxr-xr-x 3 root root 4096 Jan 29 00:10 tmp
drwxr-xr-x 3 root root 4096 Jan 29 00:10 vendor

可以看到 hello_world 文件夹中有很多自动生成的文件和文件夹,这些组成一个 Rails 程序。下面简单介绍默认生成的文件和文件夹的作用:

文件/文件夹 作用
app/ 存放程序的控制器、模型、视图、帮助方法、邮件和静态资源文件。本文主要关注的是这个文件夹。
bin/ 存放运行程序的 rails 脚本,以及其他用来部署或运行程序的脚本。
config/ 设置程序的路由,数据库等。详情参阅“设置 Rails 程序”一文。
config.ru 基于 Rack 服务器的程序设置,用来启动程序。
db/ 存放当前数据库的模式,以及数据库迁移文件。
Gemfile, Gemfile.lock 这两个文件用来指定程序所需的 gem 依赖件,用于 Bundler gem。关于 Bundler 的详细介绍,请访问 Bundler 官网
lib/ 程序的扩展模块。
log/ 程序的日志文件。
public/ 唯一对外开放的文件夹,存放静态文件和编译后的资源文件。
Rakefile 保存并加载可在命令行中执行的任务。任务在 Rails 的各组件中定义。如果想添加自己的任务,不要修改这个文件,把任务保存在 lib/tasks 文件夹中。
README.rdoc 程序的简单说明。你应该修改这个文件,告诉其他人这个程序的作用,如何安装等。
test/ 单元测试,固件等测试用文件。详情参阅“测试 Rails 程序”一文。
tmp/ 临时文件,例如缓存,PID,会话文件。
vendor/ 存放第三方代码。经常用来放第三方 gem。

要使程序能够被访问,我们需要先开启web server

$ rails server

上述命令会启动 WEBrick,这是 Ruby 内置的服务器。要查看程序,请打开一个浏览器窗口,访问 http://localhost:3000。应该会看到默认的 Rails 信息页面:

rails_welcome.png

PS:
Q:如何使程序监听在 0.0.0.0 ?
A:在 config/boot.rb 文件中添加如下代码,然后再次执行 rails server 即可。

require 'rails/commands/server'

module Rails
  class Server
    alias :default_options_bk :default_options
    def default_options
      default_options_bk.merge!(Host: '0.0.0.0')
    end
  end
end

Q:如何更改监听端口?
A:rails server -p 12345 加 -p 参数指定端口号。

接下来开始写自己的程序,Rails 也是基于 MVC 模式进行开发的,那我们首先创建个控制器(Controller)和视图(View)。

控制器用来接受向程序发起的请求。路由决定哪个控制器会接受到这个请求。一般情况下,每个控制器都有多个路由,对应不同的动作。动作用来提供视图中需要的数据。

视图的作用是,以人类能看懂的格式显示数据。有一点要特别注意,数据是在控制器中获取的,而不是在视图中。视图只是把数据显示出来。默认情况下,视图使用 eRuby(嵌入式 Ruby)语言编写,经由 Rails 解析后,再发送给用户。

Rails 很高级,创建控制器可用 控制器生成器 工具来自动创建,只需告诉生成器,我想要个名为“welcome”的控制器和一个名为“index”的动作,命令如下所示:

$ rails generate controller welcome index

生成的控制器文件在 app/controllers/welcome_controller.rb,内容如下:

class WelcomeController < ApplicationController
  def index
  end
end

视图文件在 app/views/welcome/index.html.erb ,我们编辑它,将内容修改为:

<h1>Hello, Rails!</h1>

然后访问看下效果:

1454049918392.png

至此,我们已经写完第一个 Rails 应用了。

0x03 CVE-2016-0752 远程代码执行漏洞研究

从上文我们可以看到,在控制器中并没有说明要加载哪个视图文件,这是Rails 的一个特性。

Rails controllers 的设计中,会根据被调用的方法,隐式的渲染对应的 view 文件。例如上文中,当调用 welcomeindex 方法时,如果代码中没有明确指定要渲染的 view file,框架就会隐式的渲染 index.html.erb 文件。

CVE-2016-0752 漏洞用到的是渲染方法(render method)。Rails 的文档中给出了多种调用渲染方法的方式,包括使用 file: 选项来明确指定要渲染的 view file 路径。

来看一段示例代码:

def show
  render params[:template]
end

第一眼看,这段代码非常简单,主要功能为渲染 template 参数指定的 view 模板。但Rails如何查找指定的模板呢?在 views 目录下查找? 在应用的 root 目录下查找?或是在其他位置?;该参数的值是一个模板的名称?是一个有特定后缀的文件名?或是一个完整的文件路径?

后续内容 http://drops.wooyun.org/papers/12519

内网渗透基础:内网、域、工作组、域控概念介绍

<h3>一、什么是内网</h3>

<p>局域网Local Area Network, LAN),又称内网,是指在某一区域内由多台计算机互联成的计算机组。</p> <p>局域网可以实现文件管理、应用软件共享、打印机共享、扫描仪共享、工作组内的日程安排、电子邮件和传真通信服务等功能。局域网严格意义上是封闭型的。它可以由办公室内几台甚至上千台计算机组成。决定局域网的主要技术要素为:网络拓扑,传输介质与介质访问控制方法。</p> <p>局域网标准定义了传输媒介、编码和介质访问等底层(一二层)功能。要使数据通过复杂的网络结构传输到达目的地,还需要具有寻址、路由和流量控制等功能的网络协议的支持。TCP/IP(传输控制协议/互联网络协议)是最普遍使用的局域网网络协议。它也是互联网所使用的网络协议。其他常用的局域网协议包括,IPX、AppleTalk等。</p>

<p>更多内容请查阅百度百科介绍维基百科介绍</p>

<h3>二、什么是域、域控制器</h3>
<p>域(Domain)是相对工作组(Workgroup)的概念,形象的说,域就像中央集权,由一台或数台域控制器(Domain Controller)管理域内的其他计算机;工作组就像各自为政,组内每一台计算机自己管理自己,他人无法干涉。</p>
<p>域是一个计算机群体的组合,是一个相对严格的组织,而域控制器则是这个域内的管理核心。</p>
<p>域控制器的作用相当一个门卫,它包含了由这个域的账户密码、管理策略等信息构成的数据库。当一台计算机登录域时,域控制器首先要鉴别这台电脑是否是属于这个域的,用户使用的登录账号和密码是否正确。如果正确则允许计算机登入这个域,使用该域内其有权限访问的任何资源,像文件服务器,打印服务器(也就是说域控制器仅起到一个验证作用,访问其他资源并不需要再跟域控制器扯上关系);如果不正确则不允许计算机登入,这时计算机将无法访问域内任何资源,这在一定程度上保护了企业网络资源。</p>
<p>另外,域控制器可以对域内计算机进行集中管理,比如在域控制器上可以定义所有用户不能更改桌面,或者所有用户的密码长度必须8位以上,而工作组环境的计算机则无法做到这些。</p>
<p>一般情况下,域控制器集成了DNS服务,可以解析域内的计算机名称(基于TCP/IP),解决了工作组环境不同网段计算机不能使用计算机名互访的问题。</p>
<p>域控制器自身所需配置非常低,对网络带宽的占用也几乎微不足道,另外正常情况下域控制器是不可能发布到外网使用的,因为它的安全关系到整个域组织的安全,如果用户希望他在外网也能够登入企业域使用内部资源,最常用的解决方式是在网关处开通VPN功能,这样既能保证账号密码传输的安全性,又能像在局域网一样便捷地访问网络资源。</p>

<h3>三、域、工作组和家庭组的区别</h3>

域、工作组和家庭组表示在网络中组织计算机的不同方法。它们之间的主要区别是对网络中的计算机和其他资源的管理方式。 网络中运行 Windows 的计算机必须属于某个工作组或某个域。家庭网络中运行 Windows 的计算机也可以属于某个家庭组,但这不是必需的。 家庭网络中的计算机通常是工作组的一部分,也可能是家庭组的一部分,而工作区网络上的计算机通常是域的一部分。 注意:家庭组在 Windows Server 2008 R2 中不可用。

<h4>在工作组中:</h4>

  • 所有的计算机都是对等的,没有计算机可以控制另一台计算机。
  • 每台计算机都具有一组用户帐户。若要登录到工作组中的任何计算机,您必须具有该计算机上的帐户。
  • 通常情况下,计算机的数量不超过二十台。
  • 工作组不受密码保护。
  • 所有的计算机必须在同一本地网络或子网中。

<h4>在家庭组中:</h4>

  • 家庭网络中的计算机必须属于某个工作组,但它们也可以属于某个家庭组。使用家庭组,可轻松与家庭网络中的其他人共享图片、音乐、视频、文档和打印机。
  • 家庭组受密码保护,但在将计算机添加到家庭组时,只需要键入一次密码即可。

<h4>在域中:</h4>

  • 有一台或多台计算机为服务器。网络管理员使用服务器控制域中所有计算机的安全和权限。这使得更容易进行更改,因为更改会自动应用到所有的计算机。域用户在每次访问域时必须提供密码或其他凭据。
  • 如果具有域上的用户帐户,您就可以登录到域中的任何计算机,而无需具有该计算机上的帐户。
  • 由于网络管理员经常要确保计算机之间的一致性,所以,您也许只能对计算机的设置进行有限制地更改。
  • 一个域中可以有几千台计算机。
  • 计算机可以位于不同的本地网络中。

<h3>四、如何查看计算机是否位于某个工作组或域中</h3>
<p>方法一</p>

  1. 通过单击「开始」按钮、右键单击“计算机”,然后单击“属性”,打开“系统”窗口。
  2. 在“计算机名称、域和工作组设置”下,您将看到名称前面有“工作组”或“域”字样。

<p>计算机名称、域和工作组设置</p>
<p>方法二</p>

  1. Windows+R组合键调出“运行”功能,输入cmd回车,打开命令提示符;
  2. 输入 net view /domain 并回车。

<p>计算机名称、域和工作组设置</p>

<h3>五、如何配置域环境、域控制器</h3>
<p>Google下网络上有很多文章,我这里列举两篇:</p>
<p>Windows Server 2008 R2 配置AD(Active Directory)域控制器</p>
<p>Windows Server 2012 AD 域和站点部署系列</p>

<h3>六、内网渗透常用命令</h3>

------------------------------ 常见信息收集命令----------------------------------- net user ------> 本机用户列表 net localgroup administrators ------> 本机管理员[通常含有域用户] net user /domain ------> 查询域用户 net group /domain ------> 查询域里面的工作组 net group "domain admins" /domain ------> 查询域管理员用户组 net localgroup administrators /domain ------> 登录本机的域管理员 net localgroup administrators workgroupuser001 /add ----->域用户添加到本机 net group "Domain controllers" -------> 查看域控制器(如果有多台) ---------------------------------------------------------------------------------- ipconfig /all ------> 查询本机IP段,所在域等 net view ------> 查询同一域内机器列表 net view /domain ------> 查询域列表 net view /domain:domainname -----> 查看workgroup域中计算机列表 -------------------第三方信息收集----------------- NETBIOS 信息收集工具 SMB信息收集 空会话信息收集 端口信息收集 漏洞信息收集 原文:http://www.freebuf.com/articles/web/5783.html

常见数据库默认端口号一览表

MS SQL SERVER数据库server,默认的端口号为1433/tcp 1433/udp
MS SQL SERVER数据库monitor,默认的端口号为1434/tcp 1434/udp

MySQL 默认端口号为3306

Oracle 数据库,默认的端口号为1521
ORACLE EMCTL,默认的端口号为1158
Oracle XDB( XML 数据库),默认的端口号为8080
Oracle XDB FTP服务,默认的端口号为210

DB2 默认端口号为5000

pointbase 默认端口号为9092

4100是sybase在unix平台上的默认监听端口,4200是备份服务的端口
(貌似不同版本有差,未确认)

PostgreSQL 端口号默认是5432