wget 忽略无效的 SSL 证书
2018-09-11 tech linux 1 mins 57 字
wget --no-check-certificate https://cdn.kelu.org/file.tgz
wget --no-check-certificate https://cdn.kelu.org/file.tgz
一位中国公民在新加坡出席一次网络安全会议期间,决定黑入他下榻酒店的WiFi。
腾讯的23岁安全工程师郑杜涛(音译:Zheng Dutao)很想找出飞龙酒店(Fragrance Hotel)一家分店的WiFi服务器有没有安全漏洞,结果吃上了官司,真是好奇心害死猫。
郑某成功地黑入了这台服务器,并在一篇名为“钻新加坡酒店的空子”的帖子中撰文介绍了始末,他还公布了酒店管理员使用的服务器密码。结果这篇博文引起了新加坡网络安全局(CSA)的注意。
周一(9月24日),郑某因此违法行为在新加坡国家法院被罚5000美元。他对这一项罪名供认不讳:有意披露密码,未经授权擅自访问属于飞龙酒店的数据。法院在对他判决时考虑到了一起类似的罪状。
郑某上个月抵达新加坡参加“夺旗”(Capture the Flag)比赛,这项比赛是在洲际酒店举行的网络安全会议上举办的。参赛的安全专家们各自展示黑客攻击和反黑客能力。
郑某在8月27日入住了位于武吉士的飞龙酒店。一天后,他很好奇,想知道这家酒店的WiFi服务器有没有可能存在安全漏洞。通过谷歌,他成功地搜索到了这家酒店WiFi系统的默认用户ID和密码。
郑某连接到酒店的WiFi网关后,在接下来的三天内执行脚本、解密文件和破解密码,然后闯入了酒店WiFi服务器的数据库。
酒店使用的这款服务器存在一个安全漏洞,郑某钻了该漏洞的空子,最终闯入了服务器。他还试图访问飞龙酒店小印度分店的WiFi服务器,但结果失败了。
郑某在其个人博客上记述了他的攻击步骤。他在博文中公布了飞龙酒店WiFi服务器的管理员密码,还在WhatsApp群聊中共享了那篇博文的URL链接。
最近给个人的 mac 重装了系统,所有的配置全部没有了。对 Mac 下的 PHP 不同语言的环境切换还是很头疼的。这篇文章将介绍我使用 docker 部署本地 lnmp 开发环境的整个过程,可以结合我的 github 提交历史了解。业务涉及的知识点有 openresty、php 7.1、laravel、composer、postgresql、redis 等。
本项目也已经开源在 github 上,可以简单使用 docker-compose up -d 命令直接运行起来。
这套环境由前端 openresty 接收请求,通过 linux sock 的方式传给 php-fpm,php-fpm 解析 php 代码,并连接数据库 postgresql 和 redis。
openresty 模块要做好配置文件,与 php-fpm 进行对接。
php-fpm 模块,需要事前编译 postgresql 扩展包。也要做好配置文件,与 openresty 对接。同时代码运行也需要提前使用 composer 进行依赖包的安装,并做好与 postgresql 的配置对接。
postgresql 模块需要准备好 dump 文件,用于首次运行的数据库准备工作。如有需要还要编辑postgresql的配置文件,比如打开慢日志、外部连接等配置。
相关的日志文件保存到 log 文件夹下。
对应的 docker-compose.yml 文件如下:
version: '3.0'
services:
nginx:
image: openresty/openresty:alpine
volumes:
- $MYWORKSPACE:/var/www/html
- ./openresty:/etc/nginx/conf.d
- ./sock:/sock
- ./log:/log
links:
- "php:php"
ports:
- "8000:80"
php:
build: ./php
volumes:
- $MYWORKSPACE:/var/www/html
- ./php/php-fpm.d:/usr/local/etc/php-fpm.d
- ./php/conf/php-fpm.conf:/usr/local/etc/php-fpm.conf
- ./sock:/sock
- ./log:/log
links:
- "pgsql:pgsql"
pgsql:
image: postgres:9.4-alpine
volumes:
- ./psql/data:/var/lib/postgresql/data
- ./psql/dump:/var/lib/postgresql/dump
ports:
- "5432:5432"
基于 laravel 的写法,主要注意点在于 fastcgi 使用 sock 的方式,对提高 php 性能很有帮助。
server {
listen 80;
access_log off;
error_log off;
root /var/www/html/public;
location = / {
fastcgi_pass unix:/sock/www.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
location = /_status {
fastcgi_pass unix:/sock/www.sock;
include fastcgi.conf;
fastcgi_param SCRIPT_NAME /_status;
}
location / {
# URLs to attempt, including pretty ones.
try_files $uri $uri/ /index.php?$query_string;
}
# Remove trailing slash to please routing system.
if (!-d $request_filename) {
rewrite ^/(.+)/$ /$1 permanent;
}
location ~* ^(.+\.php)(.*)$ {
# limit_req zone=req_perip burst=8;
fastcgi_pass unix:/sock/www.sock;
fastcgi_split_path_info ^(.+\.php)(.*)$;
include fastcgi.conf;
}
location /nginx_status {
stub_status on;
access_log off;
}
}
我使用的是 postgresql 数据库,官方默认没有带有 postgresql 的扩展,需要自行编译。官方专门为容器提供了三个的命令,用来简化扩展的安装: docker-php-ext-configure
, docker-php-ext-install
, 和 docker-php-ext-enable
。具体使用可以查看 Dockerfile:
FROM php:7.1-fpm
RUN apt-get update
RUN apt-get install -y libpq-dev \
&& docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
&& docker-php-ext-install pdo_pgsql pgsql
还有需要注意的是laravel 项目的依赖安装的工作。在这里我也是使用了容器进行处理。可以参考 test.sh 文件中的命令:
#!/bin/bash
MYWORKSPACE="/Users/kelu/workspace/wechat.kelu.org"
docker run -it --rm \
-v $MYWORKSPACE:/app \
composer:1.4.2 install --ignore-platform-reqs --no-scripts
完成了前面两步,接下来开始安装 postgresql。
我目前还在使用 postgresql 9.4的版本,所以安装时指定了版本号。
postgresql 比较重要的两个配置文件我提取了出来,以方便修改:
因为本地环境的原因我便偷懒了一会,首次运行后需要手动进入镜像还原数据库。按照标准的做法是做一个只运行一次用于还原数据库的镜像。
如何使用可以参考 psql 目录下的 readme 文件,主要步骤是:
su postgres
psql
\password postgres
CREATE USER abc WITH PASSWORD 'abc';
CREATE DATABASE abc OWNER abc;
GRANT ALL PRIVILEGES ON DATABASE abc to abc;
sudo -u postgres pg_restore -d abc abc.dump;
\l
\c abc
\d
\d account
\q
redis 的内容待完成。
基于文件扫描的反病毒技术可以分为: “第一代扫描技术” “第二代扫描技术” “算法扫描” 对于恶意代码分析师来说,非常有必要对每一种扫描技术有所了解
第一代扫描技术可以用“在文件中检索病毒特征序列”这句话高度概括,这一扫描技术直到现在也仍然被各大反病毒软件厂商使用着,其主要分为“字符串扫描技术”与“通配符扫描技术”两种。
第二代扫描技术的代表有
这种方法是在大量变异病毒出现后提出的。智能扫描法会忽略检测文件中像nop这种无意义的指令。而对于文本格式的脚本病毒或者宏病毒,则可以替换掉多余的格式字符,例如空格,换行符,制表符等。由于这一切替换动作往往是在扫描缓冲区中执行的,从而大大提高了扫描器的检测能力
该方法采用两个或者更多的字符集来检测每一个病毒,如果扫描器检测到其中一个特征符合,那么就会警告发现变种,但不会执行下一步操作。如果多个特征码全部符合,则报警发现病毒,并执行下一步操作
ACBM算法:
ACBM算法是在AC自动机的基础之上,引入了BM算法的多模扩展,实现的高效的多模匹配。和AC自动机不同的是,ACBM算法不需要扫描目标文本串中的每一个字符,可以利用本次匹配不成功的信息,跳过尽可能多的字符,实现高效匹配。
比如:{P} = {her,where,redo},匹配过程如下:
可以看到在匹配步骤如下:
1、 选定一个匹配起始位置。
2、 使用AC树进行匹配,如果匹配失效,跳转步骤1;如果匹配成功,可根据应用需要跳转至步骤1或者退出。
ACBM算法的核心思想就是让每次匹配的起始位置跨度尽可能的大,以提高效率。
上例中,采用的是整体上正向匹配+反向的AC自动机;可以采用整体上反向的匹配+正向的AC自动机。
ACBM算法中的AC算法部分比AC自动机算法的实现要简单,不需要考虑失效函数的问题,也就是说ACBM算法中实现的AC算法部分是一棵树,而在AC自动机的实现是一个图。
ACBM算法中的BM算法的实现要比BM算法本身的实现要复杂一些,因为这是对BM算法的多模式一种扩展。
ACBM算法中的核心数据结构:
1、 MinLen,模式串集合中最短那个模式串的长度:比较失配时最多跳跃的字符个数不能超过Minlen。
2、 ACTree,由模式串集合构建出的状态树,构建方法和AC自动机的构建方法相同,而且不需要计算失效函数,比较简单。
3、 BCshift[256]:ACTree对应一个坏字符数组,当匹配失效时,查找该数组计算坏字符偏移量。
4、 GSshift:AC树的每一个节点对应一个好后缀偏移量。
ACBM算法的核心部分是计算BCshift和GSshift,可参考BM算法的实现