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

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

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

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

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

基于 nginx 的七层负载均衡实现初步



0x01 此次演示环境

1
2
3
4
NginxHttp ip: 192.168.3.49 作为负载均衡器,测试域名为 `lb.org`,生产环境中,最好自己新建个虚拟ip来做负载均衡,方便后续迁徙
OldLamp ip: 192.168.3.45 后端真实处理请求的web服务器 httpd-2.2.34
OldLnmp ip: 192.168.3.42 后端真实处理请求的web服务器 nginx-1.12.2
NewLnmp ip: 192.168.3.43 作为访问客户端,测试各种负载均衡算法是否工作

先改下当前nginx负载均衡器的host解析,即NginxHttp机器,因为等会儿要直接用机器名去访问后端的web节点

1
2
3
# vi /etc/hosts
192.168.3.42 test.bwapp.org bwapp.org
192.168.3.45 bwapp.cc www.bwapp.cc

再来改下Newlnmp机器的host解析,添加如下内容,因为等会儿要用它来进行测试访问

1
2
# vi /etc/hosts
192.168.3.49 lb.org

0x02 以下是一些常用的负载均衡调度算法

1
2
3
4
5
6
rr [ 正常轮询 ] 即按照事先给定的后端节点顺序挨个轮询,适合性能相近,业务相同的场景
wrr [ 权重轮询 ] 即按照事先设置好的后端节点轮询比例,进行轮询,适合机器性能差距较大,业务相同的场景
ip_hash [ ip hash ] 也就是说只要客户端ip不变,在一段时间内就只访问固定的后端节点,`常用于会话保持`,如session,cookie,不过这样保持,负载就不均衡了
fair [ 动态算法 ] 属于第三方算法,即根据节点的响应时间来分配请求,响应快的节点优先分配
url_hash [ 节点取模 ] 也属于第三方节点,根据url来分配后端节点,命中率比较低,不过非常适合做web缓存
一致性 hash ...

0x03 在 nginx 中可用来实现负载均衡的主要模块

1
2
upstream 模块 定义好后端节点及所使用调度算法,大致工作过程是这样的,它会先读取upstream中的配置,然后通过server标签中的proxy_pass来进行实际的调用
http_proxy 模块 主要负责实际的转发行为

Read More

利用win自带的 PSR 实现免杀截屏



0x01 PSR 即win自带的”问题步骤记录器”,也就是说它只会捕捉活动窗口,并不是我们想象的各种远控中的那种截屏功能,win + R 输入 “psr” 即可开启

0x02 当然,实际渗透中,肯定是不能让对方有任何察觉的,所以图形界面的不要,悄悄的干活,我们可以直接在管理员权限的cmdshell下搞,其实,你完全也可以在PS的shell下操作,至于这个shell怎么搞到,随你,注意,虽然是在命令行中,进程列表中还是会被发现,不过,如果你自己会hook,也是可以让它消失的

1
2
C:\>psr /start /gui 0 /output "d:\capturescreen.zip"
C:\>psr /stop



Read More

如何更隐匿地渗透

0x01 前言
    实际渗透中,我们经常会遇到各种ips或者waf的围追堵截,有时候,跑个目录就直接把你ip封了,因为经常会遇到这种尴尬的情况,所以就灵机一动想了个比较折中的办法,利用tor来频繁的切ip,然后用socks5代理,把常用的工具丢进去搞,注意用工具跑的时候,线程要尽量给少点,tor唯一的缺点就是慢,当然,你也可以写成分布式扫描,不过可能需要你事先准备好一大批高质量代理ip,然后随机轮训,不过咱们不需要这么麻烦,不到五分钟写了个小脚本,暂且能满足需求,将就用吧

0x02 代码如下
    随便写的,比较粗糙,大家将就着看吧,如下,有些地方还有问题,后期抽空想到好点子了,再完善下,对了,不知道为啥tor自己的切ip选项不管用,希望哪位兄弟如果找到原因麻烦也告诉我一声,谢谢……

