2016年12月30日星期五

打印出对象or模块所有的属性跟方法

当你需要查看模块有哪些方法可以完成你的任务的时候,就可以用这个办法。
我的使用场景是,__main__模块去调用其他模块,其他模块需要调用__mian__模块的变量时,用这个的办法:sys.modules['__main__'].threads[1]
 
def print_all(module_):
    modulelist = dir(module_)
    length = len(modulelist)
    for i in range(0,length,1):
        print modulelist[i]+' : '+ str(getattr(module_,modulelist[i]))

module_  可以是一个对象,或者一个模块
在print_all 里面传入改参数,就可以获取到所有的属性跟方法

2016年12月28日星期三

企业访问控制实施的最佳实践

分析web客户端访问服务端,正常的流量所需要走的地方。
比如10.1.1.1 是一台web服务器

正常需要打开 所有地址到10.1.1.1的访问

但是这远远不够

如果web服务器里面的前端页面包含了去到其他内网主机的链接,这就会对业务的正常工作造成故障。
所以弄清楚这个业务数据流的办法就是,用爬虫去完成所有页面的url链接地址,分析完成并且放行这些地址。


基于交换机接口的访问控制
要考虑多种情况的流量,而且很影响正常的办公,策略经常调整
               vs
基于vlan接口的访问控制
 只需要考虑来自该vlan的流量,不会有其他情况出现

需要统计公共服务器,以及用ntopng去分析去往服务器的流量

 NAT导致的还是其他原因?
有一个很奇葩的情况就是,服务器到防火墙有直接的TCP连接,我之前就吃过很多亏,
在对服务器网络进行访问控制的时候,必须要放行 服务器 到 防火墙的访问权限,web服务器的工作才正常。目前尚不清楚原因。
2017年2月24日,我似乎找到了,二次NAT是导致服务器到防火墙的tcp连接的主要原因,但是这未经证实,接下来要研究的是二次NAT的原理以及导致的特别现象

二次nat原理我找了半天,没有找到思科文档对它的详细解释,最后通过了RFC 2663找到了
二次nat原理的详细介绍(这里有一篇简单的翻译):
     两次NAT是NAT的一个变种,它同时修改源和目的地址。这与前面的传统NAT和双向NAT(BiDirectional)都不同,前面的两种NAT只翻译源或者目的地址(端口)。

不得不说,有些时候原理的东西去看看RFC更适合,而不是思科文档。

2017年3月6日
找到二次NAT的应用场景
       原因: 当需要去回流的时候需启用回流允许命令
                        same-security-traffic permit intra-interface
                  内网主机去访问防火墙外网接口地址的时候需要使用二次NAT

ASA防火墙tcp连接标志
ASA防火墙可以通过下面命令去看到自己跟其他人的连接
     show conn protocol tcp all | in 172.16.1.253









异或加密以及python的实现

python2java模块,用来转换代码

java  : Passwd.getBytes()
python : bytearray(passwd)


java
    String secret = "secret";
    byte[] thebytes = secret.getBytes();
   
python3
    secret = "secret"
    secret.encode()
   
python27
    s = 'secret'
    b = bytearray(s)
    for i in b:
        print i
       
这次的安卓代码审计,主要依靠工具JD-GUI,并且使用搜索功能,只要把想要知道的变量名
一个个的搜索,总会找到相要的代码,不要不耐烦.

这次遇到很多不熟悉的函数
map()


数据的进制转换
    int()   可以将 二进制,八进制,十六进制转换成十进制整型
    >>> int('1111', 2)
    15
    >>> int('f', 16)
    15
    >>> int('17', 8)
    15
   
    chr()   将整型数字转换为字符
    ord()   将字符转换为整型
    hex()   将十进制转换为十六进制
    oct()   将十进制转换为八进制
    bin()   将十进制转换为二进制

ASCII码 与 字符 相互转换
  ord()   字符 转 数字
  chr()   数字 转 字符


base64 编码与解码

    import base64
    text = 'test'
    cipher = base64.b64encode(text)
    re_text = base64.b64decode(cipher)

    print cipher
    print re_text



下面是python2.7代码的实现 
import base64

# 密码转成字节码
password = "123456" 
passwd = bytearray(password)

