APT404-不作恶

在路上,一直在路上!

入侵检测学习 Snort [一]



0x01 关于Snort

1
2
3
业界相对比较出名年头也比较久的一款基于网络的开源入侵检测工具
不过,比较适合中小型网络 [在流量不是非常大的情况下还是很不错的选择],规则配置灵活,实战适用性相对较好
只是,实在不知道为什么要弄一头猪做logo,这文化差异大的有点儿着实让人无法理解 :)

0x02 理解snort的最基本的工作流程

1
2
3
内网中的数据 -> 数据嗅探[让内网中其它机器上的数据流过自己] -> 进行各种预处理[防止数据逃逸] -> 规则检测引擎 -> 处理报警/日志 
| |
匹配规则库 存到数据库或者写到日志文件中

0x03 模块具体作用简介

1
2
3
4
数据包嗅探,让其它机器上的指定数据包都经过自己,以便snort分析数据,同样,用的也是libpcap库,包括在其它很多linux平台嗅探工具你都能看到它的身影
预处理,包重组预处理器,主要是为了防止攻击包被拆分逃避Snort的检测,另一个是协议编码预处理器,主要负责把数据包协议解码成一个统一的格式,再丢给检测模块,最后一个是协议异常检测预处器
规则匹配检测,也就是当预处理把数据包丢过来以后,规则引擎会将这些数据包逐个和规则库进行匹配,一旦发现数据包内容与某条规则匹配,就丢给报警模块去处理
报警/日志模块,规则引擎将数据丢给报警模块以后,报警模块会根据snort事先定义好的规则动作(alert,log...)对其进行不同的处理(写到数据库或日志文件中)

Read More >>>


一分钟部署 MySql 多实例

0x01 到底什么是MySql多实例

1
2
3
说的通俗些,就是通过读取不同的my.cnf配置,同时启动多个mysqld进程,共用系统资源
这也就意味着,当其中一个实例并发较高或者慢查询较多的情况下,其它实例的性能也会因此受到很大的影响
这种情况通常用于机器性能较好且单实例mysql无法充分利用系统资源的情况下

0x02 此处,我们选择自己手工编译安装mysql-5.5.55,根据大家自己实际的机器性能,速度可能会稍慢些,请耐心等待

演示环境:

1
2
3
4
CentOS 6.8 x86_64     最小化,带基础环境库安装
eth0 ip: 192.168.3.51
eth1 ip: 192.168.4.19
eth2 ip: 192.168.5.19

安装mysql所需的各种依赖库并创建mysql的服务用户

1
2
# yum install ncurses-devel libaio-devel cmake bison -y
# useradd mysql -s /sbin/nologin -M

下载并编译 mysql-5.5.55

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# wget http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.55.tar.gz
# tar xf mysql-5.5.55.tar.gz
# cd mysql-5.5.55
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.5.55 \
-DMYSQL_DATADIR=/usr/local/mysql-5.5.55/data \
-DMYSQL_UNIX_ADDR=/usr/local/mysql-5.5.55/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=ON \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FAST_MUTEXES=1 \
-DWITH_ZLIB=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_READLINE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_DEBUG=0

# make && make install
# ln -s /usr/local/mysql-5.5.55/ /usr/local/mysql
# ll /usr/local/mysql/

Read More >>>


定制轻量高效的WAF Naxsi [一]



0x01 关于naxsi
    同为开源waf,但跟Modsecurity的不同是,它对nginx的兼容性非常好,而且不依赖现有规则库其实,我们心里都很清楚,单单基于规则库的拦截可能需要经常更新,且容易被绕过,防御起来比较被动,naxsi安装定制都非常简单方便,占用系统资源相对较少,对实际业务的适用性更强[方便的白名单设置],有一定的学习能力,不过,实际测试中貌似暂时只能拦截从get或者post过来的数据,这也是个小遗憾

0x02 依然是拿之前编译好的lnmp环境[具体如何编译配置,请参考博客相关文章]来做演示,我这里先把之前的配置文件备份下,等会儿好直接拿过来用

1
php5.5.38 + mysql-5.5.32 + nginx-1.12.1 + centOS6.8_x64

1
2
3
4
5
# netstat -tulnp | grep "80"
# pkill nginx
# cp /usr/local/nginx/conf/nginx.conf ./
# cp /usr/local/nginx/conf/extra/bwapp.conf ./
# rm -rf /usr/local/nginx*

