不要再让 `泄露` 拖你的后腿 [ subversion篇 ]

0x01 关于 svn

1
2
3
同属C/S架构,对于svn服务端来讲,任何一个文件,在任何时刻的变化,都会被svn详细记录,并自动备份修改之前的结果,方便后续回滚
其实,底层也是靠一个独立的`文件系统 FSFS`在维护,更多内部工作细节,大家可以直接去参考百科说明,废话不多讲,我们真奔主题...
...

演示环境,注,此处为独立部署svn服务器,并非配合web服务一起使用

1
2
CentOS6.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之类的入口还是很值得尝试的
直接的后端代码,除了能局部审下代码之外,在注释里面也许还能看到一些关于开发人员的敏感信息
其它的各种敏感配置信息,非常多,这里就不一一细说了
注意,有些信息,确实不能让我们一刀毙敌,但高效的渗透往往是对各类敏感信息的相互配合及深度利用,这非常重要
...

Read More

简述 FTP 入侵与防御 [ vsftpd ]

0x01 首先,我们来简单思考下,面对一台ftp时,你到底能做些什么

1
2
3
4
5
6
7
0day,抱歉,并不在今天的讨论范畴 ^_^
允许匿名可写,直接上传webshell,一般极小的个人站才有可能
允许匿名下载,造成的敏感文件信息泄露
爆破,亦可造成敏感配置泄露
嗅探,搜集各种明文账号密码,撞目标的其它入口,或以此进行进一步的内网渗透
提权,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客户端的随机端口的,也就是我们所说的`主动模式`

Read More

如何将你的 apache 把控的'密不透风'

0x01 为防止配置或端口冲突,在装之前,你需要先仔细检查当前系统有没有装apache,如果有先把apache服务停掉,然后卸载apache,等会儿用源码重新编译安装

1
2
# rpm -qa httpd
# rpm -e --nodeps * 强制卸载apache

演示环境

1
2
CentOS6.8 x86_64 最小化,带基础库安装 eth0 : 192.168.3.45 eth1 : 192.168.4.16 eth2 : 192.168.5.16
httpd-2.2.34.tar.gz apache官方提供的源码包

0x02 下载apache源码包,这里暂时选择2.2.x系列的最新版,不建议再用比这个还老的版本了,漏洞比较多

1
2
# wget http://apache.website-solution.net/httpd/httpd-2.2.34.tar.gz
# tar xf httpd-2.2.34.tar.gz && cd httpd-2.2.34

0x03 直接到源码中去改掉apache的详细版本信息,跟部署nginx一样,尽可能地扰乱入侵者的判断,这里就把它模拟成IIS 7.5,实际系统应为win server 2008r2

1
# vi include/ap_release.h

Read More

娇弱的 PHP [ php-fpm.conf & php.ini 安全优化实践 ]

0x01 关于 php

1
2
3
4
5
语言历史相对已经比较久远了,这里也就不废话了,属弱类型中一种解释型语言
除了web开发以及写些简单的exp,暂未发现其它牛逼用途,暂以中小型web站点开发为主
另外,低版本的php自身漏洞就比较多,建议,从现在开始就在新项目中使用php 5.6.x 往后的版本
好在官方维护的一直比较勤奋,主次版本都迭代的比较快,最新版已经到7.2.0
哼哼……是,'最好的语言'... :)

0x02 演示环境

1
2
CentOS6.8 x86_64 最小化,带基础库安装 eth0: 192.168.3.42 eth1: 192.168.4.14 eth2: 192.168.5.14
php-5.6.32.tar.gz 官方提供的源码包

0x03 下载 php-5.6.32.tar.gz,并安装好php所需的各种依赖库

1
2
3
4
5
6
7
8
9
# yum install epel-release -y
# yum install -y zlib-devel libxml2-devel freetype-devel
# yum install -y libjpeg-devel libpng-devel gd-devel curl-devel libxslt-devel
# yum install openssl openssl-devel libmcrypt libmcrypt-devel mcrypt mhash mhash-devel -y
# tar xf libiconv-1.15.tar.gz
# cd libiconv-1.15
# ./configure --prefix=/usr/local/libiconv-1.15 && make && make install
# ln -s /usr/local/libiconv-1.15/ /usr/local/libiconv
# ll /usr/local/libiconv/

Read More

给自己一个更安全的 mysql

0x01 在进行真正的 mysql 部署之前,我们不妨先来大致了解下,在实际入侵过程中,仅仅利用mysql,我们到底能干些什么,了解了这些最基本的点之后,我们再进行针对性防御:

1
2
3
4
普通用户权限下的 '增删改查',即 常规sql注入,俗称'脱裤'
普通用户file权限下的 '文件读写',可尝试读取各类敏感配置,如各类账号或者尝试直接往站点目录中写webshell
root用户权限下的 '读写文件' , '系统命令执行'... 可读写是因为root本身就有file权限,另外,如果直接以root身份运行mysql服务,亦可实现'提权'的效果
针对 '数据库连接''DDOS',单用户大批量数据库连接可能会导致mysql无法再提供服务

0x02 演示环境:

1
2
CentOS6.8 x86_64 最小化,只带基础库安装 eth0: 192.168.3.42 eth1: 192.168.4.14 eth2: 192.168.5.14
mysql-5.6.27-linux-glibc2.5-x86_64.tar.gz 此次mysql就不再手工编译了,时间比较长,直接用mysql官方提供好的二进制包来做演示

0x03 下载,解压 mysql-5.6.27-linux-glibc2.5-x86_64.tar.gz

1
2
3
4
# tar xf mysql-5.6.27-linux-glibc2.5-x86_64.tar.gz
# mv mysql-5.6.27-linux-glibc2.5-x86_64 /usr/local/
# ln -s /usr/local/mysql-5.6.27-linux-glibc2.5-x86_64/ /usr/local/mysql
# ls -l /usr/local/mysql/

0x04 开始初始化mysql

务必以一个伪用户身份来运行mysql服务,防止别人利用mysql进行提权,后面还会再细说,另外,web服务和数据库服务严禁用同一个系统用户,这样做主要是为了防止入侵者直接通过sql语句往网站目录中写webshell

1
# useradd -s /sbin/nologin -M mysql

Read More

从 0 开始构建一个 "固若金汤" 的nginx

0x01 关于 nginx

1
2
3
4
5
配置灵活,简单,运行时占用系统资源较少,功能模块繁多,可扩展性极强,基于 C ,整个工具大小1M左右
支持高并发,仅限于全部为纯静态文件的情况下,因为最终还要取决于后端 [ 脚本和数据库 ] 的实际处理速度
默认 nginx 会自动选择最佳的网络I/O模型,和nginx不同的是,apache默认就会使用select模型,效率较低
上面这些话的意思也就是说,你的C要牛逼到一定的程度,不然,想做深度二次开发基本是扯淡,真心挺佩服毛子的
更多说明,请直接参考官方文档...

0x02 正确理解 linux 对文件,目录,[ 读 写 执行 ] 权限的真正含义,这东西不能靠干说,因为根本理解不扎实,大家可以自己在系统中创建两个普通用户,不停地切换目录文件权限,以深入仔细体会,后面网站目录权限设置要用到这些基础,如果连这些都搞不清,想灵活应用就难了,耐心点,等透彻理解之后,你就会发现真TM简单

目录 读[r / 4] 写[w / 2] 执行[x / 1]

1
2
3
读: ls , dir ... 表示可查看该目录下的文件列表
写: rm , mv, cp, mkdir ,touch ... 表示可在该目录下创建,删除,修改文件或者子目录,不过在这之前,一定要先有执行权限,不然进都进不去,又怎么写呢
执行: cd ... 表示可进入该目录

文件 读[r / 4] 写[w / 2] 执行[x / 1]

1
2
3
读: cat , tac , more , less ,head , tail ... 表示可查看该文件中的内容
写: vi , nano , echo ... 只表示可对文件中的 内容 进行增删改,删除文件还要取决于当前用户对该文件所在目录是否有写权限
执行: 可执行文件,shell脚本... 在linux中任何文件都可以有执行权限,但只有可执行文件和脚本才能真正执行

Read More

lsyncd + rsync 实时同步海量小文件



0x01 关于lsyncd

1
2
3
inotify的优秀替代品,基于lua,不过,它也依然使用 linux 2.6.13以后内核的inotify触发机制
配置简单灵活,在同步海量小文件时,性能表现优异,废话不多讲,咱们直奔主题
...

环境准备:

1
2
RsyncServer ip: 192.168.5.4
RsyncClient26 ip: 192.168.5.7

0x02 在需要进行实时同步的 rsync 客户端机器上[ 这里是RsyncClient26 ]编译安装lsyncd,如下

1
2
3
4
5
6
7
8
# yum install lua lua-devel asciidoc cmake -y
# wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/lsyncd/lsyncd-2.1.5.tar.gz
# tar xf lsyncd-2.1.5.tar.gz
# cd lsyncd-2.1.5/
# ./configure --prefix=/usr/local/lsyncd-2.1.5 && make && make install
# echo $? && cd
# ln -s /usr/local/lsyncd-2.1.5/ /usr/local/lsyncd/
# cd /usr/local/lsyncd/bin/ && ./lsyncd