def trans_code(trans_type, para_dict):
    
    if trans_type == 'en':
        # 编码

        for (x,y) in para_dict.items():

            # 参数转成字节码
            bytecode = bytearray(y)

            j = 0
            cryptoValue = ''
            ascii_words = ''
            
            for i in range( len(bytecode) ):
                # 将 参数字节码 与 密码字节码 做异或操作,异或是对称加解密算法
                cryptoValue = bin( bytecode[i] ^ passwd[j] )

                # 密码长度有限,需要循环使用
                j += 1
                if j > len(passwd):
                    j = 0

                # 二进制 转 十进制
                decimal = int(cryptoValue, 2)

                # 十进制 转 ASCII字符
                ascii_words += chr( decimal )

            # base64 编码 ASCII字符
            cipher = base64.b64encode(ascii_words)

            print x + ' : ' + y + ' : ' + cipher

        print '='*10 + 'encode finish' + '='*10


参考链接:
1. 异或加密原理
2. ASCII码对照表
3. Python: convert string to byte array

2016年12月27日星期二

php版本升级

这个方法来自v2ex,链接在此

yum 快速升级降级 php 版本 5.4 5.5 5.6 7

这个方法好就好在,你不需要升级centos,或者是更新centos的repo源,直接使用yum下面的一个php包的专用模块,然后只需要在指定的版本源上把enable打开即可。

模块的安装方法:
 rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm  

下面有几个repo

[root@jamka yum.repos.d]# vim remi
remi-php70.repo  remi-php71.repo  remi.repo        remi-safe.repo 
 
编辑文件 vim remi.repo,把想要升级或者降级的版本enabled打开即可
[remi-php55]
name=Remi's PHP 5.5 RPM repository for Enterprise Linux 6 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/6/php55/$basearch/
mirrorlist=http://rpms.remirepo.net/enterprise/6/php55/mirror
# NOTICE: common dependencies are in "remi-safe"
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi


最后一条命令搞定升级
yum install php php-cli php-common php-devel php-fpm php-gd php-imap php-ldap php-mbstring php-mcrypt php-mssql php-mysqlnd php-odbc php-pdo php-pear php-pecl-jsonc php-pecl-jsonc-devel php-pecl-zip php-process php-snmp php-soap php-tidy php-xml php-xmlrpc php-opcache

2016年12月24日星期六

代码审计常用命令

代码审计的方法
1. 过滤文本的方式,grep递归查找代码,或者IDE全项目搜索文本
2. 根据程序运行的思路,逐步查找
       常用思路:
           a. 程序通常的入口叫main
           b. 入口通常有加载配置文件的函数
           c. 查看变量或者函数的调用地方

3. 注意快捷键的使用

phpstorm 高效审计快捷键:
Ctrl + G                     行号跳转
Ctrl + Alt + <-/->     光标跳转的返回/前进(重要功能!!!)
Ctrl + 点击                 查找函数/类/变量,定义或者使用
Ctrl + Shift + F          全局搜索字符串
Ctrl + Shift + N         全局搜索文件名

pycharm 高效审计快捷键:
Ctrl + G                     行号跳转
Ctrl + Alt + <-/->     光标跳转的返回/前进(重要功能!!!)
Ctrl + 点击                 查找函数/类/变量,定义或者使用
Ctrl + Shift + R          全局搜索字符串

递归当前目录文件内容,查找wish to display
[root@jamka dvwa]# grep -r -n 'wish to display' .
./vulnerabilities/fi/source/impossible.php:3:// The page we wish to display
./vulnerabilities/fi/source/medium.php:3:// The page we wish to display
./vulnerabilities/fi/source/low.php:3:// The page we wish to display
./vulnerabilities/fi/source/high.php:3:// The page we wish to display

代码审计工具:
RIPS                开源版本0.55的,已经不更新,商业版的要收费也没有破解版
Fortify SCA     完全商业的工具,没有破解版
seay                比较不错的审计工具,免费开源
cobra              美联集团开发的一款代码审计工具


参考链接:
1. 逐浪CMS(ZOOMLA CMS)漏洞挖掘
2. 信息系统源代码安全审查过程
3. 代码审计安全服务流程
4. 代码审计思路之实例解说全文通读

2016年12月9日星期五

vmware pro 12 安装 kali_2016_2 版本 与宿主机的互拷文件的办法

解决问题的链接在这里

首先 2016.2 版本没有设置网络源的,去 /etc/apt/source.list
写入deb http://http.kali.org/kali kali-rolling main non-free contrib

退出保存后,apt-get update
apt-get install open-vm-tools-desktop fuse
重启下就ok了

不需要安装vmtools了

vmware 12 pro版本

如果下载kali的vm虚拟机版本,里面全部自带,不需要安装了,建议下载这种版本。