0x03 下载naxsi,重新编译安装nginx,主要是要把naxsi模块加载进去,这里的nginx直接用的最新版的稳定版本

1
2
3
4
5
6
7
8
9
10
11
# git clone https://github.com/nbs-system/naxsi.git
# wget http://nginx.org/download/nginx-1.12.1.tar.gz
# yum install pcre pcre-devel openssl openssl-devel -y
# useradd -s /sbin/nologin -M nginx
# tar xf nginx-1.12.1.tar.gz
# cd nginx-1.12.1
# ./configure --prefix=/usr/local/nginx-1.12.1 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-file-aio --with-http_dav_module --add-module=../naxsi/naxsi_src/
# make && make install
# ln -s /usr/local/nginx-1.12.1/ /usr/local/nginx
# cd /usr/local/nginx/conf/
# mv nginx.conf nginx.conf.bak && egrep -v "^$|#" nginx.conf.bak >> nginx.conf

Read More >>>


env

自己总结的常规入侵流程脑图


个人始终坚信,只有深入理解入侵者的真实想法,不断学习,并能轻松熟练地模拟出入侵者的各类入侵手段,才是最切实有效的防御

Read More >>>


利用 Ew 轻松穿透目标多级内网

0x01 ew 快速穿透目标多级内网:

简要环境说明:

1
2
3
win2008R2 假设为目标边界web服务器,可正常访问公网
假设其公网ip为 192.168.3.23
假设其内网ip为 192.168.32.131

1
2
win2008 假设为目标内网数据库服务器,可正常访问公网
假设其内网ip为 192.168.32.170
1
2
win7 假设为自己公网的vps
假设其公网ip为 192.168.3.232
1
2
centos 5.1 假设为目标内网的一台linux机器,没有dns不能访问公网
假设其内网ip为 192.168.32.169

0x02 首先,利用ew做最简单的正向代理,其实就是大家最常用的所谓的ss:

在 win2008R2 机器上执行

1
# ew_for_Win.exe -s ssocksd -l 1080

在win7上打开Proxifier根据上面监听的端口建立正常的socks代理即可

Read More >>>


ew
#ew

利用 Navicat 自带的Http隧道进行脱裤



0x01 基本环境说明:

1
2
目标边界机器lnmp01的域名及内网ip: www.rootkit.org 192.168.32.167
目标内网中数据库[暂以mysql为例]服务器[win7]的内网ip: 192.168.32.168

1
很明显,lnmp01和win7在目标内网是可以互通的

0x02 实际脱裤可能会面临的一些困境:

1
2
3
4
5
6
想脱数据,但目标数据库不允许root用户外连,可能的原因多种多样,一般只grant到指定的ip才能连
目标站库分离[再正常不过],数据库在内网的某台机器上
即使没分离,当前的数据库用户又不允许外联,另外,由于当前数据库用户权限不够,也没法自己开启外联
即使是root,不知道什么乱七八糟的原因,没法grant允许root外连...
边界防火墙阻断外部ip对内部数据库端口[假设为3306]的访问等等....
还在为脱裤烦恼吗,嘿嘿……navicat也许可以帮到你

0x03 我们最终要实现的效果:

1
通过lnmp01这台机器,脱取内网win7机器上的所有数据

Read More >>>


利用 ELK 深度定制实时入侵日志分析平台初步



0x01 首先,快速安装配置好jdk 1.8,因为ES基于java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# export LANG=en
# tar xf jdk-8u131-linux-x64.tar.gz
# mv jdk1.8.0_131/ /usr/local/jdk
# ll /usr/local/jdk
# chown -R root.root /usr/local/jdk/
# ll /usr/local/jdk
# 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

0x02 再来熟悉一些必要的关于elasticsearch的基础概念:

1
索引 -> 文档 -> 分片和副本

0x03 下载配置 elasticsearch:

1
2
3
4
# wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.7.2.tar.gz
# tar -xf elasticsearch-1.7.2.tar.gz
# mv elasticsearch-1.7.2 /usr/local/
# ln -s /usr/local/elasticsearch-1.7.2/ /usr/local/elasticsearch

Read More >>>


ELK

入侵取证 [ Web日志分析初步 ]