Read More

利用 nginx_lua 定制高效灵活的专属WAF



0x01 什么是Lua

1
2
3
关于Lua,就不用多说了吧,想必朋友们应该也都非常熟悉了,众多脚本语言中的一种,不过相对于其它脚本来说,性能要略高一点
在nginx中也提供了一个nginx_lua的模块,主要是为了方便用户,可以灵活的通过lua来扩展nginx功能,比如lua_waf
有兴趣可自行深入了解,这里就不细说了,我们今天的重点主要还是想利用它来快速部署一个简易版的Waf

0x02 这里,我还是拿之前已经编译好的lnmp环境来演示,因为等会儿要重新编译nginx,所以就直接把之前nginx的整个安装目录干掉,因为是源码编译安装的,所以也不会有啥残留[源码编译安装的好处],记得在干掉之前先把nginx服务停掉,配置文件[nginx.conf]也备份一下,方便等会儿再直接拿过来用

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

1
2
3
4
# pkill nginx
# netstat -tulnp | grep "80"
# cp /usr/local/nginx/conf/nginx.conf /root/
# cp /usr/local/nginx/conf/extra/bwapp.conf /root/
Read More

关于各类环境部署简要说明



1
2
3
4
5
6
7
8
9
10
为了更加贴近实战的学习,所有相关的部署配置,均是按照实际生产标准来的,力求做到真实,也是为了方便大家更靠谱的学习...
作为一个对技术深度有追求的渗透者,你极度有必要熟知其中涉及到安全问题的每一个配置参数选项的具体作用,每一次权限映射背后所带来的实际利用价值...
大家可能也看到了,在实际部署过程中,基本都特别标明了详细的版本号,比如,php5.2,php5.3及php5.5,因为有些漏洞特性只能针对特定的版本才会有用,所以不得不费点儿劲....
就整个部署过程来讲,其实也是一个非常好的学习进步的机会,你完全可以通过这种实际部署更深的去理解某些漏洞产生的根因,而不用再人云亦云[用事实说话],说白点儿,这就是在潜移默化的积累,积累的多了,自然就触类旁通,根本不用什么高大上的东西
你要做的只是把前人的优秀经验彻彻底底的真正变成你自己的知识储备,然后在此基础上灵活变通改进,足矣,虽然短时间会比别人走的慢点,但你会收获的更多,甚至看到很多别人看不见的东西,很显然,这种方式对于'天才'或者'神童',是完全不适用的,但那毕竟只是极小的一部分人
脚踏实地,一步步的来,不要总觉得这也不重要[觉得这也很low],那也不重要[ 那也很low],然后你就以这种态度持续了很多年,而等再回头看那些曾经一直默默踏踏实实坚持到现在的人,已经把你甩的很远了,再想追上,难于上青天...
还是那句话,"运维会的那一套,你要比他还精通,你才有可能搞定他,开发会的那一套,你要比他还娴熟,才有可能挖到更有价值的洞....",我跟大家起点都一样,也一直在为此而不懈努力着
不为任何人,就为了你自己,学习吧,哪怕每天进步一点点,起码你不会因为一天碌碌无为而感到空虚....
人生苦短,能做点自己喜欢的事情应该珍惜,个人一直坚信"唯一不变的,就是一直在变",安于现状,不思进取,自以为是,乃致命毒药....
......

Read More

Nosql 攻防第二弹 [ redis ]



0x01 其实redismemcached 单从功用上来讲,基本差不太多,只是在数据量非常大的情况下,memcached 就会有很多的问题,但redis在这方面却恰巧做的还不错,且redis所支持的功能更加全面,也能更好的适应一些比较复杂的业务逻辑,下面则是关于redis的一些优良特性

1
2
3
4
5
所支持的数据类型较丰富
支持持久化存储
支持主从复制
性能强悍,并发可超十万
...

此次演示环境