Read More

纯图形化实时流量分析 [ etherape ]

0x01 关于 etherape:

1
2
3
4
5
一款纯图形化的网络流量分析工具,既是图形界面,所以系统中务必要有各类图形库支持才行
很多数时候,我们可能只是想简单的看看数据流向,了解总体数据流向或某单个网络节点状况,并不想关心数据包里面到底是什么东西
此时,etherape 则无疑是个比较不错的选择,另外,它对各个协议的支持相对还算比较到位
当然,缺点也是有的,毕竟是实时分析,如果流量瞬间激增,很容易把程序卡崩掉[不知道是有点儿溢出,还是io跟不上],也正常,毕竟只是个小工具肯定没商业工具那么完善
...

0x02 环境:

1
2
3
4
kali ip: 192.168.3.30
centos6.9_x64 ip: 192.168.3.16 [eth1] 192.168.3.19 [eth0]
win2008R2cn ip: 192.178.3.23
win7cn ip: 192.168.3.2

Read More

老旧但不乏经典的高级组包工具 [ hping3 ]

前言:
    一款经典的高级组包工具,虽然老旧,但不乏经典,你完全可以利用它任意组装专属的 tcp,udp,icmp 数据报文格式,废话不多说,咱们直奔主题…

0x01 实验环境:

1
2
kali ip:192.168.3.38
CentOS6.9 [MidLAMP] ip:192.168.3.16[eth1] 192.168.3.19[eth0] 在此机器上编译安装hping3

0x02 编译安装 hping3:

1
2
3
4
5
6
7
8
# yum install libpcap-devel tcl-devel -y
# wget http://www.hping.org/hping3-20051105.tar.gz
# tar xf hping3-20051105.tar.gz
# cd hping3-20051105
# vi bytesex.h
|| defined(__x86_64__) \ 为了防止后续编译出错,需要在第一个判断下添加此句,如下图所示,添加64位系统平台
# ln -s /usr/include/pcap-bpf.h /usr/include/net/bpf.h
# ./configure && make && make strip && make install

Read More

文件隐藏 之 NTFS 交换数据流

0x01 关于 NTFS 交换数据流

1
2
3
NTFS 交换数据流属于NTFS文件系统独有的特性,在NTFS文件系统下,每个文件都可以存在多个数据流
也就是说,除了主文件流之外,还可以有很多非主文件流寄宿在主文件流中,内部使用资源派生来维持与文件相关的信息
虽然,我们无法看到数据流文件,但是它却真实存在于系统中,更多更细致的解释,大家可自行参考百科或ntfs官方文档...

0x02 如何实际创建一个数据交换流文件,其实方法很简单,如下

1
命令格式 "宿主文件:准备与宿主文件相关联的数据流文件"

0x03 演示环境

1
2
win2008r2cn ip: 192.168.3.23
kali ip: 192.168.3.38 等会儿弹meterpreter

Read More

DNS隧道 之 端口转发 [ 一 ]

0x01 本次实验环境大致如下:

1
2
3
4
centos7_x64[heightlamp] 公网ip: 192.168.3.42 假设为入侵者自己的公网机器,即dns2tcp客户端
centos7_x64[heightlnmp] 公网ip: 192.168.3.41 内网ip: 192.168.32.123 假设为目标DMZ中的机器,有防火墙,即dns2tcp服务端
win2012r2en 公网ip: 192.168.3.123 假设为自己公网的dns服务器
centos6.8_x64[Midlnmp] 内网ip: 192.168.32.212 假设为目标内网中的一台linux机器

0x02 我们要实现的最终目的

1
2
3
4
正常情况下,我们本想通过heightlnmp机器来访问目标内网中Midlnmp的ssh,但苦于heightlamp和heightlamp之间的防火墙
且防火墙只允许真正的dns流量通过,所以,我们现在想通过在自己公网的dns服务器上做转发来绕过它们之间的防火墙
即在heightlamp和heightlnmp之间建立一层dns隧道,把要转发的端口数据都封装在dns流量里面进行穿透
最后实现的效果就是,当我访问heightlamp的某个指定端口,就可以直接访问到目标内网中的Midlnmp的ssh

Read More

轻量高效的 MITMF [ bettercap ]

0x01 关于bettercap:

1
2
3
一款相对还不错的中间人工具,出来也有些年头了,不过貌似维护的不是特别勤快
从名字就不难看出,作者似乎是有意在向我们说明,这是一款比ettercap更好的中间人工具,'b' is better ^_^
此外,工具本身基于ruby,官方要求的 ruby版本为 >= 1.9

