【域渗透】获取域环境内用户登录信息

之前见到有人在讨论域内用户在域内的机器ip怎么查呢,集思广益,结合答复及自己的观点,总结了以下内容。

0x00 adfind

有时候管理员会设置域用户只可以登录指定的的域内计算机,使用 adfind或者 powerview导出域用户信息可以查看;

1
2
3
4
5
6
7
8
查看域内用户详细信息:
adfind.exe -h DNS_SERVER_IP -sc u:rcoil(目标用户)
adfind.exe -h DNS_SERVER_IP -sc u:rcoil | findstr userWorkstations //非域权限执行需要指定账户密码


查看域内所有用户详细信息:
AdFind.exe -h DNS_SERVER_IP -sc u:*
详见:http://www.joeware.net/freetools/tools/adfind/usage.htm

powerview在域内执行就可以。

1
2
3
Get-NetUser -Domain demo.rcoil.me  //domain参数请加完整的域名

Invoke-EnumerateLocalAdmin

0x01 查看域内机器的用户目录文件夹

确定开机状态的计算机列表-建立连接-查看用户目录-断开连接,可以参考如下批处理:

1
2
3
4
5
6
7
8
9
for /f "delims=" %%i in (live.txt) DO (
net use \\%%i\C$ password /u:domain\domain_admins_user
if not errorlevel 1 (
for /f "delims=" %%j in ('dir /od /b \\%%i\C$\users\') do (
echo %%i:%%j>> test.log
)
net use \\%%i\C$ /del
)
)

域管不用建立连接就可以访问域内计算机资源,因此以域管权限运行时可以参考如下批处理:

1
2
3
4
5
for /f "delims=" %%i in (live.txt) DO (
for /f "delims=" %%j in ('dir /od /b \\%%i\C$\users\') do (
echo %%i:%%j>> test.log
)
)

代码补充:NetWorkConnectIPC

0x02 域控日志

wevtutil为Windows 事件命令行实用程序,其导出的日志为evtx格式(即Windows日志本身的存储格式),可以使用Windows事件查看器分析,Crtl+F查找,或者不使用epl参数,直接重定向输出即可。
wevtutil常用的场景是清理日志。

1
2
3
4
wevtutil cl application
wevtutil cl security
wevtutil cl system
wevtutil cl "windows powershell"

而它也可作为筛选分析日志的工具。这里需要注意的几个ID分别为:4624(用户登陆成功)、4768、4776(用户账号验证成功)

使用wevtutil结合python
  • wevtutil

    1
    wevtutil qe security /q:"Event[System[(EventID=4624 or EventID=4768 or EventID=4776)]]" /f:text /rd:true /c:1 > EvtLogon.dat
  • 参数说明

    1
    2
    3
    4
    5
    6
    7
    qe: 从日志或日志文件中查询事件;(默认xml格式显示)
    Security: 指定安全事件的日志;
    /q: 筛选规则,可以打开Windows事件查看器的筛选器配置筛选条件后转至XML复制筛选规则;
    /f: 以text格式显示
    /rd: 指定读取事件的方向
    /c: 指定个数
    该命令其它参数参考wevtutil /?
  • python

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    # -- coding:utf-8 --
    # Python v2.7.10

    import sys
    import csv

    evt = 'EvtLogon.dat'
    fevt = open(evt,'r')

    try:
    # For Eliminate redundancies
    lastdate = 'lastdate'
    lasttask = 'lasttask'
    # 因为windows下的换行符问题,导致写的文件会有空行,使用二进制模式打开
    with open('LogonStat.csv', 'wb') as csvfile:
    csv_write = csv.writer(csvfile)
    csv_write.writerow(["Task", "Date", "Account Name", "Account Domain", "Logon Address"])

    for eachline in fevt:
    if eachline.find('Event[') > -1:
    task = ''
    date = ''
    accname = ''
    logontype = ''
    logonaddr = ''
    skip = 0
    elif eachline.find('Date:') > -1:
    date = eachline[(eachline.find(':')+1):].strip()
    elif eachline.find('Task:') > -1:
    task = eachline.split(':')[1].strip()
    if (date == lastdate) and (task == lasttask): ## reduce
    skip = 1
    else:
    lastdate = date
    lasttask = task
    elif eachline.find('Account Name:') > -1:
    accname = eachline.split(':')[1].strip()
    if (task == 'Logon') and (accname.find('$') > -1): ## reduce
    skip = 1
    elif eachline.find('Account Domain:') > -1:
    accdomain = eachline.split(':')[1].strip()
    elif eachline.find('Source Network Address:') > -1:
    logonaddr = eachline[(eachline.find(':')+1):].strip()
    if logonaddr == '-':
    skip = 1
    if (skip == 0) and (task == 'Logon'):
    LogonStat = [[task, date, accname, accdomain, logonaddr]]
    csv_write.writerows(LogonStat)

    except Exception as e:
    # pass
    print 'Error: %s' % e
    sys.exit(1)

    fevt.close()
    csvfile.close()

PS: 筛选条件还有很多,都可以组合利用,从而筛选出自己所需要的信息。

1
2
3
wevtutil qe Security /q:"*[EventData[Data[@Name='LogonType']='10'] and EventData[Data[@Name='TargetUserName']='RcoIl'] and System[(EventID=4624) and TimeCreated[timediff(@SystemTime) <= 2592000000]]]"

wevtutil qe Security /q:"*[System[(Keywords='0x8020000000000000')] and EventData[Data[@Name='SubjectUserName']='RcoIl']]" /f:text /rd:true /c:2

0x03 DNS解析记录

1
2
dnscmd 127.0.0.1 /enumrecords demo.rcoil.me demo.rcoil.me. /type A //利用dnscmd导出dns正向解析记录
dnscmd 127.0.0.1 /zoneprint demo.rcoil.me >1.txt

C# .NET 编写的工具 SharpADDNSDump

0x04 Exchange 日志

4.1 Outlook Web Application

owa 默认的登陆日志位置如下:

1
C:\inetpub\logs\LogFiles\W3SVC1(W3SVC2)

日志是根据时间(天)¬为单位进行分割的,比如 u_ex190426 就表示 19 年 4 月 26 号那一天的日志。

在实战中,可根据自己的实际需求,把指定时间段内的日志想办法拖回来即可。

部分内容如下:

1
2019-04-26 06:49:51 192.10.20.200 POST /owa/auth.owa &CorrelationID=<empty>;&ClientId=KFTFMZBXS0ATOXTCCJLOQ&cafeReqId=c3db90a9-02e3-4fd0-8633-05fb7799f4fd; 443 rcoil.me\pentest 192.10.20.104 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/73.0.3683.103+Safari/537.36 https://exchange/owa/auth/logon.aspx?replaceCurrent=1&url=https%3a%2f%2fexchange%2fowa 302 0 0 31

此时我们需要的内容单单为:rcoil.me\pentest 192.10.20.104,其他数据可不理会。

4.2 Outlook 客户端

Outlook 客户端登陆的默认日志文件如下:

1
C:\Program Files\Microsoft\Exchange Server\V14\Logging\RPC Client Access

0x05【参考】

wevtutil筛选windows日志查询结果
[Tools]获取域环境内所有用户登录信息(附源码及程序)
域内用户在域内的机器ip怎么查呢?
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/dd337721(v%3dws.10)
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/cc732848(v=ws.11)

RcoIl Alipay
!坚持技术分享,您的支持将鼓励我继续创作!