0x01 前言
    既然是取证, 不妨就从一个稍微全局点的角度来理解,最先应该搞清楚的, 可能就是, 到底哪些地方会留下入侵者的痕迹 , 这次单单就以最基础的web服务 [ 暂不涉及脚本引擎,数据库及系统方面的东西 ] 基本取证流程为例, 其实很简单,入侵者一般喜欢从哪里下手,就必然会在那里留下痕迹, 可能在此之前我们还需要搞清楚客户端的http数据到底都是从什么地方过来的, 有GET 的 URL 中传来的数据 , POST 中传来的数据,从http头中获取的各类客户端数据 [ 如,cookie,user-agent,Referer,X-Forwarded-For ], 像这些很基础的东西,早该在最开始部署服务的时候就想到,不然,等到真出事的那一天,自己真正能掌握的资料就着实比较少了

0x02 环境简介
    暂以 nginx 为例,一个最基本的日志格式大概是下面这个样子,当然,这种格式可能会造成你的日志文件特别大 [ 存的东西多嘛 ], 但实际部署时还是需要你根据自己的实际的业务来,这里也仅仅只是做个参考

先在指定的 server 标签中定义好cookie变量

1
2
3
4
5
6
7
8
server{
...
set $dm_cookie "";
if ($http_cookie ~* "(.+)(?:;|$)") {
set $dm_cookie $1;
}
...
}

这时再回到 nginx 主配置文件中, 引用刚刚设置的cookie变量, 这样, 头里面的那几个字段数据就都可以被记录了

1
2
3
4
5
6
7
http {
...
log_format main '$remote_addr - $remote_user [$time_local] '
' "$request" $request_body $status $body_bytes_sent '
' "$http_referer" "$http_user_agent" "$http_x_forwarded_for" "$dm_cookie" ';
...
}

Read More >>>


log

如何利用 Socat 更方便地穿透目标内网



0x01 此次环境说明:

1
2
3
lnmp01	假设为目标DMZ段机器,等会儿会作为proxy端
假设其公网ip为 192.168.3.30
假设其内网ip为 192.168.32.167

1
2
win7  假设为目标内网机器
假设其内网ip为 192.168.32.144
1
2
本地机器
假设本地内网ip为 192.168.3.15

0x02 需要注意的一些前提条件

1
本地机器能ping通lnmp01,lnmp01和目标内网中的win7能互通

0x03 最终目的,实现双内网通信,即在我自己的内网中操作目标内网中的机器,当然,实现双内网通信的方式还有非常多,比如常用的几种方法:

1
2
3
4
5
6
最传统的是通过在vps利用lcx listen做转发,然后再在本地bind上去
另外,还是通过vps搭建vpn,本地先连到vpn内网中,再在vps上用lcx tran通过vpn内网转发到本地
还有,利用meterpreter自带的端口转发功能,当然啦,那个是通过meterpreter隧道自己来实现的,也就是说你要先把meterpreter的shell先弹回来,因为这个并非今天重点,暂不多做介绍,有兴趣可自行深度挖掘研究
再有,在一些高级点的马中也自带了各种内网代理功能....
最后,就是接下来咱们要详细说明的这种,利用socat和目标DMZ建立双向通道,然后带出目标内网中所有机器的流量
......

Read More >>>


深入理解 Https 通信加密过程



0x01 对对称加密的通俗理解

1
即通信的双方都使用同一个秘钥进行加解密

0x02 对非对称加密算法的通俗理解 [ RSA ]

1
2
3
4
私钥 + 公钥= 密钥对
即用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据,只有对应的私钥才能解密
其实这个很容易理解,因为通信双方的手里都有一套自己的密钥对,通信之前双方会先把自己的公钥都先发给对方
然后对方再拿着这个公钥来加密数据响应给对方,等到到了对方那里,对方再用自己的私钥进行解密,就这么简单

0x03 非对称加密所造成的速度慢的问题解决办法

1
2
(1) 先生成一个对称加密算法的密钥,用RSA的方式先安全的发给对方  
(2) 随后就不再用RSA了,只用这个对称加密的密钥来互相通信

0x04 不过,以上方式存在明显的中间人问题:

1
假设,此时在客户端和服务器之间存在一个中间人,这个中间人只需要把原本双方通信互发的公钥,换成自己的公钥,这样中间人就可以轻松解密通信双方所发送的所有数据

Read More >>>