0x02 基本介绍:

1
2
3
4
ubuntu 16.04.3 LTS ip: 192.168.3.12 入侵者机器
win2008r2cn ip: 192.168.3.23 模拟正常服务器,事先已准备好各种服务
win2008cn ip: 192.168.3.131 模拟正常服务器,事先已准备好各种服务
win2012r2cn ip: 192.168.3.122 模拟正常服务器,事先已准备好各种服务

0x03 首先,安装好bettercap,如果你系统的ruby版本小于1.9记得务必先升级一下,更多详情请参考其官方说明,如下

1
2
3
# apt-add-repository ppa:brightbox/ruby-ng
# apt-get update
# apt-get install ruby2.3 ruby2.3-dev

Read More

基础命令使用 [ win篇 ]

0x01 基础命令使用:

演示环境:

1
2
win2008R2cn ip: 192.168.3.23 假设为入侵者机器
win2012R2cn ip: 192.168.3.122 假设为目标机器

1
2
3
4
5
6
# whoami /all 查当前用户在目标系统中的具体权限,这可能会成为你一上来的习惯性动作 ^_^
# query user 查当前机器中正在线的用户,注意管理员此时在不在
# hostname 查当前机器的机器名,知道当前机器是干啥的
# net user 查当前机器中所有的用户名,开始搜集准备用户名字典
# net localgroup 查当前机器中所有的组名,了解不同组的职能,如,IT,HR,ADMIN,FILE...
# net localgroup "Administrators" 查指定组中的成员列表

查看本机ip配置:

1
2
# ipconfig /all 查看本机ip配置,观察本机是否在域内,内网段有几个,网关在哪里
# ipconfig /displaydns 查看本地DNS缓存

查看当前机器中所有的网络连接:

1
2
3
4
5
6
# net start 查看本机运行的所有服务
# netstat -ano 查看本机所有的tcp,udp端口连接及其对应的pid
# netstat -anob 查看本机所有的tcp,udp端口连接,pid及其对应的发起程序
# netstat -ano | findstr "ESTABLISHED" 查看当前正处于连接状态的端口及ip
# netstat -ano | findstr "LISTENING" 查看当前正处于监听状态的端口及ip
# netstat -ano | findstr "TIME_WAIT"

Read More

灵活击穿目标多级内网纵深 [ termite ]

0x01 关于termite [ Earthworm的升级版 ],程序地址, http://rootkiter.com/Termite/

1
2
3
一款极度小巧灵活的跳板机,有别于传统socks代理,它对于复杂内网环境下的渗透适用性更强,操作也极为简便
废话不多说,大家可自行在实战中多多体会,工具本身其实并无好坏,大部分还在乎用工具的人,退一万步来讲,即使工具再好,也顶不住别人用的烂 ^_^
在此也非常感谢 rootkiter 的无私贡献,真心希望圈子能多一些这样少说话多做事的人 ^_^

0x02 程序分为两部分,admin[为控制端]agent[为代理端节点],admin和agent所有选项用途均一致

1
2
3
-l 指定本地socks端口,等待远程连
-c 指定远程socks机器ip
-p 指定远程socks机器端口

0x03 此次模拟环境如下:

1
2
3
4
lnmp01 假设为我们自己的vps 其公网ip为: 192.168.3.30
MidLAMP 目标内网的linux机器 其内网ip为: 192.168.32.192
win2008r2cn 目标内网的win机器 其内网ip为: 192.168.32.134
win7cn 入侵者本地内网机器 其内网ip为: 192.168.32.168 [因为这里用虚拟机模拟的,所以内网段和目标一样]

Read More

利用icmp隧道 轻松穿透 tcp/udp四层 封锁

关于icmp 隧道使用场景简单说明:

1
两台机器间,除了允许相互ping [ 即icmp通信 ],其他的tcp/udp端口一律不允许,此时我们就可考虑利用icmp隧道进行穿透

0x01 此次用于演示的环境大致如下:

1
2
3
4
lnmp01 ip: 192.168.3.30 入侵者机器
MidLAMP ip: 192.168.3.19 为目标linux机器,即icmp跳板机
win2008R2cn ip: 192.168.3.23 为目标windows机器,开启了3389
win7en ip: 192.168.3.17

1
2
lnmp01想访问win2008R2cn的3389,由于win2008R2cn开了防火墙且做了ip限制,没法直接从lnmp01上进行访问
虽然win2008R2cn开启了防火墙,但好在MidLAMP能ping通win2008R2cn,即没有阻断它们之间的icmp通信
Read More