1
2
3
4
5
CentOS6.8_x86_64 ip: 192.168.3.42 Oldlnmp root权限下的redis未授权
CentOS6.8_x86_64 ip: 192.168.3.66 RedisMaster 为加固过的redis
Ubuntu16.04 server ip: 192.168.3.67 RedisSlave root权限下的redis未授权
Ubuntu16.04 LTS ip: 192.168.3.12 Metasploitredis客户端
win7cn ip: 192.168.3.60 后续连webshell

0x02 开始安装部署 redis,此处暂以最新版为例进行演示,为了避免redis自身的一些漏洞,建议使用最新版的稳定版本

1
2
3
4
5
6
7
8
9
# wget http://download.redis.io/releases/redis-4.0.6.tar.gz
# tar xf redis-4.0.6.tar.gz
# cd redis-4.0.6
# make MALLOC=jemalloc
# make PREFIX=/usr/local/redis-4.0.6 install
# ln -s /usr/local/redis-4.0.6/ /usr/local/redis
# export PATH=/usr/local/redis/bin/:$PATH
# echo "export PATH=/usr/local/redis/bin/:$PATH" >> ~/.bash_profile
# redis-server -h

Read More

基于 Ssh Key 的分发安全



0x01 利用最原始的 SSH key ,实现批量ssh管理 只适合较小规模集群场景,通常在100台机器以内,要实现的最终效果,如下:

1
2
可以批量分发文件,进行常规配置管理
可以批量执行shell命令,进行日常维护操作

演示环境:

1
2
3
SshKeyMaster ip: 192.168.5.11 CentOS6.8 x86_64 分发机
SshKeySlave5 ip: 192.168.5.13 CentOS5.5 i386 分发客户机
SshKeySlave7 ip: 192.168.5.12 CentOS7 x86_64 分发客户机

0x02 基于SSH key 的批量ssh管理,具体实现过程:

以下是在这方面已经相对比较成熟的一些工具框架,后续会再专门针对每一种进行单独说明:

1
saltstack,ansible,puppet...

1
# rpm -qa openssh openssl 务必确保所有机器均已事先安装好ssh且ssh服务已正常开启

0x03 先在所有机器上 [ 注意,是所有机器,密码完全一致 ]创建一个普通用户,因为等会儿我们要用此用户身份来进行各种分发操作

切记,严禁直接用root分发,权限过高,太危险,分发机一旦被攻陷,其它的分发客户机也就随之沦陷了,建议,如果实在有需求可以用sudo或suid [其实也不推荐]来暂时性授权

1
2
# useradd sysadm
# echo "admin" | passwd --stdin sysadm

0x04 再在分发机上创建好密钥对,准备发到各个客户机上

1
2
3
4
5
# su - sysadm 切到刚刚创建的用户下
$ ssh-keygen -t dsa 一路回车即可
$ ls -l .ssh/
-rw------- 1 sysadm sysadm 668 Nov 27 14:11 id_dsa 私钥[钥匙]
-rw-r--r-- 1 sysadm sysadm 609 Nov 27 14:11 id_dsa.pub 公钥[锁],把公钥分发给所有要ssh的机器

Read More

服务安全 [ NFS ]



0x01 NFS 简介:
    NFS 一个比较古老[比自己的年龄都大]的网络文件系统,不过,相对比较稳定,由服务端和客户端组成 [ 即 C/S 架构 ] ,服务端主要负责提供共享目录 [一般为web的用户数据存放目录,专门用来存放用户上传的各类静态数据],而客户端则负责存取该共享目录中的数据

0x02 NFS 容易产生安全问题的几个点:

1
2
3
4
共享目录在本地文件系统中的权限问题
NFS服务用户权限设置问题
NFS客户端挂载的安全及性能问题
.....

0x03 环境部署简介 [ 所有系统均以 centOS6.8_x64 最小化安装,只带有必要的环境库 ]:

nfs服务端:

1
NfsServer ip: 192.168.4.2

Read More