1 |
|
用shell对指定站点进行简单的实时入侵预警
1 | #!/bin/bash |
keepalived + nginx 初步实现高可用
0x01 关于 keepalived1
2早期是专为 `LVS` 设计的,主要用来监控LVS集群中各个节点状态
内部基于 `VRRP协议` 实现,即`虚拟路由冗余协议`,从名字不难看出,协议本身是用于保证实现路由节点高可用的
0x02 所谓的 VRRP 协议1
2
3
4
5
6
7简单来讲,即将N台提供相同功能的路由器组成一个路由器组,在这个组里有一个master和多个backup
一般情况下,master是由选举算法产生的,另外需要注意的是,只有在 master 上才有一个用于对外提供服务的虚拟ip
其它的backup都是没有的,当master在对外提供服务时,其它的backup又在干什么呢
很简单,当master在对外提供服务时,它同时也在不停的向所有的backup发送VRRP状态信息 `说白点儿就是心跳包`
告诉所有backup们,说,'我还没累死,你们先歇着,等我挂了,你们再上',然后,所有的backup就会一直在那儿闲着不停地接收这样的状态信息
当某一时刻,backup突然没再接到这样的状态回应时,就说明master已经光荣牺牲了
所有的backup会再重新用选举算法,把优先级最高的backup升级为master继续对外提供服务,以此保证了服务的持续可用性,即所谓的高可用
0x03 借助 keepalived 在web上的高可用实现1
2
3首先,在所有需要进行高可用的web节点机器上部署好keepalived,并在节点中设置一个master,其它的则全部设为backup
一旦backup接收不到来自master的心跳数据,即认为master已挂掉,backup随即就会接管master的所有资源数据
当master状态恢复时,backup会把所有的资源数据再移交给master处理,此,即为最简单的web高可用实现
利用 `nginx反向代理` 实现的动静分离
0x01 关于 动静分离
1
2主要用于一些较大型的站点架构,这样做一定程度上可以有效减轻后端节点压力,也就是说,有时候你在前端url中看到的一个目录,其后端对应的很可能就是一个集群
另外,这样会使网站更加静态化,利于缓存,可显著提高网站访问速度,有效实现前后端解耦,但这样无疑会加大开发的繁琐程度,前后端只能通过各种接口进行通信
0x02 此次演示环境1
2
3NginxHttp ip: 192.168.3.49 对应域名: reverse.org nginx反向代理服务器
OldLamp ip: 192.168.3.45 对应域名: www.bwapp.cc 假设为动态服务器
OldLnmp ip: 192.168.3.42 对应域名: test.bwapp.org 假设为静态服务器
0x03 务必先统一所有机器的host解析,因为等会儿要直接用域名的方式往后抛,如下1
2
3
4
5# vi /etc/hosts
192.168.3.42 test.bwapp.org bwapp.org
192.168.3.45 bwapp.cc www.bwapp.cc
192.168.3.75 lvs.org
192.168.3.49 reverse.org
初探 LDAP 安全 [ 一 ]
0x01 关于 ldap 的一些简单科普1
2
3
4
5
6
7`ldap` 基于tcp/ip的轻量级目录访问协议,属于X.500目录协议族的一个简化版本
你可以暂时把它粗暴的理解成 `一种特殊类型的数据库` ,通常,这种数据库文件后缀都为`.ldif`,并使用特殊的节点查询语句来获取相应数据
实际生产环境中,主要还是用它来做各种查询比较多,既是查询,也就意味着肯定会有大量的读操作
虽然,ldap也支持一些简单的更新功能,即写,但一般都不会用,因为它在写方面的效率并不高
如果真的是写比较多,直接用各种关系型数据库代替就好了,实在没必要用ldap,毕竟,术业有专攻
另外,ldap 跨平台,功能简洁,易管理,配置,读性能也不错,亦可分布式部署`不知道是不是可以把它的分布式理解成windows域的目录树,目录林概念`
用的最多的可能就是进行`集中身份验证`,最后,我们还需要知道的是,默认情况下,ldap的所有数据都是直接以明文传输的,容易被截获,不过好在它支持ssl
0x02 其它的一些常用目录服务工具1
2
3
4X.500 过于庞大臃肿
ldap 轻量且配置简单
windows活动目录 有平台限制
NIS 个人暂时还没接触过
0x03 了解ldap内部数据的大致存储方式1
2
3
4
5
6和常规关系型数据库不同的是,ldap并非按照常规的库,表,字段方式来存储数据
而是按照一种特殊的倒树状结构层级来组织管理数据,此处的树指的就是目录信息树,即`DIT`
所谓的目录信息树其实相当于专门用来进行读操作的数据库
在DIT内部则由N个条目`entry`所组成,就相当于我们常规数据库表中每条具体的记录
而条目的内容则是由具有唯一标识名`DN`的属性[Attribute]及属性对应的值[value]所组成的这么一个集合
条目为ldap中最基础的操作单位,通常对ldap的增删改查都是以条目为基本单元进行的
Tomcat 安全部署实战指南
0x01 关于Tomcat,更多详情大家可直接参考百科说明1
https://zh.wikipedia.org/wiki/Apache_Tomcat
此次演示环境1
2CentOS7 x86_64 ip: 192.168.3.64
Apache Tomcat/8.5.24 建议大家使用较新版的稳定版本
0x02 首先,在正式部署Tomcat之前,需要先来准备好jdk环境,因为毕竟底层还是在靠java来处理,所以必须要先得有java的运行环境才行,其实,在实际生产环境中,也可以单独使用jre
,不过个人觉得这和安全的关系并不大,试想,如果你手里都已经拿到了一个可以运行java的环境了,我在本地用对应版本的jdk编译好了再丢上运行也是一样,防不住啥,太泛泛1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# tar xf jdk-8u151-linux-x64.tar.gz
# mv jdk1.8.0_151/ /usr/local/
# ln -s /usr/local/jdk1.8.0_151/ /usr/local/jdk
# tar xf apache-tomcat-8.5.24.tar.gz
# mv apache-tomcat-8.5.24 /usr/local/
# ln -s /usr/local/apache-tomcat-8.5.24/ /usr/local/tomcat
# ll /usr/local/
# vi /etc/profile
export JAVA_HOME=/usr/local/jdk/
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/usr/local/tomcat
# source /etc/profile
# java -version
# javac
跨平台快速文件共享 Samba
0x01 关于smaba1
2主要用于实现不同系统平台间的文件共享,配置非常简单,轻量,适合用于常规办公内网环境中
linux <==> windows <==> unix
此次演示环境1
2CentOS6.9 x86_64 ip:192.168.3.55 samba服务器
CentOS6.9 x86_64 ip:192.168.3.57 用来模拟smb客户端进行访问测试
0x02 samba服务默认所监听的端口1
2137/udp,138/udp nmb 进程提供netbios解析,以满足基于 CIFS 协议的共享访问环境
138/tcp,445/tcp smb 进程主要为客户端提供文件共享,打印机服务以及用户权限验证
0x03 使用samba客户端工具 smbclient
,其实有些类似于ftp的客户端工具,也是一种交互式的访问
在linux下使用smbclient访问windows中的共享目录
1
2
3# smbclient -L 192.168.3.23 -U administrator
# smbclient //192.168.3.23/linux_dir -U dcadmin
# mount -t cifs //192.168.3.23/linux_dir /mnt/windows/ -o username=dcadmin 注意,此处要使用cifs协议进行挂载
DNS 深度理解 [ 一 ]
0x01 首先,我们先来简单回顾下DNS的基本解析流程
, 比较简单,如下1
2
3
4
5
6
7
8
9
10-> 以客户端浏览器访问 www.rootkit.org 域名为例,首先,它会去检查当前浏览器缓存,如果有,就直接响应,如果没有,就继续往下找
-> 接着,操作系统会去检查自己的host文件,如果从中没找到对应关系,会再到系统dns缓存中查,如果缓存中有,就直接返回该域名所对应的ip
-> 如果缓存中没有,则会向我们事先设置好的dns服务器 [ 一般有两个, 主 & 备 ] 去请求,即所谓的`递归查询`,dns服务器首先会到自身解析数据库中去查
-> 如果dns服务器在自己的解析库中也没找到,它就会自动帮我们向根发送询问请求
-> 此时,根看到要请求的是org的后缀,就会把org所在的ns服务器告诉我们的dns
-> 然后,我们的dns服务器就会去请求org所在的ns服务器
-> 当请求到达org ns服务器时,org一看域名是在rootkit这个域下的,就会把rootkit所在的ns服务器再告诉我们的dns服务器
-> 再然后,我们的dns服务器就会去请求rootkit这个域的ns服务器
-> rootkit这个域的ns服务器一看是要访问www就直接找到了www对应的A记录的ip,并把它丢给我们的dns,上面逐个询问的过程,即 `迭代查询`
-> 最后,我们的dns再把最终解析到的这个ip丢给我们的客户端,然后客户端就直接拿着去访问了,如下,访问google.com时的简易流程图
不再让 `泄露` 拖你的后腿 [ subversion篇 ]
0x01 关于 svn1
2
3同属C/S架构,对于svn服务端来讲,任何一个文件,在任何时刻的变化,都会被svn详细记录,并自动备份修改之前的结果,方便后续回滚
其实,底层也是靠一个独立的`文件系统 FSFS`在维护,更多内部工作细节,大家可以直接去参考百科说明,此处废话不多讲,我们真奔主题...
...
演示环境,注,此处为独立部署svn服务器,并非配合web服务一起使用1
2CentOS6.9_x86_64 ip: 192.168.3.59
win7cn ip: 192.168.3.70
0x02 作为一名入侵者,从svn
中你都能发掘到什么宝藏1
2
3
4
5
6可能最容易拿到的就是数据库的各种连接账号密码,前提是,目标数据库允许外连,这样你才能更优雅的脱裤或者想办法构造上传webshell
一些邮箱账号密码,如果目标有自己的vpn或者owa之类的入口还是很值得尝试的
直接的后端代码,除了能局部审下代码之外,在注释里面也许还能看到一些关于开发人员的敏感信息
其它的各种敏感配置信息,非常多,这里就不一一细说了
注意,有些信息,确实不能让我们一刀毙敌,但高效的渗透往往是对各类敏感信息的相互配合及深度利用,这非常重要
...
简述 FTP 入侵与防御 [ vsftpd ]
0x01 首先,我们先来简单思考下,当你面对一台 ftp 时,到底能做些什么1
2
3
4
5
6
7挖0day,抱歉,并不在今天的讨论范畴 ^_^
允许匿名可写,直接上传webshell,一般极小的个人站才有可能,ftp目录即网站目录
允许匿名下载,造成的敏感文件信息泄露
爆破,亦可造成敏感配置泄露
嗅探,搜集各种明文账号密码,然后再拿着这些账号密码,去撞目标的其它入口,或以此进行进一步的内网渗透
提权,linux平台下基本不可能
...
0x02 相对主流的一些ftp工具1
vsftpd proftpd filezilla ...
0x03 深入理解ftp的主动与被动工作模式
命令连接
1
2
3在客户端向ftp服务端发起连接请求时,客户端会随机选择本地的某个tcp端口与ftp服务端的21端口进行连接
这中间会进行一系列的身份验证过程,待验证通过后,客户端与ftp服务端即会成功建立 `命令连接`
所谓的 `命令传输连接` 也就是说,仅仅只会用这个连接来传输命令本身
主动模式
1
2
3
4在 `命令连接` 建立成功后,客户端可能还需要进行一系列的数据传输动作,如,上传,下载文件...
此时,客户端会先在本地另启一个端口监听等待连接,并利用先前与ftp客户端建立好的`命令连接`通道,告诉ftp服务端客户端所监听的端口
而后,ftp服务端会利用自身的20端口和刚才ftp客户端所告知的端口进行数据连接,随后就开始利用此连接来进行各类数据传输
注意,此时`数据连接`在建立的过程中,是ftp服务端的20端口主动连接FTP客户端的随机端口的,也就是我们所说的`主动模式`